meta_project 0.4.3 → 0.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES +14 -2
- data/Rakefile +1 -1
- data/lib/meta_project/patois/parser.rb +99 -0
- data/lib/meta_project/patois.rb +1 -0
- data/lib/meta_project/project/xforge/xforge_base.rb +2 -2
- data/lib/meta_project/release/freshmeat.rb +267 -0
- data/lib/meta_project/release/raa.rb +572 -0
- data/lib/meta_project/tracker/base.rb +5 -0
- data/lib/meta_project/tracker/digit_issues.rb +12 -4
- data/lib/meta_project/tracker/issue.rb +45 -3
- data/lib/meta_project/tracker/jira/jira_issues.rb +34 -0
- data/lib/meta_project/tracker/jira/jira_tracker.rb +42 -31
- data/lib/meta_project/tracker/jira.rb +1 -0
- data/lib/meta_project/tracker/trac/trac_tracker.rb +16 -2
- data/lib/meta_project/tracker/xforge/ruby_forge_tracker.rb +1 -1
- data/lib/meta_project/tracker/xforge/source_forge_tracker.rb +1 -1
- data/lib/meta_project/tracker/xforge/xforge_tracker.rb +8 -13
- data/lib/meta_project.rb +1 -0
- metadata +7 -2
@@ -0,0 +1,34 @@
|
|
1
|
+
module MetaProject
|
2
|
+
module Tracker
|
3
|
+
module Jira
|
4
|
+
# This module should be included by trackers that follow a digit-based issue scheme
|
5
|
+
module JiraIssues
|
6
|
+
|
7
|
+
# Patois issue pattern
|
8
|
+
def issue_pattern
|
9
|
+
/([A-Za-z]+-[\d]+)/
|
10
|
+
end
|
11
|
+
module_function :issue_pattern
|
12
|
+
|
13
|
+
# Patois command pattern
|
14
|
+
def command_pattern
|
15
|
+
/([A-Za-z]*).?([A-Za-z]+-[\d]+(?:(?:[, &]*|\s?and\s?)[A-Za-z]+-[\d]+)*)/
|
16
|
+
end
|
17
|
+
module_function :command_pattern
|
18
|
+
|
19
|
+
def identifier_examples
|
20
|
+
["DC-420", "pico-12"]
|
21
|
+
end
|
22
|
+
|
23
|
+
def markup(text)
|
24
|
+
text.gsub(issue_pattern) do |match|
|
25
|
+
issue_identifier = $1
|
26
|
+
issue = issue(issue_identifier)
|
27
|
+
issue.url ? "<a href=\"#{issue.url}\">#{issue_identifier}: #{issue.summary}</a>" : issue_identifier
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -3,7 +3,15 @@ require 'xmlrpc/client'
|
|
3
3
|
module MetaProject
|
4
4
|
module Tracker
|
5
5
|
module Jira
|
6
|
+
|
7
|
+
# Interface to JIRA. Uses the XML-RPC API defined at:
|
8
|
+
#
|
9
|
+
# http://confluence.atlassian.com/pages/viewpage.action?pageId=9623
|
10
|
+
# http://confluence.atlassian.com/pages/viewpage.action?pageId=1035
|
11
|
+
# http://www.atlassian.com/software/jira/docs/api/rpc-jira-plugin/latest/index.html?com/atlassian/jira/rpc/xmlrpc/XmlRpcService.html
|
6
12
|
class JiraTracker < Base
|
13
|
+
|
14
|
+
include JiraIssues
|
7
15
|
JIRA_API = "jira1"
|
8
16
|
|
9
17
|
attr_accessor :jira_base_url, :jira_project_id
|
@@ -17,52 +25,55 @@ module MetaProject
|
|
17
25
|
#
|
18
26
|
# JIRA_CODEHAUS_ORG_JIRA_USER
|
19
27
|
# JIRA_CODEHAUS_ORG_JIRA_PASSWORD
|
28
|
+
# TODO: pass in to ctor instead. do this somewhere else!
|
20
29
|
def initialize(jira_base_url=nil, jira_project_id=nil)
|
21
30
|
@jira_base_url, @jira_project_id = jira_base_url, jira_project_id
|
22
31
|
end
|
23
32
|
|
24
|
-
def identifier_regexp
|
25
|
-
/([A-Z]+-[\d]+)/
|
26
|
-
end
|
27
|
-
|
28
|
-
def identifier_examples
|
29
|
-
["DC-420", "PICO-12"]
|
30
|
-
end
|
31
|
-
|
32
33
|
def overview
|
33
34
|
"#{@jira_base_url}/browse/#{@jira_project_id}"
|
34
35
|
end
|
35
36
|
|
36
|
-
def issue
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
STDERR.puts("Couldn't log in to JIRA at #{@rooturl}: #{e.message}")
|
48
|
-
nil
|
37
|
+
def create(issue)
|
38
|
+
issue_struct = {
|
39
|
+
"project" => @jira_project_id,
|
40
|
+
"summary" => issue.summary,
|
41
|
+
"description" => issue.detail,
|
42
|
+
"type" => 2, # magic number!
|
43
|
+
"priority" => 1
|
44
|
+
}
|
45
|
+
login do |session|
|
46
|
+
issue_struct = session.createIssue(issue_struct)
|
47
|
+
issue.attributes[:identifier] = issue_struct["key"]
|
49
48
|
end
|
50
49
|
end
|
51
|
-
|
52
|
-
def
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
issue
|
50
|
+
|
51
|
+
def materialize(issue)
|
52
|
+
login do |session|
|
53
|
+
issue_struct = session.getIssue(issue.identifier)
|
54
|
+
|
55
|
+
issue.attributes[:summary] = issue_struct["summary"]
|
56
|
+
issue.attributes[:detail] = issue_struct["description"]
|
57
|
+
issue.attributes[:url] = "#{@jira_base_url}/browse/#{issue.identifier}"
|
57
58
|
end
|
58
59
|
end
|
59
|
-
|
60
|
+
|
60
61
|
private
|
61
62
|
|
62
63
|
def login
|
63
64
|
client = XMLRPC::Client.new2("#{@jira_base_url}/rpc/xmlrpc")
|
64
65
|
token = client.call("#{JIRA_API}.login", user, password)
|
65
|
-
|
66
|
+
begin
|
67
|
+
yield Session.new(client, token)
|
68
|
+
rescue XMLRPC::FaultException => e
|
69
|
+
# Probably bad issue number or failed login
|
70
|
+
STDERR.puts("WARNING: Exception from JIRA: #{e.faultCode}, #{e.faultString}")
|
71
|
+
nil
|
72
|
+
rescue LoginException => e
|
73
|
+
# Missing env vars
|
74
|
+
STDERR.puts("WARNING: Couldn't log in to JIRA at #{@rooturl}: #{e.message}")
|
75
|
+
nil
|
76
|
+
end
|
66
77
|
end
|
67
78
|
|
68
79
|
def user
|
@@ -97,8 +108,8 @@ module MetaProject
|
|
97
108
|
@client, @token = client, token
|
98
109
|
end
|
99
110
|
|
100
|
-
def method_missing(sym, args, &block)
|
101
|
-
token_args = [@token]
|
111
|
+
def method_missing(sym, *args, &block)
|
112
|
+
token_args = [@token] + args
|
102
113
|
xmlrpc_method = "#{JIRA_API}.#{sym.to_s}"
|
103
114
|
@client.call(xmlrpc_method, *token_args)
|
104
115
|
end
|
@@ -13,8 +13,22 @@ module MetaProject
|
|
13
13
|
def overview
|
14
14
|
"#{@trac_base_url}/report"
|
15
15
|
end
|
16
|
-
|
17
|
-
def issue
|
16
|
+
|
17
|
+
def materialize(issue)
|
18
|
+
begin
|
19
|
+
url = "#{@trac_base_url}/ticket/#{issue.identifier}"
|
20
|
+
html = open(url).read
|
21
|
+
summary = html[/Ticket ##{issue.identifier}\s*<\/h1>\s*<h2>([^<]*)<\/h2>/n, 1]
|
22
|
+
issue.attributes[:summary] = summary
|
23
|
+
issue.attributes[:url] = url
|
24
|
+
rescue OpenURI::HTTPError => e
|
25
|
+
STDERR.puts e.message
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def XXissue(issue_identifier)
|
18
32
|
issue_uri = "#{@trac_base_url}/ticket/#{issue_identifier}"
|
19
33
|
begin
|
20
34
|
html = open(issue_uri) { |data| data.read }
|
@@ -7,7 +7,7 @@ module MetaProject
|
|
7
7
|
/\/tracker\/\?atid=(\d+)&group_id=\d*&func=browse/
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
10
|
+
def issue_summary_regexp(identifier)
|
11
11
|
/<a href=\"\/tracker\/index.php\?func=detail&aid=#{identifier}&group_id=\d+&atid=\d+\">([^<]*)<\/a>/
|
12
12
|
end
|
13
13
|
|
@@ -7,7 +7,7 @@ module MetaProject
|
|
7
7
|
/\/tracker\/\?atid=(\d+)&group_id=\d*&func=browse/
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
10
|
+
def issue_summary_regexp(identifier)
|
11
11
|
/<a href=\"\/tracker\/index.php\?func=detail&aid=#{identifier}&group_id=\d+&atid=\d+\">([^<]*)<\/a>/
|
12
12
|
end
|
13
13
|
|
@@ -24,17 +24,11 @@ module MetaProject
|
|
24
24
|
end
|
25
25
|
nil
|
26
26
|
end
|
27
|
-
|
28
|
-
def
|
29
|
-
text.gsub(identifier_regexp) do |match|
|
30
|
-
issue_identifier = $1
|
31
|
-
issue = issue(issue_identifier)
|
32
|
-
issue ? "<a href=\"#{issue.uri}\">\##{issue_identifier}: #{issue.summary}</a>" : "\##{issue_identifier}"
|
33
|
-
end
|
27
|
+
|
28
|
+
def materialize(issue)
|
34
29
|
end
|
35
30
|
|
36
31
|
class SubTracker
|
37
|
-
attr_reader :uri
|
38
32
|
|
39
33
|
def initialize(tracker, atid)
|
40
34
|
@tracker = tracker
|
@@ -44,12 +38,13 @@ module MetaProject
|
|
44
38
|
end
|
45
39
|
|
46
40
|
def issue(identifier)
|
47
|
-
html = open(uri) { |data| data.read }
|
41
|
+
html = open(@uri) { |data| data.read }
|
48
42
|
|
49
|
-
|
50
|
-
if(html =~
|
51
|
-
|
52
|
-
|
43
|
+
issue_summary_regexp = @tracker.issue_summary_regexp(identifier)
|
44
|
+
if(html =~ issue_summary_regexp)
|
45
|
+
issue_url = @tracker.project.group_id_uri("tracker/index.php", "&atid=#{@atid}&func=detail&aid=#{identifier}")
|
46
|
+
issue_summary = $1.strip
|
47
|
+
return Issue.new(@tracker, :summary => issue_summary, :url => issue_url)
|
53
48
|
end
|
54
49
|
nil
|
55
50
|
end
|
data/lib/meta_project.rb
CHANGED
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
|
|
3
3
|
specification_version: 1
|
4
4
|
name: meta_project
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.4.
|
7
|
-
date: 2005-08-
|
6
|
+
version: 0.4.4
|
7
|
+
date: 2005-08-30 00:00:00 -04:00
|
8
8
|
summary: Ruby based make-like utility.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -36,11 +36,13 @@ files:
|
|
36
36
|
- README
|
37
37
|
- TODO
|
38
38
|
- lib/meta_project.rb
|
39
|
+
- lib/meta_project/patois.rb
|
39
40
|
- lib/meta_project/project.rb
|
40
41
|
- lib/meta_project/project_analyzer.rb
|
41
42
|
- lib/meta_project/scm_web.rb
|
42
43
|
- lib/meta_project/tracker.rb
|
43
44
|
- lib/meta_project/version_parser.rb
|
45
|
+
- lib/meta_project/patois/parser.rb
|
44
46
|
- lib/meta_project/project/base.rb
|
45
47
|
- lib/meta_project/project/codehaus.rb
|
46
48
|
- lib/meta_project/project/trac.rb
|
@@ -52,12 +54,15 @@ files:
|
|
52
54
|
- lib/meta_project/project/xforge/source_forge.rb
|
53
55
|
- lib/meta_project/project/xforge/xfile.rb
|
54
56
|
- lib/meta_project/project/xforge/xforge_base.rb
|
57
|
+
- lib/meta_project/release/freshmeat.rb
|
58
|
+
- lib/meta_project/release/raa.rb
|
55
59
|
- lib/meta_project/tracker/base.rb
|
56
60
|
- lib/meta_project/tracker/digit_issues.rb
|
57
61
|
- lib/meta_project/tracker/issue.rb
|
58
62
|
- lib/meta_project/tracker/jira.rb
|
59
63
|
- lib/meta_project/tracker/trac.rb
|
60
64
|
- lib/meta_project/tracker/xforge.rb
|
65
|
+
- lib/meta_project/tracker/jira/jira_issues.rb
|
61
66
|
- lib/meta_project/tracker/jira/jira_tracker.rb
|
62
67
|
- lib/meta_project/tracker/trac/trac_tracker.rb
|
63
68
|
- lib/meta_project/tracker/xforge/ruby_forge_tracker.rb
|