forked from jruby/jruby
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtags_verify.rb
69 lines (61 loc) · 1.65 KB
/
tags_verify.rb
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