meta_project 0.4.1
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 +178 -0
- data/MIT-LICENSE +21 -0
- data/README +64 -0
- data/Rakefile +166 -0
- data/TODO +9 -0
- data/doc/base_attrs.rdoc +2 -0
- data/lib/meta_project/project/base.rb +7 -0
- data/lib/meta_project/project/codehaus/codehaus_project_svn.rb +26 -0
- data/lib/meta_project/project/codehaus.rb +1 -0
- data/lib/meta_project/project/trac/trac_project.rb +26 -0
- data/lib/meta_project/project/trac.rb +1 -0
- data/lib/meta_project/project/xforge/ruby_forge.rb +46 -0
- data/lib/meta_project/project/xforge/session.rb +162 -0
- data/lib/meta_project/project/xforge/source_forge.rb +46 -0
- data/lib/meta_project/project/xforge/xfile.rb +45 -0
- data/lib/meta_project/project/xforge/xforge_base.rb +76 -0
- data/lib/meta_project/project/xforge.rb +5 -0
- data/lib/meta_project/project.rb +4 -0
- data/lib/meta_project/project_analyzer.rb +36 -0
- data/lib/meta_project/scm_web.rb +53 -0
- data/lib/meta_project/tracker/base.rb +18 -0
- data/lib/meta_project/tracker/digit_issues.rb +24 -0
- data/lib/meta_project/tracker/issue.rb +11 -0
- data/lib/meta_project/tracker/jira/jira_tracker.rb +68 -0
- data/lib/meta_project/tracker/jira.rb +1 -0
- data/lib/meta_project/tracker/trac/trac_tracker.rb +29 -0
- data/lib/meta_project/tracker/trac.rb +1 -0
- data/lib/meta_project/tracker/xforge/ruby_forge_tracker.rb +17 -0
- data/lib/meta_project/tracker/xforge/source_forge_tracker.rb +17 -0
- data/lib/meta_project/tracker/xforge/xforge_tracker.rb +83 -0
- data/lib/meta_project/tracker/xforge.rb +3 -0
- data/lib/meta_project/tracker.rb +6 -0
- data/lib/meta_project/version_parser.rb +48 -0
- data/lib/meta_project.rb +6 -0
- data/lib/rake/contrib/xforge/base.rb +42 -0
- data/lib/rake/contrib/xforge/news_publisher.rb +34 -0
- data/lib/rake/contrib/xforge/release.rb +78 -0
- data/lib/rake/contrib/xforge.rb +3 -0
- metadata +85 -0
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'meta_project/tracker/base'
|
2
|
+
require 'meta_project/tracker/digit_issues'
|
3
|
+
require 'meta_project/tracker/issue'
|
4
|
+
|
5
|
+
module MetaProject
|
6
|
+
module Tracker
|
7
|
+
module XForge
|
8
|
+
class XForgeTracker < Base
|
9
|
+
include ::MetaProject::Tracker::DigitIssues
|
10
|
+
|
11
|
+
attr_accessor :overview, :project
|
12
|
+
|
13
|
+
# TODO: don't pass in project!! pass in hostname and id!
|
14
|
+
def initialize(overview, project)
|
15
|
+
@overview, @project = overview, project
|
16
|
+
end
|
17
|
+
|
18
|
+
# Finds an Issue by +identifier+
|
19
|
+
def issue(identifier)
|
20
|
+
sub_trackers = atids.collect {|atid| SubTracker.new(self, atid)}
|
21
|
+
sub_trackers.each do |sub_tracker|
|
22
|
+
issue = sub_tracker.issue(identifier)
|
23
|
+
return issue unless issue.nil?
|
24
|
+
end
|
25
|
+
nil
|
26
|
+
end
|
27
|
+
|
28
|
+
def markup(text)
|
29
|
+
text.gsub(identifier_regexp) do |match|
|
30
|
+
issue_identifier = $1
|
31
|
+
issue = issue(issue_identifier)
|
32
|
+
issue ? "<a href=\"#{issue.uri}\">\##{issue_identifier}: #{issue.summary}</a>" : "\##{issue_identifier}"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
class SubTracker
|
37
|
+
attr_reader :uri
|
38
|
+
|
39
|
+
def initialize(tracker, atid)
|
40
|
+
@tracker = tracker
|
41
|
+
@atid = atid
|
42
|
+
# FIXME: This will only show open items.
|
43
|
+
@uri = "#{tracker.overview}&atid=#{atid}&func=browse"
|
44
|
+
end
|
45
|
+
|
46
|
+
def issue(identifier)
|
47
|
+
html = open(uri) { |data| data.read }
|
48
|
+
|
49
|
+
regexp = @tracker.issue_regexp(identifier)
|
50
|
+
if(html =~ regexp)
|
51
|
+
issue_uri = @tracker.project.group_id_uri("tracker/index.php", "&atid=#{@atid}&func=detail&aid=#{identifier}")
|
52
|
+
return Issue.new(issue_uri, $1)
|
53
|
+
end
|
54
|
+
nil
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
# The ids of the subtrackers
|
61
|
+
def atids
|
62
|
+
html = open(overview) { |data| data.read }
|
63
|
+
|
64
|
+
# TODO: there has to be a better way to extract the atids from the HTML!
|
65
|
+
atids = []
|
66
|
+
offset = 0
|
67
|
+
look_for_atid = true
|
68
|
+
while(look_for_atid)
|
69
|
+
match_data = subtracker_regexp.match(html[offset..-1])
|
70
|
+
if(match_data)
|
71
|
+
offset += match_data.begin(1)
|
72
|
+
atids << match_data[1]
|
73
|
+
else
|
74
|
+
look_for_atid = false
|
75
|
+
end
|
76
|
+
end
|
77
|
+
atids
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module MetaProject
|
2
|
+
class VersionParser
|
3
|
+
def parse(changes_file, version)
|
4
|
+
release_notes_first = nil
|
5
|
+
changes_first = nil
|
6
|
+
changes_last = nil
|
7
|
+
|
8
|
+
lines = File.open(changes_file).readlines
|
9
|
+
state = nil
|
10
|
+
lines.each_with_index do |line, n|
|
11
|
+
# parse state
|
12
|
+
if (line =~ /^==/ && state == :in_release_notes && state != :done)
|
13
|
+
changes_first = changes_last = n
|
14
|
+
state = :done
|
15
|
+
end
|
16
|
+
if line =~ /#{version}/ && state.nil?
|
17
|
+
state = :in_release_notes
|
18
|
+
release_notes_first = n+1
|
19
|
+
end
|
20
|
+
if (line =~ /^\*/ && state == :in_release_notes)
|
21
|
+
state = :in_changes
|
22
|
+
changes_first = changes_last = n
|
23
|
+
end
|
24
|
+
if (line =~ /^\*/ && state == :in_changes)
|
25
|
+
changes_last = n
|
26
|
+
end
|
27
|
+
if (line =~ /^==/ && state == :in_changes)
|
28
|
+
state = :done
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
release_notes = lines[release_notes_first..changes_first-1].join("")
|
33
|
+
release_changes = lines[changes_first..changes_last].collect do |line|
|
34
|
+
line.length >= 2 ? line[2..-1].chomp : line
|
35
|
+
end
|
36
|
+
Version.new(release_notes, release_changes)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
class Version
|
41
|
+
attr_reader :release_notes # String
|
42
|
+
attr_reader :release_changes # Array of String
|
43
|
+
|
44
|
+
def initialize(release_notes, release_changes)
|
45
|
+
@release_notes, @release_changes = release_notes, release_changes
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/lib/meta_project.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
module Rake
|
2
|
+
module XForge
|
3
|
+
|
4
|
+
# Base class for XForge tasks
|
5
|
+
class Base
|
6
|
+
attr_writer :user_name, :password
|
7
|
+
|
8
|
+
def initialize(project)
|
9
|
+
@project = project
|
10
|
+
|
11
|
+
set_defaults
|
12
|
+
|
13
|
+
if(block_given?)
|
14
|
+
yield self
|
15
|
+
execute
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
protected
|
20
|
+
|
21
|
+
def set_defaults
|
22
|
+
end
|
23
|
+
|
24
|
+
def user_name
|
25
|
+
if(@user_name.nil?)
|
26
|
+
print "#{@host.name} user: "
|
27
|
+
@user_name = STDIN.gets.chomp
|
28
|
+
end
|
29
|
+
@user_name
|
30
|
+
end
|
31
|
+
|
32
|
+
def password
|
33
|
+
if(@password.nil?)
|
34
|
+
print "#{@host.name} password: "
|
35
|
+
@password = STDIN.gets.chomp
|
36
|
+
end
|
37
|
+
@password
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Rake
|
2
|
+
module XForge
|
3
|
+
|
4
|
+
# This Rake task publishes news entries for a project.
|
5
|
+
# Publishing news is a good way to make your project visible
|
6
|
+
# on the main RubyForge page.
|
7
|
+
class NewsPublisher < Base
|
8
|
+
|
9
|
+
attr_accessor :subject, :details
|
10
|
+
|
11
|
+
protected
|
12
|
+
|
13
|
+
def set_defaults
|
14
|
+
@subject = "#{PKG_NAME}-#{PKG_VERSION} released"
|
15
|
+
|
16
|
+
begin
|
17
|
+
vp = ::MetaProject::VersionParser.new
|
18
|
+
version = vp.parse("CHANGES", PKG_VERSION)
|
19
|
+
@details = version.release_notes
|
20
|
+
rescue => e
|
21
|
+
STDERR.puts("Couldn't parse release info from CHANGES")
|
22
|
+
STDERR.puts(e.message)
|
23
|
+
STDERR.puts(e.backtrace.join("\n"))
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def execute
|
28
|
+
session = @project.login(user_name, password)
|
29
|
+
session.publish_news(@subject, @details)
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
module Rake
|
2
|
+
module XForge
|
3
|
+
|
4
|
+
# This Rake task releases files to RubyForge or other SourceForge clones. In its most simple usage it looks like:
|
5
|
+
#
|
6
|
+
# # Create a new release of the xforge project on Rubyforge.
|
7
|
+
# task :release => [:gem] do
|
8
|
+
# Rake::XForge::Release.new('xforge') {}
|
9
|
+
# end
|
10
|
+
#
|
11
|
+
# The previous example will use defaults where it can. It will prompt you for your RubyForge user name
|
12
|
+
# and password before it uploads all gems under the pkg folder and creates a RubyForge release.
|
13
|
+
#
|
14
|
+
# While defaults are nice, you may want a little more control. You can specify additional attributes:
|
15
|
+
#
|
16
|
+
# :include: /doc/base_attrs.rdoc
|
17
|
+
# * files - an array of files that should go into the release
|
18
|
+
# * release_name - name of the release
|
19
|
+
#
|
20
|
+
# Example:
|
21
|
+
#
|
22
|
+
# task :release => [:gem] do
|
23
|
+
# release_files = FileList[
|
24
|
+
# 'pkg/*.gem',
|
25
|
+
# 'CHANGES'
|
26
|
+
# ]
|
27
|
+
#
|
28
|
+
# Rake::XForge::Release.new(MetaProject::Project::XForge::RubyForge.new('xforge')) do |xf|
|
29
|
+
# # Never hardcode user name and password in the Rakefile!
|
30
|
+
# xf.user_name = ENV['RUBYFORGE_USER']
|
31
|
+
# xf.password = ENV['RUBYFORGE_PASSWORD']
|
32
|
+
# xf.files = release_files.to_a
|
33
|
+
# xf.release_name = "XForge 0.1"
|
34
|
+
# end
|
35
|
+
# end
|
36
|
+
#
|
37
|
+
# This can be invoked from the command line:
|
38
|
+
#
|
39
|
+
# rake release RUBYFORGE_USER=aslak_hellesoy RUBYFORGE_PASSWORD=nahnotreal
|
40
|
+
#
|
41
|
+
# If you don't like blocks, you can do like this:
|
42
|
+
#
|
43
|
+
# task :release => [:gem] do
|
44
|
+
# xf = Rake::XForge::Release.new('xforge')
|
45
|
+
# ... # Set additional attributes
|
46
|
+
# xf.execute
|
47
|
+
# end
|
48
|
+
#
|
49
|
+
class Release < Base
|
50
|
+
|
51
|
+
attr_accessor :files, :release_name
|
52
|
+
|
53
|
+
protected
|
54
|
+
|
55
|
+
def set_defaults
|
56
|
+
@files = ["pkg/#{PKG_FILE_NAME}.gem"] if defined? PKG_FILE_NAME
|
57
|
+
@release_name = "#{PKG_NAME}-#{PKG_VERSION}" if (defined? PKG_NAME && defined? PKG_VERSION)
|
58
|
+
|
59
|
+
begin
|
60
|
+
vp = ::MetaProject::VersionParser.new
|
61
|
+
version = vp.parse("CHANGES", PKG_VERSION)
|
62
|
+
@release_notes = version.release_notes
|
63
|
+
@release_changes = "* " + version.release_changes.join("\n* ")
|
64
|
+
rescue => e
|
65
|
+
STDERR.puts("Couldn't parse release info from CHANGES")
|
66
|
+
STDERR.puts(e.message)
|
67
|
+
STDERR.puts(e.backtrace.join("\n"))
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def execute
|
72
|
+
session = @project.login(user_name, password)
|
73
|
+
session.release(@release_name, @files, @release_notes, @release_changes)
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
metadata
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.8.11
|
3
|
+
specification_version: 1
|
4
|
+
name: meta_project
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 0.4.1
|
7
|
+
date: 2005-08-22 00:00:00 -04:00
|
8
|
+
summary: Ruby based make-like utility.
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email: aslak.hellesoy@gmail.com
|
12
|
+
homepage: http://xforge.rubyforge.org
|
13
|
+
rubyforge_project: xforge
|
14
|
+
description: "MetaProject (formerly XForge) is a library that allows interaction with various
|
15
|
+
project hosting servers, issue trackers, scms and scm browsers."
|
16
|
+
autorequire: meta_project
|
17
|
+
default_executable:
|
18
|
+
bindir: bin
|
19
|
+
has_rdoc: true
|
20
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
21
|
+
requirements:
|
22
|
+
-
|
23
|
+
- ">"
|
24
|
+
- !ruby/object:Gem::Version
|
25
|
+
version: 0.0.0
|
26
|
+
version:
|
27
|
+
platform: ruby
|
28
|
+
signing_key:
|
29
|
+
cert_chain:
|
30
|
+
authors:
|
31
|
+
- Aslak Hellesoy
|
32
|
+
files:
|
33
|
+
- CHANGES
|
34
|
+
- MIT-LICENSE
|
35
|
+
- Rakefile
|
36
|
+
- README
|
37
|
+
- TODO
|
38
|
+
- lib/meta_project.rb
|
39
|
+
- lib/meta_project/project.rb
|
40
|
+
- lib/meta_project/project_analyzer.rb
|
41
|
+
- lib/meta_project/scm_web.rb
|
42
|
+
- lib/meta_project/tracker.rb
|
43
|
+
- lib/meta_project/version_parser.rb
|
44
|
+
- lib/meta_project/project/base.rb
|
45
|
+
- lib/meta_project/project/codehaus.rb
|
46
|
+
- lib/meta_project/project/trac.rb
|
47
|
+
- lib/meta_project/project/xforge.rb
|
48
|
+
- lib/meta_project/project/codehaus/codehaus_project_svn.rb
|
49
|
+
- lib/meta_project/project/trac/trac_project.rb
|
50
|
+
- lib/meta_project/project/xforge/ruby_forge.rb
|
51
|
+
- lib/meta_project/project/xforge/session.rb
|
52
|
+
- lib/meta_project/project/xforge/source_forge.rb
|
53
|
+
- lib/meta_project/project/xforge/xfile.rb
|
54
|
+
- lib/meta_project/project/xforge/xforge_base.rb
|
55
|
+
- lib/meta_project/tracker/base.rb
|
56
|
+
- lib/meta_project/tracker/digit_issues.rb
|
57
|
+
- lib/meta_project/tracker/issue.rb
|
58
|
+
- lib/meta_project/tracker/jira.rb
|
59
|
+
- lib/meta_project/tracker/trac.rb
|
60
|
+
- lib/meta_project/tracker/xforge.rb
|
61
|
+
- lib/meta_project/tracker/jira/jira_tracker.rb
|
62
|
+
- lib/meta_project/tracker/trac/trac_tracker.rb
|
63
|
+
- lib/meta_project/tracker/xforge/ruby_forge_tracker.rb
|
64
|
+
- lib/meta_project/tracker/xforge/source_forge_tracker.rb
|
65
|
+
- lib/meta_project/tracker/xforge/xforge_tracker.rb
|
66
|
+
- lib/rake/contrib/xforge.rb
|
67
|
+
- lib/rake/contrib/xforge/base.rb
|
68
|
+
- lib/rake/contrib/xforge/news_publisher.rb
|
69
|
+
- lib/rake/contrib/xforge/release.rb
|
70
|
+
- doc/base_attrs.rdoc
|
71
|
+
test_files: []
|
72
|
+
rdoc_options:
|
73
|
+
- "--title"
|
74
|
+
- MetaProject
|
75
|
+
- "--main"
|
76
|
+
- README
|
77
|
+
- "--line-numbers"
|
78
|
+
extra_rdoc_files:
|
79
|
+
- README
|
80
|
+
- MIT-LICENSE
|
81
|
+
- CHANGES
|
82
|
+
executables: []
|
83
|
+
extensions: []
|
84
|
+
requirements: []
|
85
|
+
dependencies: []
|