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.
Files changed (39) hide show
  1. data/CHANGES +178 -0
  2. data/MIT-LICENSE +21 -0
  3. data/README +64 -0
  4. data/Rakefile +166 -0
  5. data/TODO +9 -0
  6. data/doc/base_attrs.rdoc +2 -0
  7. data/lib/meta_project/project/base.rb +7 -0
  8. data/lib/meta_project/project/codehaus/codehaus_project_svn.rb +26 -0
  9. data/lib/meta_project/project/codehaus.rb +1 -0
  10. data/lib/meta_project/project/trac/trac_project.rb +26 -0
  11. data/lib/meta_project/project/trac.rb +1 -0
  12. data/lib/meta_project/project/xforge/ruby_forge.rb +46 -0
  13. data/lib/meta_project/project/xforge/session.rb +162 -0
  14. data/lib/meta_project/project/xforge/source_forge.rb +46 -0
  15. data/lib/meta_project/project/xforge/xfile.rb +45 -0
  16. data/lib/meta_project/project/xforge/xforge_base.rb +76 -0
  17. data/lib/meta_project/project/xforge.rb +5 -0
  18. data/lib/meta_project/project.rb +4 -0
  19. data/lib/meta_project/project_analyzer.rb +36 -0
  20. data/lib/meta_project/scm_web.rb +53 -0
  21. data/lib/meta_project/tracker/base.rb +18 -0
  22. data/lib/meta_project/tracker/digit_issues.rb +24 -0
  23. data/lib/meta_project/tracker/issue.rb +11 -0
  24. data/lib/meta_project/tracker/jira/jira_tracker.rb +68 -0
  25. data/lib/meta_project/tracker/jira.rb +1 -0
  26. data/lib/meta_project/tracker/trac/trac_tracker.rb +29 -0
  27. data/lib/meta_project/tracker/trac.rb +1 -0
  28. data/lib/meta_project/tracker/xforge/ruby_forge_tracker.rb +17 -0
  29. data/lib/meta_project/tracker/xforge/source_forge_tracker.rb +17 -0
  30. data/lib/meta_project/tracker/xforge/xforge_tracker.rb +83 -0
  31. data/lib/meta_project/tracker/xforge.rb +3 -0
  32. data/lib/meta_project/tracker.rb +6 -0
  33. data/lib/meta_project/version_parser.rb +48 -0
  34. data/lib/meta_project.rb +6 -0
  35. data/lib/rake/contrib/xforge/base.rb +42 -0
  36. data/lib/rake/contrib/xforge/news_publisher.rb +34 -0
  37. data/lib/rake/contrib/xforge/release.rb +78 -0
  38. data/lib/rake/contrib/xforge.rb +3 -0
  39. 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,3 @@
1
+ require 'meta_project/tracker/xforge/xforge_tracker'
2
+ require 'meta_project/tracker/xforge/ruby_forge_tracker'
3
+ require 'meta_project/tracker/xforge/source_forge_tracker'
@@ -0,0 +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'
@@ -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
@@ -0,0 +1,6 @@
1
+ require 'meta_project/project_analyzer'
2
+ require 'meta_project/project'
3
+ require 'meta_project/tracker'
4
+ require 'meta_project/scm_web'
5
+ require 'meta_project/version_parser'
6
+ require 'rake/contrib/xforge'
@@ -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
@@ -0,0 +1,3 @@
1
+ require 'rake/contrib/xforge/base'
2
+ require 'rake/contrib/xforge/release'
3
+ require 'rake/contrib/xforge/news_publisher'
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: []