diff --git a/Library/Homebrew/extend/os/mac/unpack_strategy/zip.rb b/Library/Homebrew/extend/os/mac/unpack_strategy/zip.rb index b9c07431ce..65585d3cd0 100644 --- a/Library/Homebrew/extend/os/mac/unpack_strategy/zip.rb +++ b/Library/Homebrew/extend/os/mac/unpack_strategy/zip.rb @@ -15,47 +15,49 @@ module UnpackStrategy sig { override.params(unpack_dir: Pathname, basename: Pathname, verbose: T::Boolean).returns(T.untyped) } 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 + with_env(TZ: "UTC") do + 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 - T.let(super, T.nilable(SystemCommand::Result)) - rescue ErrorDuringExecution => e - raise unless e.stderr.include?("End-of-central-directory signature not found.") + result = begin + T.let(super, T.nilable(SystemCommand::Result)) + rescue ErrorDuringExecution => e + raise unless e.stderr.include?("End-of-central-directory signature not found.") - system_command! "ditto", - args: ["-x", "-k", path, unpack_dir], - verbose: verbose - nil - end + system_command! "ditto", + args: ["-x", "-k", path, unpack_dir], + verbose: verbose + nil + end - return if result.blank? + return if result.blank? - volumes = result.stderr.chomp - .split("\n") - .map { |l| l[/\A skipping: (.+) volume label\Z/, 1] } - .compact + volumes = result.stderr.chomp + .split("\n") + .map { |l| l[/\A skipping: (.+) volume label\Z/, 1] } + .compact - return if volumes.empty? + return if volumes.empty? - Dir.mktmpdir do |tmp_unpack_dir| - tmp_unpack_dir = Pathname(tmp_unpack_dir) + Dir.mktmpdir do |tmp_unpack_dir| + tmp_unpack_dir = Pathname(tmp_unpack_dir) - # `ditto` keeps Finder attributes intact and does not skip volume labels - # like `unzip` does, which can prevent disk images from being unzipped. - system_command! "ditto", - args: ["-x", "-k", path, tmp_unpack_dir], - verbose: verbose + # `ditto` keeps Finder attributes intact and does not skip volume labels + # like `unzip` does, which can prevent disk images from being unzipped. + system_command! "ditto", + args: ["-x", "-k", path, tmp_unpack_dir], + verbose: verbose - volumes.each do |volume| - FileUtils.mv tmp_unpack_dir/volume, unpack_dir/volume, verbose: verbose + volumes.each do |volume| + FileUtils.mv tmp_unpack_dir/volume, unpack_dir/volume, verbose: verbose + end end end end diff --git a/Library/Homebrew/unpack_strategy/zip.rb b/Library/Homebrew/unpack_strategy/zip.rb index 488a4dfc45..9f2174d1be 100644 --- a/Library/Homebrew/unpack_strategy/zip.rb +++ b/Library/Homebrew/unpack_strategy/zip.rb @@ -27,15 +27,17 @@ module UnpackStrategy .returns(SystemCommand::Result) } def extract_to_dir(unpack_dir, basename:, verbose:) - quiet_flags = verbose ? [] : ["-qq"] - result = system_command! "unzip", - args: [*quiet_flags, "-o", path, "-d", unpack_dir], - verbose: verbose, - print_stderr: false + with_env(TZ: "UTC") do + quiet_flags = verbose ? [] : ["-qq"] + result = system_command! "unzip", + args: [*quiet_flags, "-o", path, "-d", unpack_dir], + verbose: verbose, + print_stderr: false - FileUtils.rm_rf unpack_dir/"__MACOSX" + FileUtils.rm_rf unpack_dir/"__MACOSX" - result + result + end end end end