aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortechnoweenie <technoweenie@567b1171-46fb-0310-a4c9-b4bef9110e78>2005-09-19 04:47:48 +0000
committertechnoweenie <technoweenie@567b1171-46fb-0310-a4c9-b4bef9110e78>2005-09-19 04:47:48 +0000
commitc6b797a35a20d188d496e2bd2d2f99654afd5709 (patch)
tree6199f0b4ca88a9c55cf746a7bcfd94d6068cdbdb
parentbe856e0761734a29937e47d54af3f798fcc328f8 (diff)
first rubyforge release
git-svn-id: http://svn.techno-weenie.net/projects/acts_as_versioned@94 567b1171-46fb-0310-a4c9-b4bef9110e78
-rw-r--r--CHANGELOG4
-rw-r--r--README13
-rw-r--r--Rakefile128
3 files changed, 134 insertions, 11 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 73dbd7930..e6ce31cab 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,7 @@
+*0.1.3* (18 Sep 2005)
+
+* First RubyForge release
+
*0.1.2*
* check if module is already included when acts_as_versioned is called
diff --git a/README b/README
index 7ab11a784..31af24076 100644
--- a/README
+++ b/README
@@ -2,18 +2,19 @@
This library adds simple versioning to an ActiveRecord module. ActiveRecord is required.
-== Download
+== Install
Gem installation:
- gem install acts_as_versioned --source=http://techno-weenie.net/code
+ gem install acts_as_versioned
-Get a gzipped tar at http://techno-weenie.net/code/pkg
+Download:
-== Usage
+ http://rubyforge.org/projects/ar-versioned/
-RDocs are online at http://techno-weenie.net/code/doc/acts_as_versioned/. Start with the
-ActiveRecord::Acts::Versioned module.
+== Documentation
+
+RDocs are online at http://ar-versioned.rubyforge.org
Special thanks to Dreamer on ##rubyonrails for help in early testing. His ServerSideWiki (http://serversidewiki.com)
was the first project to use acts_as_versioned <em>in the wild</em>. \ No newline at end of file
diff --git a/Rakefile b/Rakefile
index bb3ea5282..dcdc91579 100644
--- a/Rakefile
+++ b/Rakefile
@@ -8,10 +8,12 @@ require 'rake/gempackagetask'
require 'rake/testtask'
require 'rake/contrib/rubyforgepublisher'
-PKG_NAME = 'acts_as_versioned'
-PKG_VERSION = '0.1.2'
-PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
-PROD_HOST = "technoweenie@bidwell.textdrive.com"
+PKG_NAME = 'acts_as_versioned'
+PKG_VERSION = '0.1.3'
+PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
+PROD_HOST = "technoweenie@bidwell.textdrive.com"
+RUBY_FORGE_PROJECT = 'ar-versioned'
+RUBY_FORGE_USER = 'technoweenie'
for adapter in %w( mysql postgresql sqlite sqlite3 sqlserver sqlserver_odbc db2 oci )
Rake::TestTask.new("test_#{adapter}") do |t|
@@ -63,7 +65,123 @@ end
desc "Publish the API documentation"
task :pdoc => [:rdoc] do
Rake::SshDirPublisher.new(PROD_HOST, "public_html/code/doc/#{PKG_NAME}", "doc").upload
+ Rake::RubyForgePublisher.new(RUBY_FORGE_PROJECT, RUBY_FORGE_USER).upload
end
desc 'Publish the gem and API docs'
-task :publish => [:pgem, :pdoc] \ No newline at end of file
+task :publish => [:pgem, :pdoc, :rubyforge_upload]
+
+desc "Publish the release files to RubyForge."
+task :rubyforge_upload do
+ files = %w(gem tgz).map { |ext| "pkg/#{PKG_FILE_NAME}.#{ext}" }
+
+ if RUBY_FORGE_PROJECT then
+ require 'net/http'
+ require 'open-uri'
+
+ project_uri = "http://rubyforge.org/projects/#{RUBY_FORGE_PROJECT}/"
+ project_data = open(project_uri) { |data| data.read }
+ group_id = project_data[/[?&]group_id=(\d+)/, 1]
+ raise "Couldn't get group id" unless group_id
+
+ # This echos password to shell which is a bit sucky
+ if ENV["RUBY_FORGE_PASSWORD"]
+ password = ENV["RUBY_FORGE_PASSWORD"]
+ else
+ print "#{RUBY_FORGE_USER}@rubyforge.org's password: "
+ password = STDIN.gets.chomp
+ end
+
+ login_response = Net::HTTP.start("rubyforge.org", 80) do |http|
+ data = [
+ "login=1",
+ "form_loginname=#{RUBY_FORGE_USER}",
+ "form_pw=#{password}"
+ ].join("&")
+ http.post("/account/login.php", data)
+ end
+
+ cookie = login_response["set-cookie"]
+ raise "Login failed" unless cookie
+ headers = { "Cookie" => cookie }
+
+ release_uri = "http://rubyforge.org/frs/admin/?group_id=#{group_id}"
+ release_data = open(release_uri, headers) { |data| data.read }
+ package_id = release_data[/[?&]package_id=(\d+)/, 1]
+ raise "Couldn't get package id" unless package_id
+
+ first_file = true
+ release_id = ""
+
+ files.each do |filename|
+ basename = File.basename(filename)
+ file_ext = File.extname(filename)
+ file_data = File.open(filename, "rb") { |file| file.read }
+
+ puts "Releasing #{basename}..."
+
+ release_response = Net::HTTP.start("rubyforge.org", 80) do |http|
+ release_date = Time.now.strftime("%Y-%m-%d %H:%M")
+ type_map = {
+ ".zip" => "3000",
+ ".tgz" => "3110",
+ ".gz" => "3110",
+ ".gem" => "1400"
+ }; type_map.default = "9999"
+ type = type_map[file_ext]
+ boundary = "rubyqMY6QN9bp6e4kS21H4y0zxcvoor"
+
+ query_hash = if first_file then
+ {
+ "group_id" => group_id,
+ "package_id" => package_id,
+ "release_name" => PKG_FILE_NAME,
+ "release_date" => release_date,
+ "type_id" => type,
+ "processor_id" => "8000", # Any
+ "release_notes" => "",
+ "release_changes" => "",
+ "preformatted" => "1",
+ "submit" => "1"
+ }
+ else
+ {
+ "group_id" => group_id,
+ "release_id" => release_id,
+ "package_id" => package_id,
+ "step2" => "1",
+ "type_id" => type,
+ "processor_id" => "8000", # Any
+ "submit" => "Add This File"
+ }
+ end
+
+ query = "?" + query_hash.map do |(name, value)|
+ [name, URI.encode(value)].join("=")
+ end.join("&")
+
+ data = [
+ "--" + boundary,
+ "Content-Disposition: form-data; name=\"userfile\"; filename=\"#{basename}\"",
+ "Content-Type: application/octet-stream",
+ "Content-Transfer-Encoding: binary",
+ "", file_data, ""
+ ].join("\x0D\x0A")
+
+ release_headers = headers.merge(
+ "Content-Type" => "multipart/form-data; boundary=#{boundary}"
+ )
+
+ target = first_file ? "/frs/admin/qrs.php" : "/frs/admin/editrelease.php"
+ http.post(target + query, data, release_headers)
+ end
+
+ if first_file then
+ release_id = release_response.body[/release_id=(\d+)/, 1]
+ raise("Couldn't get release id") unless release_id
+ end
+
+ first_file = false
+ end
+ end
+end \ No newline at end of file