Only merge extended attributes if required

This commit is contained in:
L. E. Segovia 2019-04-09 21:45:35 +00:00
parent e09d4336a9
commit c6894a23c1
No known key found for this signature in database
GPG Key ID: D5D1DC48B52B7AD5
3 changed files with 17 additions and 18 deletions

View File

@ -161,7 +161,7 @@ module Cask
def primary_container
@primary_container ||= begin
UnpackStrategy.detect(@downloaded_path, type: @cask.container&.type)
UnpackStrategy.detect(@downloaded_path, type: @cask.container&.type, merge_xattrs: true)
end
end
@ -179,7 +179,7 @@ module Cask
FileUtils.chmod_R "+rw", tmpdir/nested_container, force: true, verbose: verbose?
UnpackStrategy.detect(tmpdir/nested_container)
UnpackStrategy.detect(tmpdir/nested_container, merge_xattrs: true)
.extract_nestedly(to: @cask.staged_path, verbose: verbose?)
end
else

View File

@ -2,6 +2,16 @@ module UnpackStrategy
class Zip
prepend Module.new {
def extract_to_dir(unpack_dir, basename:, verbose:)
if merge_xattrs && contains_extended_attributes?(path)
# We use ditto directly, because dot_clean has issues if the __MACOSX
# folder has incorrect permissions.
# (Also, Homebrew's ZIP artifact automatically deletes this folder.)
return system_command! "ditto",
args: ["-x", "-k", path, unpack_dir],
verbose: verbose,
print_stderr: false
end
result = begin
super
rescue ErrorDuringExecution => e
@ -13,18 +23,6 @@ module UnpackStrategy
return
end
if contains_extended_attributes?(path)
# Merge ._ files back into extended attributes.
# We use ditto, because dot_clean has issues if the __MACOSX
# folder has incorrect permissions.
# (Also, Homebrew's ZIP artifact automatically deletes this folder.)
system_command! "ditto",
args: ["-x", "-k", path, unpack_dir],
verbose: verbose,
print_stderr: false
return
end
volumes = result.stderr.chomp
.split("\n")
.map { |l| l[/\A skipping: (.+) volume label\Z/, 1] }

View File

@ -88,7 +88,7 @@ module UnpackStrategy
strategies.find { |s| s.can_extract?(path) }
end
def self.detect(path, prioritise_extension: false, type: nil, ref_type: nil, ref: nil)
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?
@ -102,15 +102,16 @@ module UnpackStrategy
strategy ||= Uncompressed
strategy.new(path, ref_type: ref_type, ref: ref)
strategy.new(path, ref_type: ref_type, ref: ref, merge_xattrs: merge_xattrs)
end
attr_reader :path
attr_reader :path, :merge_xattrs
def initialize(path, ref_type: nil, ref: nil)
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
def extract(to: nil, basename: nil, verbose: false)