lib/packnga/release-task.rb in packnga-0.9.3 vs lib/packnga/release-task.rb in packnga-0.9.4
- old
+ new
@@ -14,10 +14,11 @@
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
require "rubyforge"
+require "digest"
module Packnga
# This class creates release tasks.
#
# Release tasks tag current version and install gem for test.
@@ -54,10 +55,11 @@
@index_html_dir = nil
@rubyforge = nil
@tag_messsage = nil
@publish_options = nil
@changes = nil
+ @rubyforge_password = nil
yield(self) if block_given?
set_default_values
define_tasks
end
@@ -86,11 +88,11 @@
end
end
def define_info_task
namespace :info do
- desc "update version in index HTML."
+ desc "Update version in index HTML."
task :update do
old_version = ENV["OLD_VERSION"]
old_release_date = ENV["OLD_RELEASE_DATE"]
new_release_date = ENV["RELEASE_DATE"] || Time.now.strftime("%Y-%m-%d")
new_version = ENV["VERSION"]
@@ -136,11 +138,12 @@
end
def define_rubyforge_tasks
return if @spec.rubyforge_project.nil?
@rubyforge = RubyForge.new
- @rubyforge.configure
+ @uninitialized_password = Digest::SHA2.hexdigest(Time.now.to_f.to_s)
+ @rubyforge.configure("password" => @uninitialized_password)
define_reference_task
define_html_task
define_publish_task
define_upload_tasks
define_post_task
@@ -171,15 +174,11 @@
def define_upload_tasks
namespace :rubyforge do
desc "Upload tar.gz to RubyForge."
task :upload => "package" do
- print "password:"
- system("stty -echo")
- @rubyforge.userconfig["password"] = STDIN.gets.chomp
- system("stty echo")
- puts
+ ensure_rubyforge_password
if @rubyforge.autoconfig["group_ids"][@spec.rubyforge_project].nil?
@rubyforge.scrape_config
@rubyforge.save_autoconfig
end
if @rubyforge.autoconfig["package_ids"][@spec.name].nil?
@@ -198,17 +197,20 @@
def define_post_task
namespace :rubyforge do
namespace :news do
desc "Post news to RubyForge."
task :post do
+ ensure_rubyforge_password
group_id =
@rubyforge.autoconfig["group_ids"][@spec.rubyforge_project]
subject =
"#{@spec.name} version #{@spec.version} has been released!"
body = @spec.description + "\nChanges:" + @changes
- @rubyforge.post_news(group_id, subject, body)
+ if @rubyforge.post_news(group_id, subject, body).nil?
+ raise "News couldn't be posted to RubyForge."
+ end
end
end
end
end
@@ -219,8 +221,18 @@
rsync_args << " --group=#{spec.rubyforge_project}"
rsync_args << " --delete" if options[:delete]
rsync_args << " --dry-run" if options[:dryrun]
remote_dir = "/var/www/gforge-projects/#{spec.rubyforge_project}/"
sh("rsync #{rsync_args} #{source} #{host}:#{remote_dir}#{destination}")
+ end
+
+ def ensure_rubyforge_password
+ if @rubyforge.userconfig["password"] == @uninitialized_password
+ print "password:"
+ system("stty -echo")
+ @rubyforge.userconfig["password"] = STDIN.gets.chomp
+ system("stty echo")
+ puts
+ end
end
end
end