Class: Rake::PackageTask
Overview
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
Constant Summary
Constants included from FileUtilsExt
Constants included from FileUtils
FileUtils::LN_SUPPORTED, FileUtils::RUBY
Instance Attribute Summary collapse
-
#name ⇒ Object
Name of the package (from the GEM Spec).
-
#need_tar ⇒ Object
True if a gzipped tar file (tgz) should be produced (default is false).
-
#need_tar_bz2 ⇒ Object
True if a bzip2'd tar file (tar.bz2) should be produced (default is false).
-
#need_tar_gz ⇒ Object
True if a gzipped tar file (tar.gz) should be produced (default is false).
-
#need_tar_xz ⇒ Object
True if a xz'd tar file (tar.xz) should be produced (default is false).
-
#need_zip ⇒ Object
True if a zip file should be produced (default is false).
-
#package_dir ⇒ Object
Directory used to store the package files (default is 'pkg').
-
#package_files ⇒ Object
List of files to be included in the package.
-
#tar_command ⇒ Object
Tar command for gzipped or bzip2ed archives.
-
#version ⇒ Object
Version of the package (e.g. '1.3.2').
-
#without_parent_dir ⇒ Object
True if parent directory should be omited (default is false).
-
#zip_command ⇒ Object
Zip command for zipped archives.
Instance Method Summary collapse
-
#define ⇒ Object
Create the tasks defined by this task library.
-
#init(name, version) ⇒ Object
Initialization that bypasses the “yield self” and “define” step.
-
#initialize(name = nil, version = nil) {|_self| ... } ⇒ PackageTask
constructor
Create a Package Task with the given name and version.
-
#package_dir_path ⇒ Object
The directory this package will be built in.
-
#package_name ⇒ Object
The name of this package.
-
#tar_bz2_file ⇒ Object
The package name with .tar.bz2 added.
-
#tar_gz_file ⇒ Object
The package name with .tar.gz added.
-
#tar_xz_file ⇒ Object
The package name with .tar.xz added.
-
#target_dir ⇒ Object
target directory relative to working_dir.
-
#tgz_file ⇒ Object
The package name with .tgz added.
- #working_dir ⇒ Object
-
#zip_file ⇒ Object
The package name with .zip added.
Methods included from FileUtilsExt
#nowrite, #rake_check_options, #rake_output_message, #verbose, #when_writing
Methods included from FileUtils
#ruby, #safe_ln, #sh, #split_all
Methods included from Cloneable
Constructor Details
#initialize(name = nil, version = nil) {|_self| ... } ⇒ PackageTask
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.
89 90 91 92 93 |
# File 'lib/rake/packagetask.rb', line 89 def initialize(name=nil, version=nil) init(name, version) yield self if block_given? define unless name.nil? end |
Instance Attribute Details
#name ⇒ Object
Name of the package (from the GEM Spec).
47 48 49 |
# File 'lib/rake/packagetask.rb', line 47 def name @name end |
#need_tar ⇒ Object
True if a gzipped tar file (tgz) should be produced (default is false).
57 58 59 |
# File 'lib/rake/packagetask.rb', line 57 def need_tar @need_tar end |
#need_tar_bz2 ⇒ Object
True if a bzip2'd tar file (tar.bz2) should be produced (default is false).
65 66 67 |
# File 'lib/rake/packagetask.rb', line 65 def need_tar_bz2 @need_tar_bz2 end |
#need_tar_gz ⇒ Object
True if a gzipped tar file (tar.gz) should be produced (default is false).
61 62 63 |
# File 'lib/rake/packagetask.rb', line 61 def need_tar_gz @need_tar_gz end |
#need_tar_xz ⇒ Object
True if a xz'd tar file (tar.xz) should be produced (default is false)
68 69 70 |
# File 'lib/rake/packagetask.rb', line 68 def need_tar_xz @need_tar_xz end |
#need_zip ⇒ Object
True if a zip file should be produced (default is false)
71 72 73 |
# File 'lib/rake/packagetask.rb', line 71 def need_zip @need_zip end |
#package_dir ⇒ Object
Directory used to store the package files (default is 'pkg').
53 54 55 |
# File 'lib/rake/packagetask.rb', line 53 def package_dir @package_dir end |
#package_files ⇒ Object
List of files to be included in the package.
74 75 76 |
# File 'lib/rake/packagetask.rb', line 74 def package_files @package_files end |
#tar_command ⇒ Object
Tar command for gzipped or bzip2ed archives. The default is 'tar'.
77 78 79 |
# File 'lib/rake/packagetask.rb', line 77 def tar_command @tar_command end |
#version ⇒ Object
Version of the package (e.g. '1.3.2').
50 51 52 |
# File 'lib/rake/packagetask.rb', line 50 def version @version end |
#without_parent_dir ⇒ Object
True if parent directory should be omited (default is false)
83 84 85 |
# File 'lib/rake/packagetask.rb', line 83 def without_parent_dir @without_parent_dir end |
#zip_command ⇒ Object
Zip command for zipped archives. The default is 'zip'.
80 81 82 |
# File 'lib/rake/packagetask.rb', line 80 def zip_command @zip_command end |
Instance Method Details
#define ⇒ Object
Create the tasks defined by this task library.
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
# File 'lib/rake/packagetask.rb', line 112 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"], [need_tar_xz, tar_xz_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(working_dir) { sh @tar_command, "#{flag}cvf", file, target_dir } mv "#{package_dir_path}/#{target_dir}", package_dir if without_parent_dir end end end if need_zip task package: ["#{package_dir}/#{zip_file}"] file "#{package_dir}/#{zip_file}" => [package_dir_path] + package_files do chdir(working_dir) { sh @zip_command, "-r", zip_file, target_dir } mv "#{package_dir_path}/#{zip_file}", package_dir if without_parent_dir 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 |
#init(name, version) ⇒ Object
Initialization that bypasses the “yield self” and “define” step.
96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/rake/packagetask.rb', line 96 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_tar_xz = false @need_zip = false @tar_command = "tar" @zip_command = "zip" @without_parent_dir = false end |
#package_dir_path ⇒ Object
The directory this package will be built in
178 179 180 |
# File 'lib/rake/packagetask.rb', line 178 def package_dir_path "#{package_dir}/#{package_name}" end |
#package_name ⇒ Object
The name of this package
172 173 174 |
# File 'lib/rake/packagetask.rb', line 172 def package_name @version ? "#{@name}-#{@version}" : @name end |
#tar_bz2_file ⇒ Object
The package name with .tar.bz2 added
196 197 198 |
# File 'lib/rake/packagetask.rb', line 196 def tar_bz2_file "#{package_name}.tar.bz2" end |
#tar_gz_file ⇒ Object
The package name with .tar.gz added
190 191 192 |
# File 'lib/rake/packagetask.rb', line 190 def tar_gz_file "#{package_name}.tar.gz" end |
#tar_xz_file ⇒ Object
The package name with .tar.xz added
202 203 204 |
# File 'lib/rake/packagetask.rb', line 202 def tar_xz_file "#{package_name}.tar.xz" end |
#target_dir ⇒ Object
target directory relative to working_dir
217 218 219 |
# File 'lib/rake/packagetask.rb', line 217 def target_dir without_parent_dir ? "." : package_name end |
#tgz_file ⇒ Object
The package name with .tgz added
184 185 186 |
# File 'lib/rake/packagetask.rb', line 184 def tgz_file "#{package_name}.tgz" end |
#working_dir ⇒ Object
212 213 214 |
# File 'lib/rake/packagetask.rb', line 212 def working_dir without_parent_dir ? package_dir_path : package_dir end |
#zip_file ⇒ Object
The package name with .zip added
208 209 210 |
# File 'lib/rake/packagetask.rb', line 208 def zip_file "#{package_name}.zip" end |