Maintenance of Ruby 2.0.0 ended on February 24, 2016. Read more
TaskLib
Create a packaging task that will package the project into distributable files (e.g zip archive or tar files).
The PackageTask will create the following targets:
Create all the requested package files.
Delete all the package files. This target is automatically added to the main clobber target.
Rebuild the package files from scratch, even if they are not out of date.
Create a gzipped tar package (if need_tar is true).
Create a gzipped tar package (if need_tar_gz is true).
Create a bzip2'd tar package (if need_tar_bz2 is true).
Create a zip package archive (if need_zip is true).
Example:
Rake::PackageTask.new("rake", "1.2.3") do |p| p.need_tar = true p.package_files.include("lib /*.rb") end
Create a Package Task with the given name and
version. Use :noversion
as the version to build a package
without a version or to provide a fully-versioned package name.
# File rake/packagetask.rb, line 79 def initialize(name=nil, version=nil) init(name, version) yield self if block_given? define unless name.nil? end
Create the tasks defined by this task library.
# File rake/packagetask.rb, line 100 def define fail "Version required (or :noversion)" if @version.nil? @version = nil if :noversion == @version desc "Build all the packages" task :package desc "Force a rebuild of the package files" task :repackage => [:clobber_package, :package] desc "Remove package products" task :clobber_package do rm_r package_dir rescue nil end task :clobber => [:clobber_package] [ [need_tar, tgz_file, "z"], [need_tar_gz, tar_gz_file, "z"], [need_tar_bz2, tar_bz2_file, "j"] ].each do |(need, file, flag)| if need task :package => ["#{package_dir}/#{file}"] file "#{package_dir}/#{file}" => [package_dir_path] + package_files do chdir(package_dir) do sh %{#{@tar_command} #{flag}cvf #{file} #{package_name}} end end end end if need_zip task :package => ["#{package_dir}/#{zip_file}"] file "#{package_dir}/#{zip_file}" => [package_dir_path] + package_files do chdir(package_dir) do sh %{#{@zip_command} -r #{zip_file} #{package_name}} end end end directory package_dir file package_dir_path => @package_files do mkdir_p package_dir rescue nil @package_files.each do |fn| f = File.join(package_dir_path, fn) fdir = File.dirname(f) mkdir_p(fdir) if !File.exist?(fdir) if File.directory?(fn) mkdir_p(f) else rm_f f safe_ln(fn, f) end end end self end
Initialization that bypasses the “yield self” and “define” step.
# File rake/packagetask.rb, line 86 def init(name, version) @name = name @version = version @package_files = Rake::FileList.new @package_dir = 'pkg' @need_tar = false @need_tar_gz = false @need_tar_bz2 = false @need_zip = false @tar_command = 'tar' @zip_command = 'zip' end
# File rake/packagetask.rb, line 164 def package_dir_path "#{package_dir}/#{package_name}" end
# File rake/packagetask.rb, line 160 def package_name @version ? "#{@name}-#{@version}" : @name end
# File rake/packagetask.rb, line 176 def tar_bz2_file "#{package_name}.tar.bz2" end
# File rake/packagetask.rb, line 172 def tar_gz_file "#{package_name}.tar.gz" end