meta_project 0.4.10 → 0.4.11

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 CHANGED
@@ -1,5 +1,13 @@
1
1
  = MetaProject Changelog
2
2
 
3
+ == Version 0.4.11
4
+
5
+ This release fixes several bugs in the XForge release code and improves documentation.
6
+
7
+ * Fixed #2398: Rake::XForge::Release doesn't allow manual setting of release_notes or release_changes
8
+ * Fixed #2399: Net::HTTPRequestURITooLong 414 readbody=true
9
+ * Fixed #2400: Project release always selects the *first* package
10
+
3
11
  == Version 0.4.10
4
12
 
5
13
  This version fixes some bugs in the JIRA and SourceForge APIs.
data/README CHANGED
@@ -1,4 +1,4 @@
1
- = MetaProject 0.4.10
1
+ = MetaProject 0.4.11
2
2
 
3
3
  MetaProject (formerly XForge) is a library that allows interaction with various project hosting servers, issue trackers, SCMs and SCM browsers through a common API.
4
4
 
@@ -100,7 +100,9 @@ and +release_changes+ to the task. Example:
100
100
 
101
101
  (In alphabetical order)
102
102
 
103
- [<b>Aslak Hellesoy</b>] Maintainer of this project.
103
+ [<b>Aslak Hellesoy</b>] Creator and main contributor of this project.
104
+
105
+ [<b>Austin Ziegler</b>] Bugfixes and documentation improvements for XForge release code.
104
106
 
105
107
  [<b>David Heinemeier Hansson</b>] For the HTTP POST code and the idea to parse XForge ids from project pages.
106
108
 
data/Rakefile CHANGED
@@ -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.10"
27
+ PKG_VERSION = "0.4.11"
28
28
  PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
29
29
  PKG_FILES = FileList[
30
30
  '[A-Z]*',
@@ -74,7 +74,7 @@ module MetaProject
74
74
  end
75
75
 
76
76
  # Parses a patois String and yields commands.
77
- # Each operation can be executed with +execute+
77
+ # TODO: Each operation can be executed with +execute+
78
78
  def parse(msg)
79
79
  msg.scan(@command_pattern) do |cmd_group|
80
80
  cmd = SUPPORTED_COMMANDS[cmd_group[0].downcase]
@@ -1,14 +1,12 @@
1
1
  module MetaProject
2
2
  module Project
3
3
  module XForge
4
-
5
- # A Session object allows authenticated interaction with a Project, such as releasing files.
4
+ # A Session object allows authenticated interaction with a Project,
5
+ # such as releasing files.
6
6
  #
7
7
  # A Session object can be obtained via Project.login
8
- #
9
8
  class Session
10
-
11
- # Simple enumeration of processors. Used from Session.release
9
+ # Simple enumeration of processors. Used from Session.release.
12
10
  class Processor
13
11
  I386 = 1000
14
12
  IA64 = 6000
@@ -21,7 +19,7 @@ module MetaProject
21
19
  OTHER_PLATFORM = 9999
22
20
  end
23
21
 
24
- BOUNDARY = "rubyqMY6QN9bp6e4kS21H4y0zxcvoor"
22
+ BOUNDARY = "rubyqMY6QN9bp6e4kS21H4y0zxcvoor" #:nodoc:
25
23
 
26
24
  def initialize(host, project, cookie) # :nodoc:
27
25
  @host = host
@@ -29,13 +27,31 @@ module MetaProject
29
27
  @headers = { "Cookie" => cookie }
30
28
  end
31
29
 
32
- # The package_id of our project
33
- def package_id
34
- unless(@package_id)
30
+ PACKAGE_ID_PATTERN = %r{name="package_id"
31
+ \s+
32
+ value="([^"]+)"
33
+ .*?
34
+ name="package_name"
35
+ \s+
36
+ value="([^"]+)"}mxo #:nodoc:
37
+
38
+ # This will get the +package_id+ for the project. This accepts an
39
+ # optional name of the package that will be searched for results. A
40
+ # given session will only work for one package.
41
+ def package_id(name = nil)
42
+ unless @package_id
35
43
  release_uri = "http://#{@host}/frs/admin/?group_id=#{@project.group_id}"
36
44
  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]
