57 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
module Ark
 | 
						|
  class TarCommandBuilder
 | 
						|
    def unpack
 | 
						|
      "#{tar_binary} #{args} #{resource.release_file}#{strip_args}"
 | 
						|
    end
 | 
						|
 | 
						|
    def dump
 | 
						|
      "tar -mxf \"#{resource.release_file}\" -C \"#{resource.path}\""
 | 
						|
    end
 | 
						|
 | 
						|
    def cherry_pick
 | 
						|
      "#{tar_binary} #{args} #{resource.release_file} -C #{resource.path} #{resource.creates}#{strip_args}"
 | 
						|
    end
 | 
						|
 | 
						|
    def initialize(resource)
 | 
						|
      @resource = resource
 | 
						|
    end
 | 
						|
 | 
						|
    private
 | 
						|
 | 
						|
    attr_reader :resource
 | 
						|
 | 
						|
    def node
 | 
						|
      resource.run_context.node
 | 
						|
    end
 | 
						|
 | 
						|
    def tar_binary
 | 
						|
      @tar_binary ||= node['ark']['tar'] || case node['platform_family']
 | 
						|
                                            when 'mac_os_x', 'freebsd'
 | 
						|
                                              '/usr/bin/tar'
 | 
						|
                                            when 'smartos'
 | 
						|
                                              '/bin/gtar'
 | 
						|
                                            else
 | 
						|
                                              '/bin/tar'
 | 
						|
                                            end
 | 
						|
    end
 | 
						|
 | 
						|
    def args
 | 
						|
      case resource.extension
 | 
						|
      when /^(tar)$/         then 'xf'
 | 
						|
      when /^(tar.gz|tgz)$/  then 'xzf'
 | 
						|
      when /^(tar.bz2|tbz)$/ then 'xjf'
 | 
						|
      when /^(tar.xz|txz)$/  then 'xJf'
 | 
						|
      else raise unsupported_extension
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    def strip_args
 | 
						|
      resource.strip_components > 0 ? " --strip-components=#{resource.strip_components}" : ''
 | 
						|
    end
 | 
						|
 | 
						|
    def unsupported_extension
 | 
						|
      "Don't know how to expand #{resource.url} (extension: #{resource.extension})"
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |