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