45
+ packages = release_data.scan(PACKAGE_ID_PATTERN)
46
+ first = packages[0][0]
47
+ packages = Hash[*packages.map { |el| el.reverse }.flatten]
48
+
49
+ if name
50
+ @package_id = packages[name]
51
+ else
52
+ @package_id = first
53
+ end
54
+
39
55
  unless @package_id
40
56
  File.open("package_id.html", "w") {|io| io.write(release_data)}
41
57
  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."
@@ -44,11 +60,16 @@ module MetaProject
44
60
  @package_id
45
61
  end
46
62
 
47
- # Creates a new release containing the files specified by +filenames+ (Array) and named +release_name+.
48
- # Optional parameters are +processor+ (which should be one of the Processor constants), +release_notes+,
49
- # +release_changes+ and +preformatted+ which will appear on the releas page of the associated project.
50
- #
51
- def release(release_name, filenames, release_notes="", release_changes="", preformatted=true, processor=Processor::ANY)
63
+ # Creates a new release containing the files specified by
64
+ # +filenames+ (Array) and named +release_name+. Optional parameters
65
+ # are +processor+ (which should be one of the Processor constants),
66
+ # +release_notes+, +release_changes+ and +preformatted+ which will
67
+ # appear on the releas page of the associated project. The
68
+ # +package_name+ parameter will help choose from the possible
69
+ # multiple packages for a release.
70
+ def release(release_name, filenames, release_notes = "",
71
+ release_changes = "", package_name = nil,
72
+ preformatted = true, processor = Processor::ANY)
52
73
  release_date = Time.now.strftime("%Y-%m-%d %H:%M")
53
74
  release_id = nil
54
75
 
@@ -56,9 +77,9 @@ module MetaProject
56
77
  puts "Files:"
57
78
  puts " " + filenames.join("\n ")
58
79
  puts "\nRelease Notes:\n"
59
- puts release_notes
80
+ puts release_notes.split(/\n/)[0..10].join("\n")
60
81
  puts "\nRelease Changes:\n"
61
- puts release_changes
82
+ puts release_changes.split(/\n/)[0..10].join("\n")
62
83
  puts "\nRelease Settings:\n"
63
84
  puts "Preformatted: #{preformatted}"
64
85
  puts "Processor: #{processor}"
@@ -66,13 +87,13 @@ module MetaProject
66
87
 
67
88
  xfiles = filenames.collect{|filename| XFile.new(filename)}
68
89
  xfiles.each_with_index do |xfile, i|
69
- first_file = i==0
90
+ first_file = (i == 0)
70
91
  puts "Releasing #{xfile.basename}..."
71
92
  release_response = Net::HTTP.start(@host, 80) do |http|
72
93
  query_hash = if first_file then
