File: tags_verify.rb

package info (click to toggle)
jruby 9.4.8.0%2Bds-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 89,244 kB
  • sloc: ruby: 548,574; java: 276,189; yacc: 25,873; ansic: 6,178; xml: 6,111; sh: 1,855; sed: 94; makefile: 78; jsp: 48; tcl: 40; exp: 12
file content (69 lines) | stat: -rw-r--r-- 1,689 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
require 'xmlrpc/client'
require 'pp'
require 'set'

# Simple script to scan all JRuby's rubyspec tags
# and report invalid ones, i.e. those that have
# references to already resolved/closed bugs.

if ARGV.size != 2
  puts "Usage: tags_verify.rb jira-login jira-password"
  exit 1
end

class JiraVerifier
  INVALID_STATUSES = {"5"=>"Resolved", "6"=>"Closed"}
  def initialize(login, pass)
    @server = XMLRPC::Client.new('jira.codehaus.org', "/rpc/xmlrpc")
    @auth =  @server.call("jira1.login", login, pass)
    @stat_info = {}
    @server.call("jira1.getStatuses", @auth).each { |s|
      @stat_info[s["id"]] = s["name"]
    }
    # pp @stat_info
  end
  def get_issue(id)
    @server.call("jira1.getIssue", @auth, id)
  end
  def get_status(issue)
    issue["status"]
  end
  def is_valid(issue)
    INVALID_STATUSES[get_status(issue)].nil?
  end
  def check_ids(ids)
    ids.each { |id, files|
      issue = get_issue(id)
      unless (is_valid(issue))
        puts "#{id} -- Wrong State: #{@stat_info[get_status(issue)]}. Used in the following tag files:"
        files.each { |filename|
          puts "  - #{filename}"
        }
      end
    }
  end
  def logout
    @server.call("jira1.logout", @auth)
  end
end

TAGS_DIR = File.expand_path(File.join(File.dirname(__FILE__), 'tags'))
puts "Verifying tags in '#{TAGS_DIR}'..."

ids = {}

Dir.glob(TAGS_DIR + "/**/*.txt").each { |filename|
  File.open(filename, 'r') { |f|
    while (line = f.gets)
      line.scan(/JRUBY-\d+/) { |id|
        (ids[id] ||= Set.new) << filename
      }
    end
  }
}

puts "#{ids.size} JRuby jira issues used in the tags."

jira = JiraVerifier.new(ARGV[0], ARGV[1])
jira.check_ids(ids)
jira.logout