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:
:package
Create all the requested package files.
:clobber_package
Delete all the package files. This target is automatically added to the main clobber target.
:repackage
Rebuild the package files from scratch, even if they are not out of date.
"package_dir/name-version.tgz"
Create a gzipped tar package (if need_tar is true).
"package_dir/name-version.tar.gz"
Create a gzipped tar package (if need_tar_gz is true).
"package_dir/name-version.tar.bz2"
Create a bzip2’d tar package (if need_tar_bz2 is true).
"package_dir/name-version.zip"
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 82
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 103
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_path => @package_files do
@package_files.each do |fn|
f = File.join(package_dir_path, fn)
fdir = File.dirname(f)
mkdir_p(fdir) unless 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 89
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
The directory this package will be built in
# File rake/packagetask.rb, line 170
def package_dir_path
"#{package_dir}/#{package_name}"
end
The name of this package
# File rake/packagetask.rb, line 164
def package_name
@version ? "#{@name}-#{@version}" : @name
end
The package name with .tar.bz2 added
# File rake/packagetask.rb, line 188
def tar_bz2_file
"#{package_name}.tar.bz2"
end
The package name with .tar.gz added
# File rake/packagetask.rb, line 182
def tar_gz_file
"#{package_name}.tar.gz"
end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.