lib/packnga/release-task.rb in packnga-0.9.0 vs lib/packnga/release-task.rb in packnga-0.9.1

- old
+ new

@@ -31,20 +31,28 @@ # @param [String] path of HTML files attr_writer :index_html_dir # This attribute is path of base directory of document. # @param [String] path of base directory of document attr_writer :base_dir + # This attribute is message when tagging in release. + # @param [String] message + attr_writer :tag_message + # This attribute is options for uploading rubyforge by rsync. + # @param [hash] options for uploading. + attr_writer :publish_options # Defines task for preparing to release. # Defined tasks update version and release-date in index files # and tag in git. # If you set rubyforge_project of Jeweler::Task.new with its given block, # it also define tasks to update rubyforge. # @param [Jeweler::Task] spec created by Jeweler::Task.new. def initialize(spec) @spec = spec @index_html_dir = nil @rubyforge = nil + @tag_messsage = nil + @publish_options = nil yield(self) if block_given? set_default_values define_tasks end @@ -58,10 +66,12 @@ end def set_default_values @index_html_dir ||= "doc/html" @base_dir ||= Pathname.new("doc") + @tag_message ||= 'release #{version}!!!' + @publish_options ||= {} end def define_tasks namespace :release do define_info_task @@ -113,11 +123,11 @@ def define_tag_task desc "Tag the current revision." task :tag do version = @spec.version - sh("git tag -a #{version} -m 'release #{version}!!!'") + sh("git tag -a #{version} -m '#{@tag_message}'") end end def define_rubyforge_tasks return if @spec.rubyforge_project.nil? @@ -130,21 +140,21 @@ end def define_reference_task namespace :reference do desc "Upload document to rubyforge." - task :publish => [:generate, "reference:publication:prepare"] do - rsync_to_rubyforge(@spec, "#{html_reference_dir}/", @spec.name) + task :publish => "reference:publication:generate" do + rsync_to_rubyforge(@spec, "#{html_reference_dir}/", @spec.name, @publish_options) end end end def define_html_task namespace :html do desc "Publish HTML to Web site." task :publish do - rsync_to_rubyforge(@spec, "#{html_base_dir}/", "") + rsync_to_rubyforge(@spec, "#{html_base_dir}/", "", @publish_options) end end end def define_publish_task @@ -158,10 +168,17 @@ task :upload => "package" do print "password:" system("stty -echo") @rubyforge.userconfig["password"] = STDIN.gets.chomp system("stty echo") + if @rubyforge.autoconfig["group_ids"][@spec.rubyforge_project].nil? + @rubyforge.scrape_config + @rubyforge.save_autoconfig + end + if @rubyforge.autoconfig["package_ids"][@spec.name].nil? + @rubyforge.create_package(@rubyforge.autoconfig["group_ids"][@spec.rubyforge_project], @spec.name) + end @rubyforge.add_release(@spec.rubyforge_project, @spec.name, @spec.version.to_s, "pkg/#{@spec.name}-#{@spec.version}.tar.gz") end @@ -171,11 +188,13 @@ end def rsync_to_rubyforge(spec, source, destination, options={}) host = "#{@rubyforge.userconfig["username"]}@rubyforge.org" - rsync_args = "-av --dry-run --exclude '*.erb' --chmod=ug+w" + rsync_args = "-av --exclude '*.erb' --chmod=ug+w" + 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 end end