meta_project 0.4.12 → 0.4.13
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +283 -277
- data/MIT-LICENSE +21 -21
- data/README +130 -126
- data/Rakefile +152 -152
- data/doc/base_attrs.rdoc +2 -2
- data/lib/meta_project.rb +11 -11
- data/lib/meta_project/core_ext/open_uri.rb +22 -22
- data/lib/meta_project/core_ext/pathname.rb +36 -36
- data/lib/meta_project/core_ext/string.rb +4 -4
- data/lib/meta_project/http/multipart.rb +31 -31
- data/lib/meta_project/patois/parser.rb +98 -98
- data/lib/meta_project/project.rb +4 -4
- data/lib/meta_project/project/base.rb +8 -8
- data/lib/meta_project/project/codehaus.rb +1 -1
- data/lib/meta_project/project/codehaus/codehaus_project_svn.rb +30 -30
- data/lib/meta_project/project/trac.rb +1 -1
- data/lib/meta_project/project/trac/trac_project.rb +53 -53
- data/lib/meta_project/project/xforge.rb +5 -5
- data/lib/meta_project/project/xforge/ruby_forge.rb +46 -46
- data/lib/meta_project/project/xforge/session.rb +177 -177
- data/lib/meta_project/project/xforge/source_forge.rb +49 -49
- data/lib/meta_project/project/xforge/xfile.rb +44 -44
- data/lib/meta_project/project/xforge/xforge_base.rb +81 -81
- data/lib/meta_project/project_analyzer.rb +35 -35
- data/lib/meta_project/release/freshmeat.rb +267 -267
- data/lib/meta_project/release/raa.rb +572 -572
- data/lib/meta_project/scm_web.rb +1 -1
- data/lib/meta_project/scm_web/browser.rb +111 -111
- data/lib/meta_project/scm_web/pathname.rb +88 -88
- data/lib/meta_project/tracker.rb +6 -6
- data/lib/meta_project/tracker/base.rb +23 -23
- data/lib/meta_project/tracker/digit_issues.rb +33 -33
- data/lib/meta_project/tracker/issue.rb +56 -56
- data/lib/meta_project/tracker/jira.rb +2 -2
- data/lib/meta_project/tracker/jira/jira_issues.rb +34 -34
- data/lib/meta_project/tracker/jira/jira_tracker.rb +148 -123
- data/lib/meta_project/tracker/trac.rb +1 -1
- data/lib/meta_project/tracker/trac/trac_tracker.rb +32 -32
- data/lib/meta_project/tracker/xforge.rb +3 -3
- data/lib/meta_project/tracker/xforge/ruby_forge_tracker.rb +17 -17
- data/lib/meta_project/tracker/xforge/source_forge_tracker.rb +17 -17
- data/lib/meta_project/tracker/xforge/xforge_tracker.rb +190 -190
- data/lib/meta_project/version_parser.rb +52 -52
- data/lib/rake/contrib/xforge.rb +3 -3
- data/lib/rake/contrib/xforge/base.rb +64 -64
- data/lib/rake/contrib/xforge/news_publisher.rb +97 -97
- data/lib/rake/contrib/xforge/release.rb +134 -134
- metadata +4 -3
data/lib/meta_project/scm_web.rb
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
require 'meta_project/scm_web/browser'
|
1
|
+
require 'meta_project/scm_web/browser'
|
2
2
|
require 'meta_project/scm_web/pathname'
|
@@ -1,112 +1,112 @@
|
|
1
|
-
module MetaProject
|
2
|
-
module ScmWeb
|
3
|
-
|
4
|
-
# A Browser instance is capable of generating URLs to various files and diffs
|
5
|
-
# in an online scm web interface.
|
6
|
-
#
|
7
|
-
class Browser
|
8
|
-
|
9
|
-
attr_accessor :dir_spec, :history_spec, :raw_spec, :html_spec, :diff_spec
|
10
|
-
|
11
|
-
# The variables to use in +uri_specs+ are:
|
12
|
-
#
|
13
|
-
# * path
|
14
|
-
# * revision
|
15
|
-
# * previous_revision
|
16
|
-
#
|
17
|
-
def initialize(dir_spec=nil, history_spec=nil, raw_spec=nil, html_spec=nil, diff_spec=nil, child_dirs_pattern=nil, child_files_pattern=nil)
|
18
|
-
self.dir_spec = dir_spec unless dir_spec.nil?
|
19
|
-
self.history_spec = history_spec unless history_spec.nil?
|
20
|
-
self.raw_spec = raw_spec unless raw_spec.nil?
|
21
|
-
self.html_spec = html_spec unless html_spec.nil?
|
22
|
-
self.diff_spec = diff_spec unless diff_spec.nil?
|
23
|
-
|
24
|
-
@child_dirs_pattern = child_dirs_pattern
|
25
|
-
@child_files_pattern = child_files_pattern
|
26
|
-
end
|
27
|
-
|
28
|
-
def dir_spec=(spec)
|
29
|
-
validate_presence_of("dir_spec", spec, "path")
|
30
|
-
@dir_spec = spec
|
31
|
-
end
|
32
|
-
|
33
|
-
def history_spec=(spec)
|
34
|
-
validate_presence_of("history_spec", spec, "path")
|
35
|
-
@history_spec = spec
|
36
|
-
end
|
37
|
-
|
38
|
-
def raw_spec=(spec)
|
39
|
-
validate_presence_of("raw_spec", spec, "path")
|
40
|
-
validate_presence_of("raw_spec", spec, "revision")
|
41
|
-
@raw_spec = spec
|
42
|
-
end
|
43
|
-
|
44
|
-
def html_spec=(spec)
|
45
|
-
validate_presence_of("html_spec", spec, "path")
|
46
|
-
validate_presence_of("html_spec", spec, "revision")
|
47
|
-
@html_spec = spec
|
48
|
-
end
|
49
|
-
|
50
|
-
def diff_spec=(spec)
|
51
|
-
validate_presence_of("diff_spec", spec, "revision")
|
52
|
-
# Can't assume path and previous_revision to be present (Trac doesn't use them)
|
53
|
-
#validate_presence_of("diff_spec", @diff_spec, "path")
|
54
|
-
#validate_presence_of("diff_spec", @diff_spec, "previous_revision")
|
55
|
-
@diff_spec = spec
|
56
|
-
end
|
57
|
-
|
58
|
-
def dir(path)
|
59
|
-
file_uri(path, nil, @dir_spec, nil)
|
60
|
-
end
|
61
|
-
|
62
|
-
def history(path)
|
63
|
-
file_uri(path, nil, @history_spec, nil)
|
64
|
-
end
|
65
|
-
|
66
|
-
def raw(path, revision)
|
67
|
-
file_uri(path, revision, @raw_spec, nil)
|
68
|
-
end
|
69
|
-
|
70
|
-
def html(path, revision)
|
71
|
-
file_uri(path, revision, @html_spec, nil)
|
72
|
-
end
|
73
|
-
|
74
|
-
def diff(path, revision, previous_revision)
|
75
|
-
file_uri(path, revision, @diff_spec, previous_revision)
|
76
|
-
end
|
77
|
-
|
78
|
-
# The regexp used to determine child directories of a directory
|
79
|
-
def child_dirs_pattern
|
80
|
-
@child_dirs_pattern
|
81
|
-
end
|
82
|
-
|
83
|
-
# The regexp used to determine child files of a directory
|
84
|
-
def child_files_pattern
|
85
|
-
@child_files_pattern
|
86
|
-
end
|
87
|
-
|
88
|
-
# Returns a Pathname representing the root directory of this browser.
|
89
|
-
# NOTE: The root of the browser may be at a lower level than
|
90
|
-
# the toplevel of the online scm web interface; It depends
|
91
|
-
# on the configuration of this instance.
|
92
|
-
def root
|
93
|
-
Pathname.new(self, nil, "", nil, true)
|
94
|
-
end
|
95
|
-
|
96
|
-
private
|
97
|
-
|
98
|
-
def validate_presence_of(spec_name, spec, var)
|
99
|
-
raise "Missing \#{#{var}} in #{spec_name}: '#{spec}'" unless spec =~ /\#\{#{var}\}/
|
100
|
-
end
|
101
|
-
|
102
|
-
def file_uri(path, revision, spec, previous_revision)
|
103
|
-
begin
|
104
|
-
eval("\"#{spec}\"", binding)
|
105
|
-
rescue NameError
|
106
|
-
raise "Couldn't evaluate '#{spec}'"
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
end
|
111
|
-
end
|
1
|
+
module MetaProject
|
2
|
+
module ScmWeb
|
3
|
+
|
4
|
+
# A Browser instance is capable of generating URLs to various files and diffs
|
5
|
+
# in an online scm web interface.
|
6
|
+
#
|
7
|
+
class Browser
|
8
|
+
|
9
|
+
attr_accessor :dir_spec, :history_spec, :raw_spec, :html_spec, :diff_spec
|
10
|
+
|
11
|
+
# The variables to use in +uri_specs+ are:
|
12
|
+
#
|
13
|
+
# * path
|
14
|
+
# * revision
|
15
|
+
# * previous_revision
|
16
|
+
#
|
17
|
+
def initialize(dir_spec=nil, history_spec=nil, raw_spec=nil, html_spec=nil, diff_spec=nil, child_dirs_pattern=nil, child_files_pattern=nil)
|
18
|
+
self.dir_spec = dir_spec unless dir_spec.nil?
|
19
|
+
self.history_spec = history_spec unless history_spec.nil?
|
20
|
+
self.raw_spec = raw_spec unless raw_spec.nil?
|
21
|
+
self.html_spec = html_spec unless html_spec.nil?
|
22
|
+
self.diff_spec = diff_spec unless diff_spec.nil?
|
23
|
+
|
24
|
+
@child_dirs_pattern = child_dirs_pattern
|
25
|
+
@child_files_pattern = child_files_pattern
|
26
|
+
end
|
27
|
+
|
28
|
+
def dir_spec=(spec)
|
29
|
+
validate_presence_of("dir_spec", spec, "path")
|
30
|
+
@dir_spec = spec
|
31
|
+
end
|
32
|
+
|
33
|
+
def history_spec=(spec)
|
34
|
+
validate_presence_of("history_spec", spec, "path")
|
35
|
+
@history_spec = spec
|
36
|
+
end
|
37
|
+
|
38
|
+
def raw_spec=(spec)
|
39
|
+
validate_presence_of("raw_spec", spec, "path")
|
40
|
+
validate_presence_of("raw_spec", spec, "revision")
|
41
|
+
@raw_spec = spec
|
42
|
+
end
|
43
|
+
|
44
|
+
def html_spec=(spec)
|
45
|
+
validate_presence_of("html_spec", spec, "path")
|
46
|
+
validate_presence_of("html_spec", spec, "revision")
|
47
|
+
@html_spec = spec
|
48
|
+
end
|
49
|
+
|
50
|
+
def diff_spec=(spec)
|
51
|
+
validate_presence_of("diff_spec", spec, "revision")
|
52
|
+
# Can't assume path and previous_revision to be present (Trac doesn't use them)
|
53
|
+
#validate_presence_of("diff_spec", @diff_spec, "path")
|
54
|
+
#validate_presence_of("diff_spec", @diff_spec, "previous_revision")
|
55
|
+
@diff_spec = spec
|
56
|
+
end
|
57
|
+
|
58
|
+
def dir(path)
|
59
|
+
file_uri(path, nil, @dir_spec, nil)
|
60
|
+
end
|
61
|
+
|
62
|
+
def history(path)
|
63
|
+
file_uri(path, nil, @history_spec, nil)
|
64
|
+
end
|
65
|
+
|
66
|
+
def raw(path, revision)
|
67
|
+
file_uri(path, revision, @raw_spec, nil)
|
68
|
+
end
|
69
|
+
|
70
|
+
def html(path, revision)
|
71
|
+
file_uri(path, revision, @html_spec, nil)
|
72
|
+
end
|
73
|
+
|
74
|
+
def diff(path, revision, previous_revision)
|
75
|
+
file_uri(path, revision, @diff_spec, previous_revision)
|
76
|
+
end
|
77
|
+
|
78
|
+
# The regexp used to determine child directories of a directory
|
79
|
+
def child_dirs_pattern
|
80
|
+
@child_dirs_pattern
|
81
|
+
end
|
82
|
+
|
83
|
+
# The regexp used to determine child files of a directory
|
84
|
+
def child_files_pattern
|
85
|
+
@child_files_pattern
|
86
|
+
end
|
87
|
+
|
88
|
+
# Returns a Pathname representing the root directory of this browser.
|
89
|
+
# NOTE: The root of the browser may be at a lower level than
|
90
|
+
# the toplevel of the online scm web interface; It depends
|
91
|
+
# on the configuration of this instance.
|
92
|
+
def root
|
93
|
+
Pathname.new(self, nil, "", nil, true)
|
94
|
+
end
|
95
|
+
|
96
|
+
private
|
97
|
+
|
98
|
+
def validate_presence_of(spec_name, spec, var)
|
99
|
+
raise "Missing \#{#{var}} in #{spec_name}: '#{spec}'" unless spec =~ /\#\{#{var}\}/
|
100
|
+
end
|
101
|
+
|
102
|
+
def file_uri(path, revision, spec, previous_revision)
|
103
|
+
begin
|
104
|
+
eval("\"#{spec}\"", binding)
|
105
|
+
rescue NameError
|
106
|
+
raise "Couldn't evaluate '#{spec}'"
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
111
|
+
end
|
112
112
|
end
|
@@ -1,89 +1,89 @@
|
|
1
|
-
module MetaProject
|
2
|
-
module ScmWeb
|
3
|
-
# A subset of the
|
4
|
-
# <a href="http://www.ruby-doc.org/stdlib/libdoc/pathname/rdoc/index.html">Pathname</a>
|
5
|
-
# API which is suitable for slurping SCM contents off the web.
|
6
|
-
#
|
7
|
-
class Pathname
|
8
|
-
|
9
|
-
def initialize(browser, parent, basename, revision_identifier, directory)
|
10
|
-
@browser, @parent, @basename, @revision_identifier, @directory = browser, parent, basename, revision_identifier, directory
|
11
|
-
end
|
12
|
-
|
13
|
-
# The relative path from the root of the browser instance
|
14
|
-
#
|
15
|
-
# ""
|
16
|
-
# "var"
|
17
|
-
# "var/spool"
|
18
|
-
def path_from_root
|
19
|
-
parent_path_from_root = @parent ? @parent.path_from_root : ""
|
20
|
-
parent_path_from_root == "" ? @basename : "#{parent_path_from_root}/#{@basename}"
|
21
|
-
end
|
22
|
-
|
23
|
-
# The revision of this file or nil if this is a directory
|
24
|
-
def revision_identifier
|
25
|
-
@revision_identifier
|
26
|
-
end
|
27
|
-
|
28
|
-
# Returns a Pathname at the +relative_path+ from this directory.
|
29
|
-
# Note: This only works if this instance is a +directory?+
|
30
|
-
def child(basename, revision_identifier=nil, directory=true)
|
31
|
-
raise "Can't create children for files" unless @directory
|
32
|
-
Pathname.new(@browser, self, basename, revision_identifier, directory)
|
33
|
-
end
|
34
|
-
|
35
|
-
# Stlib Pathname methods
|
36
|
-
|
37
|
-
# The parent of this instance
|
38
|
-
def parent
|
39
|
-
@parent
|
40
|
-
end
|
41
|
-
|
42
|
-
# The basename of this instance
|
43
|
-
def basename
|
44
|
-
@basename
|
45
|
-
end
|
46
|
-
|
47
|
-
# Returns the full path on the web (to the dir page for directories, history page for files)
|
48
|
-
def cleanpath
|
49
|
-
directory? ? @browser.dir(path_from_root) : @browser.history(path_from_root)
|
50
|
-
end
|
51
|
-
|
52
|
-
def children
|
53
|
-
result = []
|
54
|
-
html = better_open(cleanpath).read
|
55
|
-
|
56
|
-
html.scan(@browser.child_dirs_pattern) do |child_basename_rev_array|
|
57
|
-
child_basename = child_basename_rev_array[0]
|
58
|
-
child_revision_identifier = child_basename_rev_array[1] # nil for most browsers
|
59
|
-
#puts "DIR:#{child_basename}:#{child_revision_identifier}"
|
60
|
-
result << child(child_basename, child_revision_identifier, true)
|
61
|
-
end
|
62
|
-
|
63
|
-
html.scan(@browser.child_files_pattern) do |child_basename_rev_array|
|
64
|
-
child_basename = child_basename_rev_array[0]
|
65
|
-
child_revision_identifier = child_basename_rev_array[1]
|
66
|
-
#puts "FILE:#{child_basename}:#{child_revision_identifier}"
|
67
|
-
result << child(child_basename, child_revision_identifier, false)
|
68
|
-
end
|
69
|
-
result
|
70
|
-
end
|
71
|
-
|
72
|
-
def open(&block)
|
73
|
-
url = @browser.raw(path_from_root, revision_identifier)
|
74
|
-
begin
|
75
|
-
better_open(url, &block)
|
76
|
-
rescue Errno::ECONNREFUSED => e
|
77
|
-
# TODO: retry 2-3 times
|
78
|
-
e.message += "(URL:#{url})"
|
79
|
-
raise e
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
def directory?
|
84
|
-
@directory
|
85
|
-
end
|
86
|
-
|
87
|
-
end
|
88
|
-
end
|
1
|
+
module MetaProject
|
2
|
+
module ScmWeb
|
3
|
+
# A subset of the
|
4
|
+
# <a href="http://www.ruby-doc.org/stdlib/libdoc/pathname/rdoc/index.html">Pathname</a>
|
5
|
+
# API which is suitable for slurping SCM contents off the web.
|
6
|
+
#
|
7
|
+
class Pathname
|
8
|
+
|
9
|
+
def initialize(browser, parent, basename, revision_identifier, directory)
|
10
|
+
@browser, @parent, @basename, @revision_identifier, @directory = browser, parent, basename, revision_identifier, directory
|
11
|
+
end
|
12
|
+
|
13
|
+
# The relative path from the root of the browser instance
|
14
|
+
#
|
15
|
+
# ""
|
16
|
+
# "var"
|
17
|
+
# "var/spool"
|
18
|
+
def path_from_root
|
19
|
+
parent_path_from_root = @parent ? @parent.path_from_root : ""
|
20
|
+
parent_path_from_root == "" ? @basename : "#{parent_path_from_root}/#{@basename}"
|
21
|
+
end
|
22
|
+
|
23
|
+
# The revision of this file or nil if this is a directory
|
24
|
+
def revision_identifier
|
25
|
+
@revision_identifier
|
26
|
+
end
|
27
|
+
|
28
|
+
# Returns a Pathname at the +relative_path+ from this directory.
|
29
|
+
# Note: This only works if this instance is a +directory?+
|
30
|
+
def child(basename, revision_identifier=nil, directory=true)
|
31
|
+
raise "Can't create children for files" unless @directory
|
32
|
+
Pathname.new(@browser, self, basename, revision_identifier, directory)
|
33
|
+
end
|
34
|
+
|
35
|
+
# Stlib Pathname methods
|
36
|
+
|
37
|
+
# The parent of this instance
|
38
|
+
def parent
|
39
|
+
@parent
|
40
|
+
end
|
41
|
+
|
42
|
+
# The basename of this instance
|
43
|
+
def basename
|
44
|
+
@basename
|
45
|
+
end
|
46
|
+
|
47
|
+
# Returns the full path on the web (to the dir page for directories, history page for files)
|
48
|
+
def cleanpath
|
49
|
+
directory? ? @browser.dir(path_from_root) : @browser.history(path_from_root)
|
50
|
+
end
|
51
|
+
|
52
|
+
def children
|
53
|
+
result = []
|
54
|
+
html = better_open(cleanpath).read
|
55
|
+
|
56
|
+
html.scan(@browser.child_dirs_pattern) do |child_basename_rev_array|
|
57
|
+
child_basename = child_basename_rev_array[0]
|
58
|
+
child_revision_identifier = child_basename_rev_array[1] # nil for most browsers
|
59
|
+
#puts "DIR:#{child_basename}:#{child_revision_identifier}"
|
60
|
+
result << child(child_basename, child_revision_identifier, true)
|
61
|
+
end
|
62
|
+
|
63
|
+
html.scan(@browser.child_files_pattern) do |child_basename_rev_array|
|
64
|
+
child_basename = child_basename_rev_array[0]
|
65
|
+
child_revision_identifier = child_basename_rev_array[1]
|
66
|
+
#puts "FILE:#{child_basename}:#{child_revision_identifier}"
|
67
|
+
result << child(child_basename, child_revision_identifier, false)
|
68
|
+
end
|
69
|
+
result
|
70
|
+
end
|
71
|
+
|
72
|
+
def open(&block)
|
73
|
+
url = @browser.raw(path_from_root, revision_identifier)
|
74
|
+
begin
|
75
|
+
better_open(url, &block)
|
76
|
+
rescue Errno::ECONNREFUSED => e
|
77
|
+
# TODO: retry 2-3 times
|
78
|
+
e.message += "(URL:#{url})"
|
79
|
+
raise e
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def directory?
|
84
|
+
@directory
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
end
|
89
89
|
end
|
data/lib/meta_project/tracker.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
require 'meta_project/tracker/base'
|
2
|
-
require 'meta_project/tracker/digit_issues'
|
3
|
-
require 'meta_project/tracker/issue'
|
4
|
-
require 'meta_project/tracker/trac'
|
5
|
-
require 'meta_project/tracker/xforge'
|
6
|
-
require 'meta_project/tracker/jira'
|
1
|
+
require 'meta_project/tracker/base'
|
2
|
+
require 'meta_project/tracker/digit_issues'
|
3
|
+
require 'meta_project/tracker/issue'
|
4
|
+
require 'meta_project/tracker/trac'
|
5
|
+
require 'meta_project/tracker/xforge'
|
6
|
+
require 'meta_project/tracker/jira'
|
@@ -1,24 +1,24 @@
|
|
1
|
-
module MetaProject
|
2
|
-
module Tracker
|
3
|
-
|
4
|
-
# Tracker objects are responsible for interacting with issue trackers (bug trackers).
|
5
|
-
# They know how to recognise issue identifiers in strings (typically from SCM commit
|
6
|
-
# messages) and turn these into HTML links that point to the associated issue on an
|
7
|
-
# issue tracker installation running somewhere else.
|
8
|
-
class Base
|
9
|
-
def self.classes
|
10
|
-
[
|
11
|
-
Jira::JiraTracker,
|
12
|
-
Trac::TracTracker,
|
13
|
-
XForge::RubyForgeTracker,
|
14
|
-
XForge::SourceForgeTracker,
|
15
|
-
]
|
16
|
-
end
|
17
|
-
|
18
|
-
def issue(issue_identifier)
|
19
|
-
Issue.new(self, :identifier => issue_identifier)
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|
23
|
-
end
|
1
|
+
module MetaProject
|
2
|
+
module Tracker
|
3
|
+
|
4
|
+
# Tracker objects are responsible for interacting with issue trackers (bug trackers).
|
5
|
+
# They know how to recognise issue identifiers in strings (typically from SCM commit
|
6
|
+
# messages) and turn these into HTML links that point to the associated issue on an
|
7
|
+
# issue tracker installation running somewhere else.
|
8
|
+
class Base
|
9
|
+
def self.classes
|
10
|
+
[
|
11
|
+
Jira::JiraTracker,
|
12
|
+
Trac::TracTracker,
|
13
|
+
XForge::RubyForgeTracker,
|
14
|
+
XForge::SourceForgeTracker,
|
15
|
+
]
|
16
|
+
end
|
17
|
+
|
18
|
+
def issue(issue_identifier)
|
19
|
+
Issue.new(self, :identifier => issue_identifier)
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
24
|
end
|