Sha256: 1a93da3c109ec13303dba680d9f1e3f6cc0accfcf7962d2041fe4156c5b6e3f6

Contents?: true

Size: 1.7 KB

Versions: 7

Compression:

Stored size: 1.7 KB

Contents

require 'pathname'
require 'tmpdir'

module Puppet::ModuleTool
  module Applications
    class Unpacker < Application

      def initialize(filename, options = {})
        @filename = Pathname.new(filename)
        parsed = parse_filename(filename)
        @module_name = parsed[:module_name]
        super(options)
        @module_dir = Pathname.new(options[:target_dir]) + parsed[:dir_name]
      end

      def run
        extract_module_to_install_dir

        # Return the Pathname object representing the directory where the
        # module release archive was unpacked the to, and the module release
        # name.
        @module_dir
      end

      # Obtain a suitable temporary path for building and unpacking tarballs
      #
      # @return [Pathname] path to temporary build location
      def build_dir
        Puppet::Forge::Cache.base_path + "tmp-unpacker-#{Digest::SHA1.hexdigest(@filename.basename.to_s)}"
      end

      private

      def extract_module_to_install_dir
        delete_existing_installation_or_abort!

        build_dir.mkpath
        begin
          begin
            Puppet::ModuleTool::Tar.instance(@module_name).unpack(@filename.to_s, build_dir.to_s)
          rescue Puppet::ExecutionFailure => e
            raise RuntimeError, "Could not extract contents of module archive: #{e.message}"
          end

          # grab the first directory
          extracted = build_dir.children.detect { |c| c.directory? }
          FileUtils.mv extracted, @module_dir
        ensure
          build_dir.rmtree
        end
      end

      def delete_existing_installation_or_abort!
        return unless @module_dir.exist?
        FileUtils.rm_rf(@module_dir, :secure => true)
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
puppet-3.2.3 lib/puppet/module_tool/applications/unpacker.rb
puppet-3.2.3.rc1 lib/puppet/module_tool/applications/unpacker.rb
puppet-3.2.2 lib/puppet/module_tool/applications/unpacker.rb
puppet-3.2.1 lib/puppet/module_tool/applications/unpacker.rb
puppet-3.2.1.rc1 lib/puppet/module_tool/applications/unpacker.rb
puppet-3.2.0.rc2 lib/puppet/module_tool/applications/unpacker.rb
puppet-3.2.0.rc1 lib/puppet/module_tool/applications/unpacker.rb