class Bugzilla::Plugin::RedHat

Public Class Methods

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

  @hostname = 'bugzilla.redhat.com'
end

Public Instance Methods

parserhook(*args) click to toggle source
# File lib/bugzilla/plugins/rhbugzilla.rb, line 37
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/bugzilla/plugins/rhbugzilla.rb, line 159
def posthook(*args)
  cmd, opts, *etc = args
  case cmd
  when :search
    if opts.include?('bugs')
      opts['bugs'].each do |bug|
        if bug.include?('bug_status')
          bug['status'] = bug['bug_status']
          bug.delete('bug_status')
        end
        if bug.include?('bug_id')
          bug['id'] = bug['bug_id']
          bug.delete('bug_id')
        end
        if bug.include?('bug_severity')
          bug['severity'] = bug['bug_severity']
          bug.delete('bug_severity')
        end
        if bug.include?('short_desc')
          bug['summary'] = bug['short_desc']
          bug.delete('short_desc')
        end
      end
     end
  when :metrics
    metricsopts = etc[0]

    if opts.include?('bugs')
      opts['bugs'].each do |bug|
        if bug.include?('bug_status')
          bug['status'] = bug['bug_status']
          bug.delete('bug_status')
        end
        if bug.include?('bug_id')
          bug['id'] = bug['bug_id']
          bug.delete('bug_id')
        end
        if bug.include?('bug_severity')
          bug['severity'] = bug['bug_severity']
          bug.delete('bug_severity')
        end
        if bug.include?('short_desc')
          bug['summary'] = bug['short_desc']
          bug.delete('short_desc')
        end
      end
    end
 end
end
prehook(*args) click to toggle source
# File lib/bugzilla/plugins/rhbugzilla.rb, line 45
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)
      opts[:bug_status] = opts[:status]
      opts.delete(:status)
    end
    if opts.include?(:id)
      opts[:bug_id] = opts[:id]
      opts.delete(:id)
    end
    opts[:bug_severity] = opts[:severity] if opts.include?(:severity)
    if opts.include?(:summary)
      opts[:short_desc] = opts[:summary]
      opts.delete(:summary)
    end
    if opts.include?(:cc)
      # 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)
      opts[format('field0-%d-0', extra_field)] = :creation_ts
      opts[format('type0-%d-0', extra_field)] = :greaterthan
      opts[format('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)
      opts[:bug_status] = opts[:status]
      opts.delete(:status)
    end
    if opts.include?(:id)
      opts[:bug_id] = opts[:id]
      opts.delete(:id)
    end
    opts[:bug_severity] = opts[:severity] if opts.include?(:severity)
    if opts.include?(:summary)
      opts[:short_desc] = opts[:summary]
      opts.delete(:summary)
    end
    if opts.include?(:cc)
      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)
      if opts[:creation_time].is_a?(Array)
        opts[format('field0-%d-0', extra_field)] = :creation_ts
        opts[format('type0-%d-0', extra_field)] = :greaterthan
        opts[format('value0-%d-0', extra_field)] = opts[:creation_time][0]
        extra_field += 1
        opts[format('field0-%d-0', extra_field)] = :creation_ts
        opts[format('type0-%d-0', extra_field)] = :lessthan
        opts[format('value0-%d-0', extra_field)] = opts[:creation_time][1]
        extra_field += 1
      else
        opts[format('field0-%d-0', extra_field)] = :creation_ts
        opts[format('type0-%d-0', extra_field)] = :greaterthan
        opts[format('value0-%d-0', extra_field)] = opts[:creation_time]
        extra_field += 1
      end
      opts.delete(:creation_time)
    end
    if opts.include?(:last_change_time)
      if opts[:last_change_time].is_a?(Array)
        opts[:chfieldfrom] = opts[:last_change_time][0]
        opts[:chfieldto] = opts[:last_change_time][1]
        if opts[:bug_status] == 'CLOSED'
          opts[format('field0-%d-0', extra_field)] = :bug_status
          opts[format('type0-%d-0', extra_field)] = :changedto
          opts[format('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)
      opts[format('field0-%d-0', extra_field)] = :bug_status
      opts[format('type0-%d-0', extra_field)] = :changedafter
      opts[format('value0-%d-0', extra_field)] = opts[:metrics_closed_after]
      extra_field += 1
      opts.delete(:metrics_closed_after)
    end
    if opts.include?(:metrics_not_closed)
      opts[format('field0-%d-0', extra_field)] = :bug_status
      opts[format('type0-%d-0', extra_field)] = :notequals
      opts[format('value0-%d-0', extra_field)] = 'CLOSED'
      extra_field += 1
      opts[format('field0-%d-0', extra_field)] = :creation_ts
      opts[format('type0-%d-0', extra_field)] = :lessthan
      opts[format('value0-%d-0', extra_field)] = opts[:metrics_not_closed]
      extra_field += 1
      opts.delete(:metrics_not_closed)
    end
 end
end