meta_project 0.4.6 → 0.4.7
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 +11 -0
- data/README +1 -1
- data/Rakefile +4 -7
- data/lib/meta_project/core_ext/open_uri.rb +22 -0
- data/lib/meta_project/project/base.rb +2 -0
- data/lib/meta_project/project/codehaus/codehaus_project_svn.rb +5 -4
- data/lib/meta_project/project/trac/trac_project.rb +12 -9
- data/lib/meta_project/project/xforge/ruby_forge.rb +3 -3
- data/lib/meta_project/project/xforge/session.rb +7 -6
- data/lib/meta_project/project/xforge/source_forge.rb +2 -2
- data/lib/meta_project/project/xforge/xforge_base.rb +10 -10
- data/lib/meta_project/project_analyzer.rb +2 -2
- data/lib/meta_project/scm_web/browser.rb +28 -14
- data/lib/meta_project/scm_web/pathname.rb +43 -24
- data/lib/meta_project/tracker/trac/trac_tracker.rb +1 -14
- data/lib/meta_project/tracker/xforge/xforge_tracker.rb +2 -2
- data/lib/meta_project.rb +1 -0
- metadata +3 -2
data/CHANGES
CHANGED
@@ -1,7 +1,18 @@
|
|
1
1
|
= MetaProject Changelog
|
2
2
|
|
3
|
+
== Version 0.4.7
|
4
|
+
|
5
|
+
This release makes HTTP access more robust and improves the Pathname API.
|
6
|
+
|
7
|
+
* More robust HTTP GET with retries and better error messages.
|
8
|
+
* Added Pathname.basename and Pathname.parent
|
9
|
+
* Small improvements to ScmWeb API.
|
10
|
+
* More robust detection of XForge package_id.
|
11
|
+
|
3
12
|
== Version 0.4.6
|
4
13
|
|
14
|
+
This release updates documentaion, adds iteration support to Pathname and fixes some minor bugs.
|
15
|
+
|
5
16
|
* Updated README.
|
6
17
|
* Added PathnameIterator mixin that can be used to iterate over Pathname and MetaProject::ScmWeb::Pathname to
|
7
18
|
do e.g. egrep or other operations.
|
data/README
CHANGED
data/Rakefile
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
# This file is may be distributed under an MIT style license. See
|
7
7
|
# MIT-LICENSE for details.
|
8
8
|
|
9
|
-
$:.unshift('lib')
|
9
|
+
# $:.unshift('lib')
|
10
10
|
require 'meta_project'
|
11
11
|
require 'rake/gempackagetask'
|
12
12
|
require 'rake/contrib/rubyforgepublisher'
|
@@ -24,7 +24,7 @@ require 'rake/rdoctask'
|
|
24
24
|
#
|
25
25
|
# REMEMBER TO KEEP PKG_VERSION IN SYNC WITH THE CHANGES FILE!
|
26
26
|
PKG_NAME = "meta_project"
|
27
|
-
PKG_VERSION = "0.4.
|
27
|
+
PKG_VERSION = "0.4.7"
|
28
28
|
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
|
29
29
|
PKG_FILES = FileList[
|
30
30
|
'[A-Z]*',
|
@@ -34,10 +34,8 @@ PKG_FILES = FileList[
|
|
34
34
|
|
35
35
|
task :default => [:gem]
|
36
36
|
|
37
|
-
|
38
|
-
|
39
|
-
t.test_files = FileList['**/*_test.rb']
|
40
|
-
t.verbose = true
|
37
|
+
task :spec do
|
38
|
+
ruby 'behaviours/suite.rb'
|
41
39
|
end
|
42
40
|
|
43
41
|
# Create a task to build the RDOC documentation tree.
|
@@ -94,7 +92,6 @@ Rake::GemPackageTask.new(spec) do |pkg|
|
|
94
92
|
pkg.need_zip = true
|
95
93
|
pkg.need_tar = true
|
96
94
|
end
|
97
|
-
task :gem => [:test]
|
98
95
|
|
99
96
|
# Support Tasks ------------------------------------------------------
|
100
97
|
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'open-uri'
|
2
|
+
|
3
|
+
# Wrapper around Kernel.open from open-uri
|
4
|
+
# that can retry and report better errors
|
5
|
+
def better_open(url, retries=2, &block)
|
6
|
+
begin
|
7
|
+
# open-uri's open
|
8
|
+
Kernel.open(url, &block)
|
9
|
+
rescue Errno::ECONNREFUSED, EOFError => e
|
10
|
+
if(retries > 0)
|
11
|
+
STDERR.puts "Connection refused to #{url} - retrying in 1 sec."
|
12
|
+
sleep 1
|
13
|
+
better_open(url, retries-1, &block)
|
14
|
+
else
|
15
|
+
e.message << " (URL:#{url})"
|
16
|
+
raise e
|
17
|
+
end
|
18
|
+
rescue OpenURI::HTTPError => e
|
19
|
+
e.message << " (URL:#{url})"
|
20
|
+
raise e
|
21
|
+
end
|
22
|
+
end
|
@@ -5,19 +5,20 @@ module MetaProject
|
|
5
5
|
|
6
6
|
def initialize(unix_name, svn_path, jira_id)
|
7
7
|
@unix_name = unix_name
|
8
|
+
@name = unix_name
|
8
9
|
@scm = RSCM::Subversion.new("svn://svn.#{unix_name}.codehaus.org/#{unix_name}/scm/#{svn_path}", svn_path)
|
9
10
|
@tracker = ::MetaProject::Tracker::Jira::JiraTracker.new("http://jira.codehaus.org", jira_id)
|
10
11
|
|
11
|
-
|
12
|
-
history =
|
12
|
+
dir = "http://svn.#{unix_name}.codehaus.org/#{svn_path}/\#{path}"
|
13
|
+
history = dir
|
13
14
|
raw = "#{history}?rev=\#{revision}"
|
14
|
-
html
|
15
|
+
html = "#{raw}&view=markup"
|
15
16
|
# 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
17
|
diff = "#{history}?r1=\#{previous_revision}&r2=\#{revision}&p1=#{svn_path}/\#{path}&p2=#{svn_path}/\#{path}"
|
17
18
|
child_dirs_pattern = /<a name="([^"]+)" href="([^"]+)">[\r\n\s]+<img src="\/icons\/small\/dir.gif"/
|
18
19
|
child_files_pattern = /<a href="[^"]+\/([^\?]+)\?rev=([\d]+)&view=auto">/
|
19
20
|
|
20
|
-
@scm_web = ScmWeb::Browser.new(
|
21
|
+
@scm_web = ScmWeb::Browser.new(dir, history, raw, html, diff, child_dirs_pattern, child_files_pattern)
|
21
22
|
end
|
22
23
|
|
23
24
|
def home_page
|
@@ -10,31 +10,34 @@ module MetaProject
|
|
10
10
|
@tracker = ::MetaProject::Tracker::Trac::TracTracker.new(@trac_base_url)
|
11
11
|
end
|
12
12
|
|
13
|
+
TRAC_VERSION_PATTERN = /<strong>Trac ([\d\.]+)\w*<\/strong>/
|
14
|
+
|
13
15
|
def scm_web
|
14
16
|
unless @scm_web
|
15
|
-
overview = "#{@trac_base_url}/browser/#{@svn_path}/"
|
16
|
-
diff = "#{@trac_base_url}/changeset/\#{revision}"
|
17
17
|
|
18
|
-
front_page =
|
19
|
-
if(front_page =~
|
20
|
-
|
18
|
+
front_page = better_open(@trac_base_url).read
|
19
|
+
if(front_page =~ TRAC_VERSION_PATTERN)
|
21
20
|
version = $1
|
22
21
|
version = "#{version}.0" if version =~ /[\d]+\.[\d]+\.$/
|
23
22
|
version = version.gsub(/\./, "").to_i
|
24
23
|
|
25
24
|
if(version >= 90)
|
26
|
-
history = "#{@trac_base_url}/browser/#{@svn_path}/\#{path}"
|
27
25
|
html = "#{@trac_base_url}/browser/#{@svn_path}/\#{path}?rev=\#{revision}"
|
28
26
|
raw = "#{@trac_base_url}/browser/#{@svn_path}/\#{path}?rev=\#{revision}&format=txt"
|
29
27
|
else
|
30
|
-
history = "#{@trac_base_url}/log/#{@svn_path}/\#{path}"
|
31
28
|
html = "#{@trac_base_url}/file/#{@svn_path}/\#{path}?rev=\#{revision}"
|
32
29
|
raw = "#{@trac_base_url}/file/#{@svn_path}/\#{path}?rev=\#{revision}&format=txt"
|
33
30
|
end
|
34
|
-
|
31
|
+
|
32
|
+
dir = "#{@trac_base_url}/browser/#{@svn_path}/\#{path}"
|
33
|
+
history = "#{@trac_base_url}/log/#{@svn_path}/\#{path}"
|
34
|
+
diff = "#{@trac_base_url}/changeset/\#{revision}"
|
35
|
+
child_dirs_pattern = /title="Browse Directory" href="[^"]+">([^<]+)<\/a>/
|
35
36
|
child_files_pattern = /title="View File" href="[^"]+">([^<]+)<\/a>/
|
36
37
|
|
37
|
-
@scm_web = ScmWeb::Browser.new(
|
38
|
+
@scm_web = ScmWeb::Browser.new(dir, history, raw, html, diff, child_dirs_pattern, child_files_pattern)
|
39
|
+
else
|
40
|
+
raise ProjectException.new("Couldn't determine the Trac version. Is the URL '#{@trac_base_url}' correct? I was looking for the regexp /#{TRAC_VERSION_PATTERN.source}/ on the page, but couldn't find it.")
|
38
41
|
end
|
39
42
|
end
|
40
43
|
|
@@ -25,16 +25,16 @@ module MetaProject
|
|
25
25
|
path_cvs_root = "#{mod}/\#{path}#{cvsroot}"
|
26
26
|
path_cvs_root_rev = "#{path_cvs_root}&rev=\#{revision}"
|
27
27
|
|
28
|
-
|
28
|
+
dir = "#{view_cvs}#{path_cvs_root}"
|
29
29
|
history = "#{view_cvs}#{path_cvs_root}"
|
30
30
|
raw = "#{view_cvs}*checkout*/#{path_cvs_root_rev}"
|
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
|
-
child_dirs_pattern = /href="([^\?]
|
34
|
+
child_dirs_pattern = /href="([^\?]*)\/\?cvsroot=#{unix_name}">/
|
35
35
|
child_files_pattern = /href="([^\?^\/]*)\?cvsroot=#{unix_name}">/
|
36
36
|
|
37
|
-
ScmWeb::Browser.new(
|
37
|
+
ScmWeb::Browser.new(dir, history, raw, html, diff, child_dirs_pattern, child_files_pattern)
|
38
38
|
end
|
39
39
|
|
40
40
|
# Regexp used to find projects' home page
|
@@ -1,6 +1,3 @@
|
|
1
|
-
require 'net/http'
|
2
|
-
require 'open-uri'
|
3
|
-
|
4
1
|
module MetaProject
|
5
2
|
module Project
|
6
3
|
module XForge
|
@@ -36,9 +33,13 @@ module MetaProject
|
|
36
33
|
def package_id
|
37
34
|
unless(@package_id)
|
38
35
|
release_uri = "http://#{@host}/frs/admin/?group_id=#{@project.group_id}"
|
39
|
-
release_data =
|
40
|
-
|
41
|
-
|
36
|
+
release_data = better_open(release_uri, @headers).read
|
37
|
+
package_id_pattern = /name="package_id" value="(\d+)"/
|
38
|
+
@package_id = release_data[package_id_pattern, 1]
|
39
|
+
unless @package_id
|
40
|
+
File.open("package_id.html", "w") {|io| io.write(release_data)}
|
41
|
+
raise "Couldn't get package_id from #{release_uri}. I was looking for /#{package_id_pattern.source}/. HTML saved to package_id.html for debugging."
|
42
|
+
end
|
42
43
|
end
|
43
44
|
@package_id
|
44
45
|
end
|
@@ -25,7 +25,7 @@ module MetaProject
|
|
25
25
|
project_path = "#{unix_name_mod}/\#{path}"
|
26
26
|
rev = "rev=\#{revision}"
|
27
27
|
|
28
|
-
|
28
|
+
dir = "#{view_cvs}#{project_path}"
|
29
29
|
history = "#{view_cvs}#{project_path}"
|
30
30
|
raw = "#{view_cvs}*checkout*/#{project_path}?#{rev}"
|
31
31
|
html = "#{history}?#{rev}&view=markup"
|
@@ -35,7 +35,7 @@ module MetaProject
|
|
35
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
36
|
child_files_pattern = /href="[^\?]+\/([^\?]+)\?rev=([^&]+)&view=log">/
|
37
37
|
|
38
|
-
ScmWeb::Browser.new(
|
38
|
+
ScmWeb::Browser.new(dir, history, raw, html, diff, child_dirs_pattern, child_files_pattern)
|
39
39
|
end
|
40
40
|
|
41
41
|
# Regexp used to find projects' home page
|
@@ -1,7 +1,3 @@
|
|
1
|
-
require 'net/http'
|
2
|
-
require 'net/https'
|
3
|
-
require 'open-uri'
|
4
|
-
|
5
1
|
module MetaProject
|
6
2
|
module Project
|
7
3
|
module XForge
|
@@ -45,10 +41,10 @@ module MetaProject
|
|
45
41
|
# The group_id of this project
|
46
42
|
def group_id
|
47
43
|
unless(@group_id)
|
48
|
-
|
49
|
-
|
50
|
-
@group_id = html[
|
51
|
-
raise "Couldn't get group_id from #{xforge_project_url}" unless @group_id
|
44
|
+
html = better_open(xforge_project_url).read
|
45
|
+
group_id_pattern = /project\/memberlist.php\?group_id=(\d+)/
|
46
|
+
@group_id = html[group_id_pattern, 1]
|
47
|
+
raise "Couldn't get group_id from #{xforge_project_url}. I was looking for /#{group_id_pattern.source}/" unless @group_id
|
52
48
|
end
|
53
49
|
@group_id
|
54
50
|
end
|
@@ -64,9 +60,13 @@ module MetaProject
|
|
64
60
|
# The home page of this project
|
65
61
|
def home_page
|
66
62
|
unless(@home_page)
|
67
|
-
html =
|
63
|
+
html = better_open(xforge_project_url).read
|
68
64
|
@home_page = html[home_page_regexp, 1]
|
69
|
-
|
65
|
+
unless @home_page
|
66
|
+
STDERR.puts "WARNING: Couldn't get home_page from #{xforge_project_url}. I was looking for /#{home_page_regexp.source}/"
|
67
|
+
STDERR.puts "Will use #{xforge_project_url} as home page instead."
|
68
|
+
@home_page = xforge_project_url
|
69
|
+
end
|
70
70
|
end
|
71
71
|
@home_page
|
72
72
|
end
|
@@ -25,9 +25,9 @@ module MetaProject
|
|
25
25
|
|
26
26
|
# Codehaus SVN
|
27
27
|
if(url =~ /http:\/\/svn.(.*).codehaus.org\/(.*)/)
|
28
|
-
|
28
|
+
unix_name = $1
|
29
29
|
svn_path = $2[-1..-1] == "/" ? $2[0..-2] : $2
|
30
|
-
return Project::Codehaus::CodehausProjectSvn.new(
|
30
|
+
return Project::Codehaus::CodehausProjectSvn.new(unix_name, svn_path, options[:jira_project_id])
|
31
31
|
end
|
32
32
|
|
33
33
|
end
|
@@ -6,7 +6,7 @@ module MetaProject
|
|
6
6
|
#
|
7
7
|
class Browser
|
8
8
|
|
9
|
-
attr_accessor :
|
9
|
+
attr_accessor :dir_spec, :history_spec, :raw_spec, :html_spec, :diff_spec
|
10
10
|
|
11
11
|
# The variables to use in +uri_specs+ are:
|
12
12
|
#
|
@@ -14,25 +14,35 @@ module MetaProject
|
|
14
14
|
# * revision
|
15
15
|
# * previous_revision
|
16
16
|
#
|
17
|
-
def initialize(
|
18
|
-
@
|
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
|
+
@dir_spec, @history_spec, @raw_spec, @html_spec, @diff_spec, @child_dirs_pattern, @child_files_pattern = dir_spec, history_spec, raw_spec, html_spec, diff_spec, child_dirs_pattern, child_files_pattern
|
19
|
+
|
20
|
+
# TODO: move to setters. maybe create a spec class?
|
21
|
+
validate_presence_of("dir_spec", @dir_spec, "path")
|
22
|
+
validate_presence_of("history_spec", @history_spec, "path")
|
23
|
+
validate_presence_of("raw_spec", @raw_spec, "path")
|
24
|
+
validate_presence_of("raw_spec", @raw_spec, "revision")
|
25
|
+
validate_presence_of("html_spec", @html_spec, "path")
|
26
|
+
validate_presence_of("html_spec", @html_spec, "revision")
|
27
|
+
#validate_presence_of("diff_spec", @diff_spec, "path")
|
28
|
+
validate_presence_of("diff_spec", @diff_spec, "revision")
|
29
|
+
#validate_presence_of("diff_spec", @diff_spec, "previous_revision")
|
19
30
|
end
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
file_uri(nil, nil, @overview_spec)
|
31
|
+
|
32
|
+
def dir(path)
|
33
|
+
file_uri(path, nil, @dir_spec, nil)
|
24
34
|
end
|
25
35
|
|
26
36
|
def history(path)
|
27
|
-
file_uri(path, nil, @history_spec)
|
37
|
+
file_uri(path, nil, @history_spec, nil)
|
28
38
|
end
|
29
39
|
|
30
40
|
def raw(path, revision)
|
31
|
-
file_uri(path, revision, @raw_spec)
|
41
|
+
file_uri(path, revision, @raw_spec, nil)
|
32
42
|
end
|
33
43
|
|
34
44
|
def html(path, revision)
|
35
|
-
file_uri(path, revision, @html_spec)
|
45
|
+
file_uri(path, revision, @html_spec, nil)
|
36
46
|
end
|
37
47
|
|
38
48
|
def diff(path, revision, previous_revision)
|
@@ -52,19 +62,23 @@ module MetaProject
|
|
52
62
|
# Returns a Pathname representing the root directory of this browser.
|
53
63
|
# NOTE: The root of the browser may be at a lower level than
|
54
64
|
# the toplevel of the online scm web interface; It depends
|
55
|
-
# on the configuration of this instance
|
65
|
+
# on the configuration of this instance.
|
56
66
|
def root
|
57
|
-
Pathname.new(self, "", nil, true)
|
67
|
+
Pathname.new(self, nil, "", nil, true)
|
58
68
|
end
|
59
69
|
|
60
70
|
private
|
61
71
|
|
72
|
+
def validate_presence_of(spec_name, spec, var)
|
73
|
+
raise "Missing \#{#{var}} in #{spec_name}: '#{spec}'" unless spec =~ /\#\{#{var}\}/
|
74
|
+
end
|
75
|
+
|
62
76
|
# Returns the file URI for +path+. Valid options are:
|
63
77
|
#
|
64
|
-
# * :type => ["
|
78
|
+
# * :type => ["dir"|"html"|"diff"|"raw"]
|
65
79
|
# * :revision
|
66
80
|
# * :previous_revision
|
67
|
-
def file_uri(path
|
81
|
+
def file_uri(path, revision, spec, previous_revision)
|
68
82
|
begin
|
69
83
|
eval("\"#{spec}\"", binding)
|
70
84
|
rescue NameError
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'open-uri'
|
2
|
-
|
3
1
|
module MetaProject
|
4
2
|
module ScmWeb
|
5
3
|
# A subset of the
|
@@ -8,13 +6,18 @@ module MetaProject
|
|
8
6
|
#
|
9
7
|
class Pathname
|
10
8
|
|
11
|
-
def initialize(browser,
|
12
|
-
@browser, @
|
9
|
+
def initialize(browser, parent, basename, revision_identifier, directory)
|
10
|
+
@browser, @parent, @basename, @revision_identifier, @directory = browser, parent, basename, revision_identifier, directory
|
13
11
|
end
|
14
12
|
|
15
13
|
# The relative path from the root of the browser instance
|
14
|
+
#
|
15
|
+
# ""
|
16
|
+
# "var"
|
17
|
+
# "var/spool"
|
16
18
|
def path_from_root
|
17
|
-
@path_from_root
|
19
|
+
parent_path_from_root = @parent ? @parent.path_from_root : ""
|
20
|
+
parent_path_from_root == "" ? @basename : "#{parent_path_from_root}/#{@basename}"
|
18
21
|
end
|
19
22
|
|
20
23
|
# The revision of this file or nil if this is a directory
|
@@ -24,47 +27,63 @@ module MetaProject
|
|
24
27
|
|
25
28
|
# Returns a Pathname at the +relative_path+ from this directory.
|
26
29
|
# Note: This only works if this instance is a +directory?+
|
27
|
-
def
|
28
|
-
|
29
|
-
Pathname.new(@browser,
|
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)
|
30
33
|
end
|
31
34
|
|
32
35
|
# Stlib Pathname methods
|
36
|
+
|
37
|
+
# The parent of this instance
|
38
|
+
def parent
|
39
|
+
@parent
|
40
|
+
end
|
33
41
|
|
34
|
-
#
|
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)
|
35
48
|
def cleanpath
|
36
|
-
@browser.history(
|
49
|
+
directory? ? @browser.dir(path_from_root) : @browser.history(path_from_root)
|
37
50
|
end
|
38
51
|
|
39
52
|
def children
|
40
53
|
result = []
|
41
|
-
html =
|
54
|
+
html = better_open(cleanpath).read
|
42
55
|
|
43
|
-
html.scan(@browser.child_dirs_pattern) do |
|
44
|
-
|
45
|
-
child_revision_identifier =
|
46
|
-
#puts "DIR:#{
|
47
|
-
result <<
|
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)
|
48
61
|
end
|
49
62
|
|
50
|
-
html.scan(@browser.child_files_pattern) do |
|
51
|
-
|
52
|
-
child_revision_identifier =
|
53
|
-
#puts "FILE:#{
|
54
|
-
result <<
|
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)
|
55
68
|
end
|
56
69
|
result
|
57
70
|
end
|
58
71
|
|
59
72
|
def open(&block)
|
60
|
-
url = @browser.raw(
|
61
|
-
|
62
|
-
|
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
|
63
81
|
end
|
64
82
|
|
65
83
|
def directory?
|
66
84
|
@directory
|
67
85
|
end
|
86
|
+
|
68
87
|
end
|
69
88
|
end
|
70
89
|
end
|
@@ -17,7 +17,7 @@ module MetaProject
|
|
17
17
|
def materialize(issue)
|
18
18
|
begin
|
19
19
|
url = "#{@trac_base_url}/ticket/#{issue.identifier}"
|
20
|
-
html =
|
20
|
+
html = better_open(url).read
|
21
21
|
summary = html[/Ticket ##{issue.identifier}\s*<\/h1>\s*<h2>([^<]*)<\/h2>/n, 1]
|
22
22
|
issue.attributes[:summary] = summary
|
23
23
|
issue.attributes[:url] = url
|
@@ -26,19 +26,6 @@ module MetaProject
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
-
private
|
30
|
-
|
31
|
-
def XXissue(issue_identifier)
|
32
|
-
issue_uri = "#{@trac_base_url}/ticket/#{issue_identifier}"
|
33
|
-
begin
|
34
|
-
html = open(issue_uri) { |data| data.read }
|
35
|
-
summary = html[/Ticket ##{issue_identifier}\s*<\/h1>\s*<h2>([^<]*)<\/h2>/n, 1]
|
36
|
-
::MetaProject::Tracker::Issue.new(issue_uri, summary)
|
37
|
-
rescue OpenURI::HTTPError
|
38
|
-
nil
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
29
|
end
|
43
30
|
end
|
44
31
|
end
|
@@ -38,7 +38,7 @@ module MetaProject
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def issue(identifier)
|
41
|
-
html =
|
41
|
+
html = better_open(@uri).read
|
42
42
|
|
43
43
|
issue_summary_regexp = @tracker.issue_summary_regexp(identifier)
|
44
44
|
if(html =~ issue_summary_regexp)
|
@@ -54,7 +54,7 @@ module MetaProject
|
|
54
54
|
|
55
55
|
# The ids of the subtrackers
|
56
56
|
def atids
|
57
|
-
html =
|
57
|
+
html = better_open(overview).read
|
58
58
|
|
59
59
|
# TODO: there has to be a better way to extract the atids from the HTML!
|
60
60
|
atids = []
|
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-09-
|
6
|
+
version: 0.4.7
|
7
|
+
date: 2005-09-06 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/open_uri.rb
|
45
46
|
- lib/meta_project/core_ext/pathname.rb
|
46
47
|
- lib/meta_project/core_ext/string.rb
|
47
48
|
- lib/meta_project/patois/parser.rb
|