0
@@ -136,116 +136,12 @@ task :pdoc => [:rdoc] do
0
desc "Publish the release files to RubyForge."
0
-task :release => [:package] do
0
- files = ["gem", "tgz", "zip"].map { |ext| "pkg/#{PKG_FILE_NAME}.#{ext}" }
0
- if RUBY_FORGE_PROJECT then
0
- project_uri = "http://rubyforge.org/projects/#{RUBY_FORGE_PROJECT}/"
0
- project_data = open(project_uri) { |data| data.read }
0
- group_id = project_data[/[?&]group_id=(\d+)/, 1]
0
- raise "Couldn't get group id" unless group_id
0
- # This echos password to shell which is a bit sucky
0
- if ENV["RUBY_FORGE_PASSWORD"]
0
- password = ENV["RUBY_FORGE_PASSWORD"]
0
- print "#{RUBY_FORGE_USER}@rubyforge.org's password: "
0
- password = STDIN.gets.chomp
0
- login_response = Net::HTTP.start("rubyforge.org", 80) do |http|
0
- "form_loginname=#{RUBY_FORGE_USER}",
0
- http.post("/account/login.php", data)
0
+task :release => [ :package ] do
0
- cookie = login_response["set-cookie"]
0
- raise "Login failed" unless cookie
0
- headers = { "Cookie" => cookie }
0
- release_uri = "http://rubyforge.org/frs/admin/?group_id=#{group_id}"
0
- release_data = open(release_uri, headers) { |data| data.read }
0
- package_id = release_data[/[?&]package_id=(\d+)/, 1]
0
- raise "Couldn't get package id" unless package_id
0
- files.each do |filename|
0
- basename = File.basename(filename)
0
- file_ext = File.extname(filename)
0
- file_data = File.open(filename, "rb") { |file| file.read }
0
- puts "Releasing #{basename}..."
0
- release_response = Net::HTTP.start("rubyforge.org", 80) do |http|
0
- release_date = Time.now.strftime("%Y-%m-%d %H:%M")
0
- }; type_map.default = "9999"
0
- type = type_map[file_ext]
0
- boundary = "rubyqMY6QN9bp6e4kS21H4y0zxcvoor"
0
- query_hash = if first_file then
0
- "group_id" => group_id,
0
- "package_id" => package_id,
0
- "release_name" => RELEASE_NAME,
0
- "release_date" => release_date,
0
- "processor_id" => "8000", # Any
0
- "release_notes" => "",
0
- "release_changes" => "",
0
- "preformatted" => "1",
0
- "group_id" => group_id,
0
- "release_id" => release_id,
0
- "package_id" => package_id,
0
- "processor_id" => "8000", # Any
0
- "submit" => "Add This File"
0
- query = "?" + query_hash.map do |(name, value)|
0
- [name, URI.encode(value)].join("=")
0
- "Content-Disposition: form-data; name=\"userfile\"; filename=\"#{basename}\"",
0
- "Content-Type: application/octet-stream",
0
- "Content-Transfer-Encoding: binary",
0
- release_headers = headers.merge(
0
- "Content-Type" => "multipart/form-data; boundary=#{boundary}"
0
- target = first_file ? "/frs/admin/qrs.php" : "/frs/admin/editrelease.php"
0
- http.post(target + query, data, release_headers)
0
- release_id = release_response.body[/release_id=(\d+)/, 1]
0
- raise("Couldn't get release id") unless release_id
0
+ for ext in %w( gem tgz zip )
0
+ release_command = "rubyforge add_release #{PKG_NAME} #{PKG_NAME} 'REL #{PKG_VERSION}' pkg/#{PKG_NAME}-#{PKG_VERSION}.#{ext}"
0
+ system(release_command)
0
\ No newline at end of file