Class: Vagrant::Action::General::Package
- Inherits:
-
Object
- Object
- Vagrant::Action::General::Package
- Includes:
- Util
- Defined in:
- lib/vagrant/action/general/package.rb
Overview
A general packaging (tar) middleware. Given the following options, it will do the right thing:
- package.output - The filename of the outputted package.
- package.include - An array of files to include in the package.
- package.directory - The directory which contains the contents to compress into the package.
This middleware always produces the final file in the current working directory (FileUtils.pwd)
Direct Known Subclasses
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#compress ⇒ Object
Compress the exported file into a package.
-
#copy_include_files ⇒ Object
This method copies the include files (passed in via command line) to the temporary directory so they are included in a sub-folder within the actual box.
-
#initialize(app, env) ⇒ Package
constructor
A new instance of Package.
- #recover(env) ⇒ Object
-
#tar_path ⇒ Object
Path to the final box output file.
Constructor Details
#initialize(app, env) ⇒ Package
Returns a new instance of Package.
20 21 22 23 24 25 |
# File 'lib/vagrant/action/general/package.rb', line 20 def initialize(app, env) @app = app env["package.files"] ||= {} env["package.output"] ||= env["global_config"].package.name end |
Instance Method Details
#call(env) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/vagrant/action/general/package.rb', line 27 def call(env) @env = env raise Errors::PackageOutputDirectory if File.directory?(tar_path) raise Errors::PackageOutputExists if File.exist?(tar_path) raise Errors::PackageRequiresDirectory if !env["package.directory"] || !File.directory?(env["package.directory"]) compress @app.call(env) end |
#compress ⇒ Object
Compress the exported file into a package
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/vagrant/action/general/package.rb', line 74 def compress @env[:ui].info I18n.t("vagrant.actions.general.package.compressing", :tar_path => tar_path) File.open(tar_path, Platform.) do |tar| Archive::Tar::Minitar::Output.open(tar) do |output| begin current_dir = FileUtils.pwd copy_include_files FileUtils.cd(@env["package.directory"]) Dir.glob(File.join(".", "**", "*")).each do |entry| Archive::Tar::Minitar.pack_file(entry, output) end ensure FileUtils.cd(current_dir) end end end end |
#copy_include_files ⇒ Object
This method copies the include files (passed in via command line) to the temporary directory so they are included in a sub-folder within the actual box
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/vagrant/action/general/package.rb', line 54 def copy_include_files include_directory = Pathname.new(@env["package.directory"]).join("include") @env["package.files"].each do |from, dest| # We place the file in the include directory to = include_directory.join(dest) @env[:ui].info I18n.t("vagrant.actions.general.package.packaging", :file => from) FileUtils.mkdir_p(to.parent) # Copy direcotry contents recursively. if File.directory?(from) FileUtils.cp_r(Dir.glob(from), to.parent) else FileUtils.cp(from, to) end end end |
#recover(env) ⇒ Object
40 41 42 43 44 45 46 47 48 49 |
# File 'lib/vagrant/action/general/package.rb', line 40 def recover(env) # There are certain exceptions that we don't delete the file for. ignore_exc = [Errors::PackageOutputDirectory, Errors::PackageOutputExists] ignore_exc.each do |exc| return if env["vagrant.error"].is_a?(exc) end # Cleanup any packaged files if the packaging failed at some point. File.delete(tar_path) if File.exist?(tar_path) end |
#tar_path ⇒ Object
Path to the final box output file
95 96 97 |
# File 'lib/vagrant/action/general/package.rb', line 95 def tar_path File.(@env["package.output"], FileUtils.pwd) end |