Module: UnpackStrategy Private

Included in:
Air, Bzip2, Cab, Directory, Dmg, Fossil, GenericUnar, Gzip, Lha, Lzip, Lzma, P7Zip, Pax, Rar, Tar, Uncompressed, Xar, Xz, Zip
Defined in:
Library/Homebrew/unpack_strategy.rb,
Library/Homebrew/unpack_strategy/xz.rb,
Library/Homebrew/unpack_strategy/air.rb,
Library/Homebrew/unpack_strategy/cab.rb,
Library/Homebrew/unpack_strategy/cvs.rb,
Library/Homebrew/unpack_strategy/dmg.rb,
Library/Homebrew/unpack_strategy/git.rb,
Library/Homebrew/unpack_strategy/jar.rb,
Library/Homebrew/unpack_strategy/lha.rb,
Library/Homebrew/unpack_strategy/otf.rb,
Library/Homebrew/unpack_strategy/pax.rb,
Library/Homebrew/unpack_strategy/pkg.rb,
Library/Homebrew/unpack_strategy/rar.rb,
Library/Homebrew/unpack_strategy/sit.rb,
Library/Homebrew/unpack_strategy/tar.rb,
Library/Homebrew/unpack_strategy/ttf.rb,
Library/Homebrew/unpack_strategy/xar.rb,
Library/Homebrew/unpack_strategy/zip.rb,
Library/Homebrew/unpack_strategy/gzip.rb,
Library/Homebrew/unpack_strategy/lzip.rb,
Library/Homebrew/unpack_strategy/lzma.rb,
Library/Homebrew/unpack_strategy/bzip2.rb,
Library/Homebrew/unpack_strategy/p7zip.rb,
Library/Homebrew/unpack_strategy/bazaar.rb,
Library/Homebrew/unpack_strategy/fossil.rb,
Library/Homebrew/unpack_strategy/compress.rb,
Library/Homebrew/unpack_strategy/lua_rock.rb,
Library/Homebrew/unpack_strategy/directory.rb,
Library/Homebrew/unpack_strategy/mercurial.rb,
Library/Homebrew/unpack_strategy/executable.rb,
Library/Homebrew/unpack_strategy/subversion.rb,
Library/Homebrew/unpack_strategy/generic_unar.rb,
Library/Homebrew/unpack_strategy/uncompressed.rb,
Library/Homebrew/extend/os/mac/unpack_strategy/zip.rb,
Library/Homebrew/unpack_strategy/microsoft_office_xml.rb,
Library/Homebrew/unpack_strategy/self_extracting_executable.rb

Overview

This module is part of a private API. You should avoid using this module if possible, as it may be removed or be changed in the future.

Module containing all available strategies for unpacking archives.

Defined Under Namespace

Classes: Air, Bazaar, Bzip2, Cab, Compress, Cvs, Directory, Dmg, Executable, Fossil, GenericUnar, Git, Gzip, Jar, Lha, LuaRock, Lzip, Lzma, Mercurial, MicrosoftOfficeXml, Otf, P7Zip, Pax, Pkg, Rar, SelfExtractingExecutable, Sit, Subversion, Tar, Ttf, Uncompressed, Xar, Xz, Zip

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#merge_xattrsObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.


114
115
116
# File 'Library/Homebrew/unpack_strategy.rb', line 114

def merge_xattrs
  @merge_xattrs
end

#pathObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.


114
115
116
# File 'Library/Homebrew/unpack_strategy.rb', line 114

def path
  @path
end

Class Method Details

.detect(path, prioritise_extension: false, type: nil, ref_type: nil, ref: nil, merge_xattrs: nil) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.


97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'Library/Homebrew/unpack_strategy.rb', line 97

def self.detect(path, prioritise_extension: false, type: nil, ref_type: nil, ref: nil, merge_xattrs: nil)
  strategy = from_type(type) if type

  if prioritise_extension && path.extname.present?
    strategy ||= from_extension(path.extname)
    strategy ||= strategies.select { |s| s < Directory || s == Fossil }
                           .find { |s| s.can_extract?(path) }
  else
    strategy ||= from_magic(path)
    strategy ||= from_extension(path.extname)
  end

  strategy ||= Uncompressed

  strategy.new(path, ref_type: ref_type, ref: ref, merge_xattrs: merge_xattrs)
end

.from_extension(extension) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.


87
88
89
90
91
# File 'Library/Homebrew/unpack_strategy.rb', line 87

def self.from_extension(extension)
  strategies.sort_by { |s| s.extensions.map(&:length).max || 0 }
            .reverse
            .find { |s| s.extensions.any? { |ext| extension.end_with?(ext) } }
end

.from_magic(path) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.


93
94
95
# File 'Library/Homebrew/unpack_strategy.rb', line 93

def self.from_magic(path)
  strategies.find { |s| s.can_extract?(path) }
end

.from_type(type) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.


73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'Library/Homebrew/unpack_strategy.rb', line 73

def self.from_type(type)
  type = {
    naked:     :uncompressed,
    nounzip:   :uncompressed,
    seven_zip: :p7zip,
  }.fetch(type, type)

  begin
    const_get(type.to_s.split("_").map(&:capitalize).join.gsub(/\d+[a-z]/, &:upcase))
  rescue NameError
    nil
  end
end

Instance Method Details

#dependenciesObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.


153
154
155
# File 'Library/Homebrew/unpack_strategy.rb', line 153

def dependencies
  []
end

#extract(to: nil, basename: nil, verbose: false) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.


123
124
125
126
127
128
# File 'Library/Homebrew/unpack_strategy.rb', line 123

def extract(to: nil, basename: nil, verbose: false)
  basename ||= path.basename
  unpack_dir = Pathname(to || Dir.pwd).expand_path
  unpack_dir.mkpath
  extract_to_dir(unpack_dir, basename: basename, verbose: verbose)
end

#extract_nestedly(to: nil, basename: nil, verbose: false, prioritise_extension: false) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.


130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# File 'Library/Homebrew/unpack_strategy.rb', line 130

def extract_nestedly(to: nil, basename: nil, verbose: false, prioritise_extension: false)
  Dir.mktmpdir do |tmp_unpack_dir|
    tmp_unpack_dir = Pathname(tmp_unpack_dir)

    extract(to: tmp_unpack_dir, basename: basename, verbose: verbose)

    children = tmp_unpack_dir.children

    if children.count == 1 && !children.first.directory?
      FileUtils.chmod "+rw", children.first, verbose: verbose

      s = UnpackStrategy.detect(children.first, prioritise_extension: prioritise_extension)

      s.extract_nestedly(to: to, verbose: verbose, prioritise_extension: prioritise_extension)
      next
    end

    Directory.new(tmp_unpack_dir).extract(to: to, verbose: verbose)

    FileUtils.chmod_R "+w", tmp_unpack_dir, force: true, verbose: verbose
  end
end

#initialize(path, ref_type: nil, ref: nil, merge_xattrs: nil) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.


116
117
118
119
120
121
# File 'Library/Homebrew/unpack_strategy.rb', line 116

def initialize(path, ref_type: nil, ref: nil, merge_xattrs: nil)
  @path = Pathname(path).expand_path
  @ref_type = ref_type
  @ref = ref
  @merge_xattrs = merge_xattrs
end