From 1970b1296d43274f39d82f0ba19d21d720e7829c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Rodr=C3=ADguez?= Date: Thu, 30 Sep 2021 15:52:05 +0200 Subject: [PATCH] Don't make duplicated checks on directory safety This seems to speed up `gem install` on Windows by more than 50%. --- lib/rubygems/package.rb | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/rubygems/package.rb b/lib/rubygems/package.rb index c4b29e4176de..71f82463f9d8 100644 --- a/lib/rubygems/package.rb +++ b/lib/rubygems/package.rb @@ -400,7 +400,7 @@ def extract_files(destination_dir, pattern = "*") # extracted. def extract_tar_gz(io, destination_dir, pattern = "*") # :nodoc: - directories = [] if dir_mode + directories = [] open_tar_gz io do |tar| tar.each do |entry| next unless File.fnmatch pattern, entry.full_name, File::FNM_DOTMATCH @@ -417,9 +417,11 @@ def extract_tar_gz(io, destination_dir, pattern = "*") # :nodoc: else File.dirname destination end - directories << mkdir if directories - mkdir_p_safe mkdir, mkdir_options, destination_dir, entry.full_name + unless directories.include?(mkdir) + mkdir_p_safe mkdir, mkdir_options, destination_dir, entry.full_name + directories << mkdir + end File.open destination, 'wb' do |out| out.write entry.read @@ -432,8 +434,7 @@ def extract_tar_gz(io, destination_dir, pattern = "*") # :nodoc: end end - if directories - directories.uniq! + if dir_mode File.chmod(dir_mode, *directories) end end