class Bugzilla::Plugin::RedHat

Public Class Methods

new() click to toggle source
Calls superclass method Bugzilla::Plugin::Template::new
# File lib/ruby-bugzilla/rhbugzilla.rb, line 34
def initialize
  super

  @hostname = "bugzilla.redhat.com"
end

Public Instance Methods

parserhook(*args) click to toggle source
# File lib/ruby-bugzilla/rhbugzilla.rb, line 40
def parserhook(*args)
  parser, argv, opts, *etc = args
  parser.separator ""
  parser.separator "RH Bugzilla specific options:"
  parser.on('--cc=EMAILS', 'filter out the result by Cc in bugs') {|v| opts[:query][:cc] ||= []; opts[:query][:cc].push(*v.split(','))}
  parser.on('--filterversion=VERSION', 'filter out the result by the version in bugs') {|v| opts[:query][:version] ||= []; opts[:query][:version].push(*v.split(','))}
end
posthook(*args) click to toggle source
# File lib/ruby-bugzilla/rhbugzilla.rb, line 167
def posthook(*args)
  cmd, opts, *etc = args
  case cmd
  when :search
    if opts.include?('bugs') then
      opts['bugs'].each do |bug|
        if bug.include?('bug_status') then
          bug['status'] = bug['bug_status']
          bug.delete('bug_status')
        end
        if bug.include?('bug_id') then
          bug['id'] = bug['bug_id']
          bug.delete('bug_id')
        end
        if bug.include?('bug_severity') then
          bug['severity'] = bug['bug_severity']
          bug.delete('bug_severity')
        end
        if bug.include?('short_desc') then
          bug['summary'] = bug['short_desc']
          bug.delete('short_desc')
        end
      end
    end
  when :metrics
    metricsopts = etc[0]

    if opts.include?('bugs') then
      opts['bugs'].each do |bug|
        if bug.include?('bug_status') then
          bug['status'] = bug['bug_status']
          bug.delete('bug_status')
        end
        if bug.include?('bug_id') then
          bug['id'] = bug['bug_id']
          bug.delete('bug_id')
        end
        if bug.include?('bug_severity') then
          bug['severity'] = bug['bug_severity']
          bug.delete('bug_severity')
        end
        if bug.include?('short_desc') then
          bug['summary'] = bug['short_desc']
          bug.delete('short_desc')
        end
      end
    end
  else
  end
end
prehook(*args) click to toggle source
# File lib/ruby-bugzilla/rhbugzilla.rb, line 48
def prehook(*args)
  cmd, opts, *etc = args
  case cmd
  when :search
    # This parameter is Red Hat Extension
    # See https://bugzilla.redhat.com/docs/en/html/api/Bugzilla/WebService/Bug.html#search
    opts[:query_format] = 'advanced'
    extra_field = 0

    if opts.include?(:status) then
      opts[:bug_status] = opts[:status]
      opts.delete(:status)
    end
    if opts.include?(:id) then
      opts[:bug_id] = opts[:id]
      opts.delete(:id)
    end
    if opts.include?(:severity)
      opts[:bug_severity] = opts[:severity]
    end
    if opts.include?(:summary) then
      opts[:short_desc] = opts[:summary]
      opts.delete(:summary)
    end
    if opts.include?(:cc) then
      # CC should be parsed "any words" by default
      opts[eval(":emailcc1")] = 1
      opts[eval(":emailtype1")] = :anywordssubstr
      opts[eval(":email1")] = opts[:cc]
      opts.delete(:cc)
    end
    if opts.include?(:creation_time) then
      opts[sprintf("field0-%d-0", extra_field)] = :creation_ts
      opts[sprintf("type0-%d-0", extra_field)] = :greaterthan
      opts[sprintf("value0-%d-0", extra_field)] = opts[:creation_time]
      opts.delete(:creation_time)
    end
  when :metrics
    metricsopts = etc[0]
    extra_field = 0

    if opts.include?(:status) then
      opts[:bug_status] = opts[:status]
      opts.delete(:status)
    end
    if opts.include?(:id) then
      opts[:bug_id] = opts[:id]
      opts.delete(:id)
    end
    if opts.include?(:severity)
      opts[:bug_severity] = opts[:severity]
    end
    if opts.include?(:summary) then
      opts[:short_desc] = opts[:summary]
      opts.delete(:summary)
    end
    if opts.include?(:cc) then
      i = 1
      opts[:cc].each do |e|
        opts[eval(":emailcc#{i}")] = 1
        opts[eval(":emailtype#{i}")] = :substring
        opts[eval(":email#{i}")] = e
      end
      opts.delete(:cc)
    end

    if opts.include?(:creation_time) then
      if opts[:creation_time].kind_of?(Array) then
        opts[sprintf("field0-%d-0", extra_field)] = :creation_ts
        opts[sprintf("type0-%d-0", extra_field)] = :greaterthan
        opts[sprintf("value0-%d-0", extra_field)] = opts[:creation_time][0]
        extra_field += 1
        opts[sprintf("field0-%d-0", extra_field)] = :creation_ts
        opts[sprintf("type0-%d-0", extra_field)] = :lessthan
        opts[sprintf("value0-%d-0", extra_field)] = opts[:creation_time][1]
        extra_field += 1
      else
        opts[sprintf("field0-%d-0", extra_field)] = :creation_ts
        opts[sprintf("type0-%d-0", extra_field)] = :greaterthan
        opts[sprintf("value0-%d-0", extra_field)] = opts[:creation_time]
        extra_field += 1
      end
      opts.delete(:creation_time)
    end
    if opts.include?(:last_change_time) then
      if opts[:last_change_time].kind_of?(Array) then
        opts[:chfieldfrom] = opts[:last_change_time][0]
        opts[:chfieldto] = opts[:last_change_time][1]
        if opts[:bug_status] == 'CLOSED' then
          opts[sprintf("field0-%d-0", extra_field)] = :bug_status
          opts[sprintf("type0-%d-0", extra_field)] = :changedto
          opts[sprintf("value0-%d-0", extra_field)] = opts[:bug_status]
          extra_field += 1
        end
      end
      opts.delete(:last_change_time)
    end
    if opts.include?(:metrics_closed_after) then
      opts[sprintf("field0-%d-0", extra_field)] = :bug_status
      opts[sprintf("type0-%d-0", extra_field)] = :changedafter
      opts[sprintf("value0-%d-0", extra_field)] = opts[:metrics_closed_after]
      extra_field += 1
      opts.delete(:metrics_closed_after)
    end
    if opts.include?(:metrics_not_closed) then
      opts[sprintf("field0-%d-0", extra_field)] = :bug_status
      opts[sprintf("type0-%d-0", extra_field)] = :notequals
      opts[sprintf("value0-%d-0", extra_field)] = 'CLOSED'
      extra_field += 1
      opts[sprintf("field0-%d-0", extra_field)] = :creation_ts
      opts[sprintf("type0-%d-0", extra_field)] = :lessthan
      opts[sprintf("value0-%d-0", extra_field)] = opts[:metrics_not_closed]
      extra_field += 1
      opts.delete(:metrics_not_closed)
    end
  else
  end
end