73
94
  {
74
95
  "group_id" => @project.group_id,
75
- "package_id" => package_id,
96
+ "package_id" => package_id(package_name),
76
97
  "type_id" => xfile.bin_type_id,
77
98
  "processor_id" => processor,
78
99
 
@@ -86,7 +107,7 @@ module MetaProject
86
107
  else
87
108
  {
88
109
  "group_id" => @project.group_id,
89
- "package_id" => package_id,
110
+ "package_id" => package_id(package_name),
90
111
  "type_id" => xfile.bin_type_id,
91
112
  "processor_id" => processor,
92
113
 
@@ -96,22 +117,22 @@ module MetaProject
96
117
  }
97
118
  end
98
119
 
99
- query = query(query_hash)
100
-
101
- data = [
102
- "--" + BOUNDARY,
103
- "Content-Disposition: form-data; name=\"userfile\"; filename=\"#{xfile.basename}\"",
120
+ form = [
121
+ "--#{BOUNDARY}",
122
+ %Q(Content-Disposition: form-data; name="userfile"; ) +
123
+ %Q(filename="#{xfile.basename}"),
104
124
  "Content-Type: application/octet-stream",
105
125
  "Content-Transfer-Encoding: binary",
106
126
  "", xfile.data, ""
107
- ].join("\x0D\x0A")
127
+ ]
128
+
129
+ data = post_data(form, query_hash)
130
+
131
+ headers = @headers.merge("Content-Type" => "multipart/form-data; boundary=#{BOUNDARY}")
108
132
 
109
- headers = @headers.merge(
110
- "Content-Type" => "multipart/form-data; boundary=#{BOUNDARY}"
111
- )
112
133
 
113
134
  target = first_file ? "/frs/admin/qrs.php" : "/frs/admin/editrelease.php"
114
- http.post(target + query, data, headers)
135
+ http.post(target, data, headers)
115
136
  end
116
137
 
117
138
  if first_file then
@@ -122,6 +143,7 @@ module MetaProject
122
143
  puts "Done!"
123
144
  end
124
145
 
146
+ # Publish news relating to a project and a package.
125
147
  def publish_news(subject, details)
126
148
  puts "About to publish news"
127
149
  puts "Subject: '#{subject}'"
@@ -132,31 +154,38 @@ module MetaProject
132
154
  release_response = Net::HTTP.start(@host, 80) do |http|
133
155
  query_hash = {
134
156
  "group_id" => @project.group_id,
135
- "package_id" => package_id,
136
157
  "post_changes" => "y",
137
158
  "summary" => subject,
138
159
  "details" => details
139
160
  }
140
161
 
141
162
  target = "/news/submit.php"
142
- headers = @headers.merge(
143
- "Content-Type" => "multipart/form-data"
144
- )
145
- http.post(target + query(query_hash), "", headers)
163
+ headers = @headers.merge("Content-Type" => "multipart/form-data; boundary=#{BOUNDARY}")
146
164
 
165
+ http.post(target, post_data(query_hash), headers)
147
166
  end
148
167
  puts "Done!"
149
168
  end
150
169
 
151
170
  private
152
-
153
- def query(query_hash)
154
- "?" + query_hash.map do |(name, value)|
155
- [name, URI.encode(value.to_s)].join("=")
156
- end.join("&")
171
+ def post_data(*args)
172
+ form = []
173
+ args.each do |arg|
174
+ case arg
175
+ when Array
176
+ form << arg
177
+ when Hash
178
+ arg.each do |key, value|
179
+ form <<
180
+ "--#{BOUNDARY}" <<
181
+ %Q(Content-Disposition: form-data; name="#{key}") <<
182
+ "" << value
183
+ end
184
+ end
185
+ end
186
+ form.flatten.join("\r\n")
157
187
  end
158
-
159
188
  end
160
189
  end
161
190
  end
162
- end
191
+ end
@@ -76,4 +76,4 @@ module MetaProject
76
76
  end
77
77
  end
78
78
  end
79
- end
79
+ end
@@ -1,16 +1,17 @@
1
1
  module MetaProject
2
2
  module Tracker
3
- # This module should be included by trackers that follow a digit-based issue scheme
3
+ # This module should be included by trackers that follow a digit-based issue scheme.
4
+ # TODO: Make issue_pattern and command_pattern attributes so they can be modified. Provide examples.
4
5
  module DigitIssues
5
6
  # Patois issue pattern
6
7
  def issue_pattern
7
- /\#([\d]+)/
8
+ @issue_pattern ||= /\#([\d]+)/
8
9
  end
9
10
  module_function :issue_pattern
10
11
 
11
12
  # Patois command pattern
12
13
  def command_pattern
13
- /([A-Za-z]*).?(\#[\d]+(?:(?:[, &]*|\s?and\s?)\#[\d]+)*)/
14
+ @command_pattern ||= /([A-Za-z]*).?(\#[\d]+(?:(?:[, &]*|\s?and\s?)\#[\d]+)*)/
14
15
  end
15
16
  module_function :command_pattern
16
17
 
@@ -1,17 +1,39 @@
1
1
  module Rake
2
2
  module XForge
3
-
4
- # Base class for XForge tasks
3
+ # Base class for XForge tasks.
5
4
  class Base
6
- attr_accessor :user_name, :password, :changes_file
5
+ # The user name for the xForge login of a release administrator of the
6
+ # project being released. This should NOT be stored in the Rakefile.
7
+ attr_accessor :user_name
8
+ # The password for the xForge login of a release administrator of the
9
+ # project being released. This should NOT be stored in the Rakefile.
10
+ attr_accessor :password
11
+ # The CHANGES file. If this file exists, it is parsed according to the
12
+ # standard CHANGES version parsing routines. See CHANGES FORMAT below
13
+ # for more information. Defaults to CHANGES if unset. #version must
14
+ # also be set.
15
+ #
16
+ # === CHANGES FORMAT
17
+ # The CHANGES file is essentially an RDoc-format changelog in the
18
+ # form:
19
+ #
20
+ # == Version VERSION-Pattern
21
+ #
22
+ # RELEASE NOTES
23
+ #
24
+ # * Change 1
25
+ # * Change 2
26
+ attr_accessor :changes_file
27
+ # Modifies the release version and affects CHANGES file parsing.
28
+ attr_accessor :version
7
29
 
8
30
  def initialize(project)
9
31
  @project = project
10
32
 
11
33
  @changes_file = "CHANGES"
12
- @version = PKG_VERSION if defined? PKG_VERSION
34
+ @version = ::PKG_VERSION if defined?(::PKG_VERSION)
13
35
 
14
- if(block_given?)
36
+ if block_given?
15
37
  yield self
16
38
  set_defaults
17
39
  execute
@@ -19,12 +41,11 @@ module Rake
19
41
  end
20
42
 
21
43
  protected
22
-
23
44
  def set_defaults
24
45
  end
25
46
 
26
47
  def user_name
27
- if(@user_name.nil?)
48
+ unless @user_name
28
49
  print "#{@project.host} user: "
29
50
  @user_name = STDIN.gets.chomp
30
51
  end
@@ -32,13 +53,12 @@ module Rake
32
53
  end
33
54
 
34
55
  def password
35
- if(@password.nil?)
56
+ unless @password
36
57
  print "#{@project.host} password: "
37
58
  @password = STDIN.gets.chomp
38
59
  end
39
60
  @password
40
61
  end
41
-
42
62
  end
43
63
  end
44
64
  end
@@ -1,19 +1,86 @@
1
1
  module Rake
2
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.
3
+ # This Rake task publishes news entries for a project. Publishing news
4
+ # is a good way to make your project visible on the main RubyForge page.
5
+ #
6
+ # project = MetaProject::Project::XForge::RubyForge.new('xforge')
7
+ # # Create a new news item for the xforge project on Rubyforge.
8
+ # task :news => [:gem] do
9
+ # Rake::XForge::NewsPublisher.new(project) {}
10
+ # end
11
+ #
12
+ # The previous example will use defaults where it can. It will prompt
13
+ # you for your xForge user name and password before it posts a news item
14
+ # about the project with a default subject and news details.
15
+ #
16
+ # While defaults are nice, you may want a little more control. You can
17
+ # specify additional attributes:
18
+ #
19
+ # * #user_name
20
+ # * #password
21
+ # * #changes_file
22
+ # * #version
23
+ # * #subject
24
+ # * #details
25
+ #
26
+ # Example:
27
+ # project = MetaProject::Project::XForge::RubyForge.new('xforge')
28
+ # task :news => [:gem] do
29
+ # Rake::XForge::NewsPublisher.new(project) do |xf|
30
+ # # Never hardcode user name and password in the Rakefile!
31
+ # xf.user_name = ENV['RUBYFORGE_USER']
32
+ # xf.password = ENV['RUBYFORGE_PASSWORD']
33
+ # xf.subject = "XForge 0.1 Released"
34
+ # xf.details = "Today, XForge 0.1 was released to the ..."
35
+ # end
36
+ # end
37
+ #
38
+ # This can be invoked from the command line:
39
+ #
40
+ # rake news RUBYFORGE_USER=myuser \
41
+ # RUBYFORGE_PASSWORD=mypassword
42
+ #
43
+ # If you don't like blocks, you can do like this:
44
+ #
45
+ # task :news => [:gem] do
46
+ # xf = Rake::XForge::NewsPublisher.new(project)
47
+ # ... # Set additional attributes
48
+ # xf.execute
49
+ # end
7
50
  class NewsPublisher < Base
51
+ # A plain-text headline for the news byte to be published.
52
+ attr_accessor :subject
53
+ # The plain-text news to be published. Hyperlinks are usually
54
+ # converted to hyperlinks by the xForge software.
55
+ attr_accessor :details
8
56
 
9
- attr_accessor :subject, :details
57
+ # Runs the news publisher task.
58
+ def execute
59
+ raise "'details' not defined." unless @details
60
+ raise "'subject' not defined." unless @subject
61
+ session = @project.login(user_name, password)
62
+ session.publish_news(@subject, @details)
63
+ end
10
64
 
11
65
  protected
12
-
13
66
  def set_defaults
14
- @subject = "#{PKG_NAME}-#{PKG_VERSION} released" unless @subject
67
+ unless @subject
68
+ if defined?(::PKG_NAME)
69
+ if defined?(::PKG_VERSION)
70
+ @subject = "#{::PKG_NAME} #{::PKG_VERSION} released"
71
+ elsif defined?(@version)
72
+ @subject = "#{::PKG_NAME} #{@version} released"
73
+ end
74
+ else
75
+ if defined?(::PKG_VERSION)
76
+ @subject = "#{@project.name} #{::PKG_VERSION} released"
77
+ elsif defined?(@version)
78
+ @subject = "#{@project.name} #{@version} released"
79
+ end
80
+ end
81
+ end
15
82
 
16
- if(@changes_file && @version)
83
+ if @changes_file && @version
17
84
  begin
18
85
  vp = ::MetaProject::VersionParser.new
19
86
  version = vp.parse(@changes_file, @version)
@@ -25,14 +92,6 @@ module Rake
25
92
  end
26
93
  end
27
94
  end
28
-
29
- def execute
30
- raise "'details' not defined." unless @details
31
- raise "'subject' not defined." unless @subject
32
- session = @project.login(user_name, password)
33
- session.publish_news(@subject, @details)
34
- end
35
-
36
95
  end
37
96
  end
38
97
  end
@@ -1,72 +1,127 @@
1
1
  module Rake
2
2
  module XForge
3
-
4
- # This Rake task releases files to RubyForge or other SourceForge clones. In its most simple usage it looks like:
3
+ # This Rake task releases files to RubyForge and other GForge instaces
4
+ # or SourceForge clones. In its most simple usage it looks like:
5
5
  #
6
+ # project = MetaProject::Project::XForge::RubyForge.new('xforge')
6
7
  # # Create a new release of the xforge project on Rubyforge.
7
- # task :release => [:gem] do
8
- # Rake::XForge::Release.new('xforge') {}
8
+ # task :release => [:gem] do
9
+ # Rake::XForge::Release.new(project) {}
9
10
  # end
10
11
  #
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.
12
+ # The previous example will use defaults where it can. It will prompt
13
+ # you for your xForge user name and password before it uploads all
14
+ # gems under the pkg folder and creates a RubyForge release.
13
15
  #
14
- # While defaults are nice, you may want a little more control. You can specify additional attributes:
16
+ # While defaults are nice, you may want a little more control. You can
17
+ # specify additional attributes:
15
18
  #
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
+ # * #user_name
20
+ # * #password
21
+ # * #changes_file
22
+ # * #version
23
+ # * #files
24
+ # * #release_name
25
+ # * #release_notes
26
+ # * #release_changes
27
+ # * #package_name
19
28
  #
20
29
  # Example:
21
- #
30
+ # project = MetaProject::Project::XForge::RubyForge.new('xforge')
22
31
  # 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']
32
+ # release_files = FileList[ 'pkg/*.gem', 'CHANGES' ]
33
+ #
34
+ # Rake::XForge::Release.new(project) do |xf|
35
+ # # Never hardcode user name and password in the Rakefile!
36
+ # xf.user_name = ENV['RUBYFORGE_USER']
31
37
  # xf.password = ENV['RUBYFORGE_PASSWORD']
32
38
  # xf.files = release_files.to_a
33
- # xf.release_name = "XForge 0.1"
34
- # end
39
+ # xf.release_name = "XForge 0.1"
35
40
  # end
36
41
  #
37
42
  # This can be invoked from the command line:
38
43
  #
39
- # rake release RUBYFORGE_USER=aslak_hellesoy RUBYFORGE_PASSWORD=nahnotreal
44
+ # rake release RUBYFORGE_USER=myuser \
45
+ # RUBYFORGE_PASSWORD=mypassword
40
46
  #
41
47
  # If you don't like blocks, you can do like this:
42
48
  #
43
- # task :release => [:gem] do
44
- # xf = Rake::XForge::Release.new('xforge')
49
+ # project = MetaProject::Project::XForge::RubyForge.new('xforge')
50
+ # task :release => [:gem] do
51
+ # xf = Rake::XForge::Release.new(project)
45
52
  # ... # Set additional attributes
46
- # xf.execute
53
+ # xf.execute
47
54
  # end
48
- #
49
55
  class Release < Base
56
+ # An array of files that should be uploaded to xForge. If this is not
57
+ # provided, the Rake task will default to one of two values. If the
58
+ # constant ::PKG_FILE_NAME is defined, then @files is
59
+ # ["pkg/#{PKG_FILE_NAME}.gem"]. Otherwise, it is all .gem files under
60
+ # the pkg directory.
61
+ attr_accessor :files
62
+ # The name of the release. If this is unset, MetaProject will try to
63
+ # set it with the values of ::PKG_NAME and ::PKG_VERSION, #version, or
64
+ # the project name.
65
+ attr_accessor :release_name
66
+ # Optional unless the CHANGES file is in a format different than
67
+ # expected. You can set the release notes with this value.
68
+ attr_accessor :release_notes
69
+ # Optional unless the CHANGES file is in a format different than
70
+ # expected. You can set the change notes with this value.
71
+ attr_accessor :release_changes
72
+ # Optional package name. This is *necessary* for projects that have
73
+ # more than one released package. If not defined, then the *first*
74
+ # package ID that is found on the xForge release page will be used.
75
+ attr_accessor :package_name
76
+
77
+ # Runs the release task.
78
+ def execute
79
+ raise "'release_name' not defined." unless @release_name
80
+ raise "'files' not defined." unless @files
81
+ raise "'release_notes' not defined." unless @release_notes
82
+ raise "'release_changes' not defined." unless @release_changes
83
+ session = @project.login(user_name, password)
84
+ session.release(@release_name, @files, @release_notes,
85
+ @release_changes, @package_name)
86
+ end
50
87
 
51
- attr_accessor :files, :release_name
52
-
53
- protected
54
-
88
+ protected
55
89
  def set_defaults
56
- if(@files.nil?)
57
- @files = ["pkg/#{PKG_FILE_NAME}.gem"] if defined? PKG_FILE_NAME
90
+ unless @files
91
+ if defined?(::PKG_FILE_NAME)
92
+ @files = ["pkg/#{PKG_FILE_NAME}.gem"]
93
+ else
94
+ @files = Dir["pkg/**/*.gem"]
95
+ end
58
96
  end
59
-
60
- if(@release_name.nil?)
61
- @release_name = "#{PKG_NAME}-#{PKG_VERSION}" if (defined? PKG_NAME && defined? PKG_VERSION)
97
+
98
+ unless @release_name
99
+ if defined?(::PKG_NAME)
100
+ if defined?(::PKG_VERSION)
101
+ @release_name = "#{::PKG_NAME}-#{::PKG_VERSION}"
102
+ elsif @version
103
+ @release_name = "#{::PKG_NAME}-#{@version}"
104
+ end
105
+ else
106
+ if defined?(::PKG_VERSION)
107
+ @release_name = "#{@package.name}-#{::PKG_VERSION}"
108
+ elsif @version
109
+ @release_name = "#{@package.name}-#{@version}"
110
+ end
111
+ end
112
+ unless @release_name
113
+ raise "Cannot set release name. There is no version set."
114
+ end
62
115
  end
63
-
64
- if(@changes_file && @version)
116
+
117
+ if @changes_file and @version
65
118
  begin
66
119
  vp = ::MetaProject::VersionParser.new
67
120
  version = vp.parse(@changes_file, @version)
68
121
  @release_notes = version.release_notes unless @release_notes
69
- @release_changes = "* " + version.release_changes.join("\n* ") unless @release_changes
122
+ unless @release_changes
123
+ @release_changes = %Q[* #{version.release_changes.join("\n* ")}]
124
+ end
70
125
  rescue => e
71
126
  STDERR.puts("Couldn't parse release info from #{@changes_file}")
72
127
  STDERR.puts(e.message)
@@ -74,16 +129,6 @@ module Rake
74
129
  end
75
130
  end
76
131
  end
77
-
78
- def execute
79
- raise "'release_name' not defined." unless @release_name
80
- raise "'files' not defined." unless @files
81
- raise "'release_notes' not defined." unless @release_notes
82
- raise "'release_changes' not defined." unless @release_changes
83
- session = @project.login(user_name, password)
84
- session.release(@release_name, @files, @release_notes, @release_changes)
85
- end
86
-
87
132
  end
88
133
  end
89
134
  end
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.10
7
- date: 2005-09-08 00:00:00 -04:00
6
+ version: 0.4.11
7
+ date: 2005-09-09 00:00:00 -04:00
8
8
  summary: Ruby based make-like utility.
9
9
  require_paths:
10
10
  - lib