meta_project 0.4.6 → 0.4.7
Sign up to get free protection for your applications and to get access to all the features.
- 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
|