meta_project 0.4.4 → 0.4.5
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 +12 -0
- data/Rakefile +1 -1
- data/lib/meta_project/core_ext/string.rb +5 -0
- data/lib/meta_project/project/codehaus/codehaus_project_svn.rb +9 -6
- data/lib/meta_project/project/trac/trac_project.rb +32 -7
- data/lib/meta_project/project/xforge/ruby_forge.rb +4 -1
- data/lib/meta_project/project/xforge/source_forge.rb +5 -1
- data/lib/meta_project/scm_web/browser.rb +77 -0
- data/lib/meta_project/scm_web/pathname.rb +70 -0
- data/lib/meta_project/scm_web.rb +2 -55
- data/lib/meta_project/tracker/jira/jira_issues.rb +1 -1
- data/lib/meta_project/tracker/jira/jira_tracker.rb +3 -2
- data/lib/meta_project.rb +1 -0
- metadata +5 -2
data/CHANGES
CHANGED
@@ -1,5 +1,17 @@
|
|
1
1
|
= MetaProject Changelog
|
2
2
|
|
3
|
+
== Version 0.4.5
|
4
|
+
|
5
|
+
This version improves the MetaProject::ScmWeb::Pathname support, allowing online contents in scm web interfaces to be navigated and read in a similar fashion to the standard library's Pathname class.
|
6
|
+
|
7
|
+
* Better support for Pathname. children, directory? and open now supported.
|
8
|
+
* Fixed some bugs for JIRA support.
|
9
|
+
* Improved Pathname settings for Codehaus, SourceForge, Trac and RubyForge.
|
10
|
+
* Pathname now takes a revision argument in the constructor.
|
11
|
+
* Moved ScmWeb to ScmWeb::Browser.
|
12
|
+
* Added a subset of the Ruby stlib Pathname API to ScmWeb.
|
13
|
+
* Added a String extension for dealing with trailing slashes in URLs.
|
14
|
+
|
3
15
|
== Version 0.4.4
|
4
16
|
|
5
17
|
This release introduces a new Domain Specific Language (DSL) for SCM commit messages similar to Trac's post-commit hook for updating tickets.
|
data/Rakefile
CHANGED
@@ -3,22 +3,25 @@ module MetaProject
|
|
3
3
|
module Codehaus
|
4
4
|
class CodehausProjectSvn < Base
|
5
5
|
|
6
|
-
def initialize(
|
7
|
-
@
|
8
|
-
@scm = RSCM::Subversion.new("svn://svn.#{
|
6
|
+
def initialize(unix_name, svn_path, jira_id)
|
7
|
+
@unix_name = unix_name
|
8
|
+
@scm = RSCM::Subversion.new("svn://svn.#{unix_name}.codehaus.org/#{unix_name}/scm/#{svn_path}", svn_path)
|
9
9
|
@tracker = ::MetaProject::Tracker::Jira::JiraTracker.new("http://jira.codehaus.org", jira_id)
|
10
10
|
|
11
|
-
overview = "http://svn.#{
|
11
|
+
overview = "http://svn.#{unix_name}.codehaus.org/#{svn_path}/"
|
12
12
|
history = "#{overview}\#{path}"
|
13
13
|
raw = "#{history}?rev=\#{revision}"
|
14
14
|
html = "#{raw}&view=markup"
|
15
15
|
# http://svn.picocontainer.codehaus.org/java/picocontainer/trunk/container/project.xml?r1=2220&r2=2234&p1=java/picocontainer/trunk/container/project.xml&p2=java/picocontainer/trunk/container/project.xml
|
16
16
|
diff = "#{history}?r1=\#{previous_revision}&r2=\#{revision}&p1=#{svn_path}/\#{path}&p2=#{svn_path}/\#{path}"
|
17
|
-
|
17
|
+
child_dirs_pattern = /<a name="([^"]+)" href="([^"]+)">[\r\n\s]+<img src="\/icons\/small\/dir.gif"/
|
18
|
+
child_files_pattern = /<a href="[^"]+\/([^\?]+)\?rev=([\d]+)&view=auto">/
|
19
|
+
|
20
|
+
@scm_web = ScmWeb::Browser.new(overview, history, raw, html, diff, child_dirs_pattern, child_files_pattern)
|
18
21
|
end
|
19
22
|
|
20
23
|
def home_page
|
21
|
-
"http://#{@
|
24
|
+
"http://#{@unix_name}.codehaus.org/"
|
22
25
|
end
|
23
26
|
|
24
27
|
end
|
@@ -5,15 +5,40 @@ module MetaProject
|
|
5
5
|
|
6
6
|
def initialize(trac_base_url, svn_root_url, svn_path)
|
7
7
|
@trac_base_url = trac_base_url
|
8
|
+
@svn_path = svn_path
|
8
9
|
@scm = RSCM::Subversion.new("#{svn_root_url}#{svn_path}", svn_path)
|
9
|
-
@tracker = ::MetaProject::Tracker::Trac::TracTracker.new(trac_base_url)
|
10
|
+
@tracker = ::MetaProject::Tracker::Trac::TracTracker.new(@trac_base_url)
|
11
|
+
end
|
12
|
+
|
13
|
+
def scm_web
|
14
|
+
unless @scm_web
|
15
|
+
overview = "#{@trac_base_url}/browser/#{@svn_path}/"
|
16
|
+
diff = "#{@trac_base_url}/changeset/\#{revision}"
|
17
|
+
|
18
|
+
front_page = open(@trac_base_url).read
|
19
|
+
if(front_page =~ /<strong>Trac ([\d\.]+)\w*<\/strong>/)
|
20
|
+
|
21
|
+
version = $1
|
22
|
+
version = "#{version}.0" if version =~ /[\d]+\.[\d]+\.$/
|
23
|
+
version = version.gsub(/\./, "").to_i
|
24
|
+
|
25
|
+
if(version >= 90)
|
26
|
+
history = "#{@trac_base_url}/browser/#{@svn_path}/\#{path}"
|
27
|
+
html = "#{@trac_base_url}/browser/#{@svn_path}/\#{path}?rev=\#{revision}"
|
28
|
+
raw = "#{@trac_base_url}/browser/#{@svn_path}/\#{path}?rev=\#{revision}&format=txt"
|
29
|
+
else
|
30
|
+
history = "#{@trac_base_url}/log/#{@svn_path}/\#{path}"
|
31
|
+
html = "#{@trac_base_url}/file/#{@svn_path}/\#{path}?rev=\#{revision}"
|
32
|
+
raw = "#{@trac_base_url}/file/#{@svn_path}/\#{path}?rev=\#{revision}&format=txt"
|
33
|
+
end
|
34
|
+
child_dirs_pattern = /title="Browse Directory" href="[^"]+">([^<]+)<\/a>/
|
35
|
+
child_files_pattern = /title="View File" href="[^"]+">([^<]+)<\/a>/
|
36
|
+
|
37
|
+
@scm_web = ScmWeb::Browser.new(overview, history, raw, html, diff, child_dirs_pattern, child_files_pattern)
|
38
|
+
end
|
39
|
+
end
|
10
40
|
|
11
|
-
|
12
|
-
history = "#{trac_base_url}/log/#{svn_path}/\#{path}"
|
13
|
-
html = "#{trac_base_url}/file/#{svn_path}/\#{path}?rev=\#{revision}"
|
14
|
-
raw = "#{html}&format=txt"
|
15
|
-
diff = "#{trac_base_url}/changeset/\#{revision}"
|
16
|
-
@scm_web = ScmWeb.new(overview, history, raw, html, diff)
|
41
|
+
@scm_web
|
17
42
|
end
|
18
43
|
|
19
44
|
def home_page
|
@@ -31,7 +31,10 @@ module MetaProject
|
|
31
31
|
html = "#{view_cvs}#{path_cvs_root_rev}&content-type=text/vnd.viewcvs-markup"
|
32
32
|
diff = "#{view_cvs}#{mod}/\#{path}.diff#{cvsroot}&r1=\#{previous_revision}&r2=\#{revision}"
|
33
33
|
|
34
|
-
|
34
|
+
child_dirs_pattern = /href="([^\?]*\/)\?cvsroot=#{unix_name}">/
|
35
|
+
child_files_pattern = /href="([^\?^\/]*)\?cvsroot=#{unix_name}">/
|
36
|
+
|
37
|
+
ScmWeb::Browser.new(overview, history, raw, html, diff, child_dirs_pattern, child_files_pattern)
|
35
38
|
end
|
36
39
|
|
37
40
|
# Regexp used to find projects' home page
|
@@ -31,7 +31,11 @@ module MetaProject
|
|
31
31
|
html = "#{history}?#{rev}&view=markup"
|
32
32
|
diff = "#{history}?r1=\#{previous_revision}&r2=\#{revision}"
|
33
33
|
|
34
|
-
|
34
|
+
|
35
|
+
child_dirs_pattern = /<img src="\/icons\/small\/dir.gif"\s+alt="\(dir\)"\s+border=0\s+width=16\s+height=16>[\r\n\s]*([^\/]+)\/<\/a>/
|
36
|
+
child_files_pattern = /href="[^\?]+\/([^\?]+)\?rev=([^&]+)&view=log">/
|
37
|
+
|
38
|
+
ScmWeb::Browser.new(overview, history, raw, html, diff, child_dirs_pattern, child_files_pattern)
|
35
39
|
end
|
36
40
|
|
37
41
|
# Regexp used to find projects' home page
|
@@ -0,0 +1,77 @@
|
|
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 :overview_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(overview_spec=nil, history_spec=nil, raw_spec=nil, html_spec=nil, diff_spec=nil, child_dirs_pattern=nil, child_files_pattern=nil)
|
18
|
+
@overview_spec, @history_spec, @raw_spec, @html_spec, @diff_spec, @child_dirs_pattern, @child_files_pattern = overview_spec, history_spec, raw_spec, html_spec, diff_spec, child_dirs_pattern, child_files_pattern
|
19
|
+
end
|
20
|
+
|
21
|
+
# TODO: deprecate this and use root.cleanpath instead
|
22
|
+
def overview
|
23
|
+
file_uri(nil, nil, @overview_spec)
|
24
|
+
end
|
25
|
+
|
26
|
+
def history(path)
|
27
|
+
file_uri(path, nil, @history_spec)
|
28
|
+
end
|
29
|
+
|
30
|
+
def raw(path, revision)
|
31
|
+
file_uri(path, revision, @raw_spec)
|
32
|
+
end
|
33
|
+
|
34
|
+
def html(path, revision)
|
35
|
+
file_uri(path, revision, @html_spec)
|
36
|
+
end
|
37
|
+
|
38
|
+
def diff(path, revision, previous_revision)
|
39
|
+
file_uri(path, revision, @diff_spec, previous_revision)
|
40
|
+
end
|
41
|
+
|
42
|
+
# The regexp used to determine child directories of a directory
|
43
|
+
def child_dirs_pattern
|
44
|
+
@child_dirs_pattern
|
45
|
+
end
|
46
|
+
|
47
|
+
# The regexp used to determine child files of a directory
|
48
|
+
def child_files_pattern
|
49
|
+
@child_files_pattern
|
50
|
+
end
|
51
|
+
|
52
|
+
# Returns a Pathname representing the root directory of this browser.
|
53
|
+
# NOTE: The root of the browser may be at a lower level than
|
54
|
+
# the toplevel of the online scm web interface; It depends
|
55
|
+
# on the configuration of this instance (overview).
|
56
|
+
def root
|
57
|
+
Pathname.new(self, "", nil, true)
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
# Returns the file URI for +path+. Valid options are:
|
63
|
+
#
|
64
|
+
# * :type => ["overview"|"html"|"diff"|"raw"]
|
65
|
+
# * :revision
|
66
|
+
# * :previous_revision
|
67
|
+
def file_uri(path="", revision=nil, spec=@overview_spec, previous_revision=nil)
|
68
|
+
begin
|
69
|
+
eval("\"#{spec}\"", binding)
|
70
|
+
rescue NameError
|
71
|
+
raise "Couldn't evaluate '#{spec}'"
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'open-uri'
|
2
|
+
|
3
|
+
module MetaProject
|
4
|
+
module ScmWeb
|
5
|
+
# A subset of the
|
6
|
+
# <a href="http://www.ruby-doc.org/stdlib/libdoc/pathname/rdoc/index.html">Pathname</a>
|
7
|
+
# API which is suitable for slurping SCM contents off the web.
|
8
|
+
#
|
9
|
+
class Pathname
|
10
|
+
|
11
|
+
def initialize(browser, path_from_root, revision_identifier, directory)
|
12
|
+
@browser, @path_from_root, @revision_identifier, @directory = browser, path_from_root, revision_identifier, directory
|
13
|
+
end
|
14
|
+
|
15
|
+
# The relative path from the root of the browser instance
|
16
|
+
def path_from_root
|
17
|
+
@path_from_root
|
18
|
+
end
|
19
|
+
|
20
|
+
# The revision of this file or nil if this is a directory
|
21
|
+
def revision_identifier
|
22
|
+
@revision_identifier
|
23
|
+
end
|
24
|
+
|
25
|
+
# Returns a Pathname at the +relative_path+ from this directory.
|
26
|
+
# Note: This only works if this instance is a +directory?+
|
27
|
+
def pathname(relative_path, revision_identifier, directory)
|
28
|
+
child_path_from_root = (@path_from_root == "") ? relative_path : "#{@path_from_root}#{relative_path}"
|
29
|
+
Pathname.new(@browser, child_path_from_root, revision_identifier, directory)
|
30
|
+
end
|
31
|
+
|
32
|
+
# Stlib Pathname methods
|
33
|
+
|
34
|
+
# Returns the full path on the web (to the history page)
|
35
|
+
def cleanpath
|
36
|
+
@browser.history(@path_from_root)
|
37
|
+
end
|
38
|
+
|
39
|
+
def children
|
40
|
+
result = []
|
41
|
+
html = Kernel.open(cleanpath).read
|
42
|
+
|
43
|
+
html.scan(@browser.child_dirs_pattern) do |child_path_rev_array|
|
44
|
+
relative_child_path = child_path_rev_array[0]
|
45
|
+
child_revision_identifier = child_path_rev_array[1] # nil for most browsers
|
46
|
+
#puts "DIR:#{relative_child_path}:#{child_revision_identifier}"
|
47
|
+
result << pathname(relative_child_path, child_revision_identifier, true)
|
48
|
+
end
|
49
|
+
|
50
|
+
html.scan(@browser.child_files_pattern) do |child_path_rev_array|
|
51
|
+
relative_child_path = child_path_rev_array[0]
|
52
|
+
child_revision_identifier = child_path_rev_array[1]
|
53
|
+
#puts "FILE:#{relative_child_path}:#{child_revision_identifier}"
|
54
|
+
result << pathname(relative_child_path, child_revision_identifier, false)
|
55
|
+
end
|
56
|
+
result
|
57
|
+
end
|
58
|
+
|
59
|
+
def open(&block)
|
60
|
+
url = @browser.raw(@path_from_root, revision_identifier)
|
61
|
+
# open-uri's open
|
62
|
+
Kernel.open(url, &block)
|
63
|
+
end
|
64
|
+
|
65
|
+
def directory?
|
66
|
+
@directory
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
data/lib/meta_project/scm_web.rb
CHANGED
@@ -1,55 +1,2 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
# An ScmWeb instance is capable of generating URLs to various files and diffs
|
4
|
-
# in an online scm web interface.
|
5
|
-
class ScmWeb
|
6
|
-
|
7
|
-
attr_accessor :overview_spec, :history_spec, :raw_spec, :html_spec, :diff_spec
|
8
|
-
|
9
|
-
# The variables to use in +uri_specs+ are:
|
10
|
-
#
|
11
|
-
# * path
|
12
|
-
# * revision
|
13
|
-
# * previous_revision
|
14
|
-
#
|
15
|
-
def initialize(overview_spec=nil, history_spec=nil, raw_spec=nil, html_spec=nil, diff_spec=nil)
|
16
|
-
@overview_spec, @history_spec, @raw_spec, @html_spec, @diff_spec = overview_spec, history_spec, raw_spec, html_spec, diff_spec
|
17
|
-
end
|
18
|
-
|
19
|
-
def overview
|
20
|
-
file_uri(nil, nil, @overview_spec)
|
21
|
-
end
|
22
|
-
|
23
|
-
def history(path)
|
24
|
-
file_uri(path, nil, @history_spec)
|
25
|
-
end
|
26
|
-
|
27
|
-
def raw(path, revision)
|
28
|
-
file_uri(path, revision, @raw_spec)
|
29
|
-
end
|
30
|
-
|
31
|
-
def html(path, revision)
|
32
|
-
file_uri(path, revision, @html_spec)
|
33
|
-
end
|
34
|
-
|
35
|
-
def diff(path, revision, previous_revision)
|
36
|
-
file_uri(path, revision, @diff_spec, previous_revision)
|
37
|
-
end
|
38
|
-
|
39
|
-
private
|
40
|
-
|
41
|
-
# Returns the file URI for +path+. Valid options are:
|
42
|
-
#
|
43
|
-
# * :type => ["overview"|"html"|"diff"|"raw"]
|
44
|
-
# * :revision
|
45
|
-
# * :previous_revision
|
46
|
-
def file_uri(path="", revision=nil, spec=@overview_spec, previous_revision=nil)
|
47
|
-
begin
|
48
|
-
eval("\"#{spec}\"", binding)
|
49
|
-
rescue NameError
|
50
|
-
raise "Couldn't evaluate '#{spec}'"
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
end
|
55
|
-
end
|
1
|
+
require 'meta_project/scm_web/browser'
|
2
|
+
require 'meta_project/scm_web/pathname'
|
@@ -22,7 +22,7 @@ module MetaProject
|
|
22
22
|
|
23
23
|
def markup(text)
|
24
24
|
text.gsub(issue_pattern) do |match|
|
25
|
-
issue_identifier = $1
|
25
|
+
issue_identifier = $1.upcase
|
26
26
|
issue = issue(issue_identifier)
|
27
27
|
issue.url ? "<a href=\"#{issue.url}\">#{issue_identifier}: #{issue.summary}</a>" : issue_identifier
|
28
28
|
end
|
@@ -50,10 +50,11 @@ module MetaProject
|
|
50
50
|
|
51
51
|
def materialize(issue)
|
52
52
|
login do |session|
|
53
|
+
issue.attributes[:identifier] = issue.attributes[:identifier].upcase
|
53
54
|
issue_struct = session.getIssue(issue.identifier)
|
54
55
|
|
55
|
-
issue.attributes[:summary] = issue_struct["summary"]
|
56
|
-
issue.attributes[:detail] = issue_struct["description"]
|
56
|
+
issue.attributes[:summary] = issue_struct["summary"].strip
|
57
|
+
issue.attributes[:detail] = issue_struct["description"].strip
|
57
58
|
issue.attributes[:url] = "#{@jira_base_url}/browse/#{issue.identifier}"
|
58
59
|
end
|
59
60
|
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-
|
6
|
+
version: 0.4.5
|
7
|
+
date: 2005-09-01 00:00:00 -04:00
|
8
8
|
summary: Ruby based make-like utility.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -42,6 +42,7 @@ files:
|
|
42
42
|
- lib/meta_project/scm_web.rb
|
43
43
|
- lib/meta_project/tracker.rb
|
44
44
|
- lib/meta_project/version_parser.rb
|
45
|
+
- lib/meta_project/core_ext/string.rb
|
45
46
|
- lib/meta_project/patois/parser.rb
|
46
47
|
- lib/meta_project/project/base.rb
|
47
48
|
- lib/meta_project/project/codehaus.rb
|
@@ -56,6 +57,8 @@ files:
|
|
56
57
|
- lib/meta_project/project/xforge/xforge_base.rb
|
57
58
|
- lib/meta_project/release/freshmeat.rb
|
58
59
|
- lib/meta_project/release/raa.rb
|
60
|
+
- lib/meta_project/scm_web/browser.rb
|
61
|
+
- lib/meta_project/scm_web/pathname.rb
|
59
62
|
- lib/meta_project/tracker/base.rb
|
60
63
|
- lib/meta_project/tracker/digit_issues.rb
|
61
64
|
- lib/meta_project/tracker/issue.rb
|