meta_project 0.4.12 → 0.4.13
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 +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
|