summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDavid Rodríguez <deivid.rodriguez@riseup.net>2021-09-30 15:52:05 +0200
committergit <svn-admin@ruby-lang.org>2021-10-10 23:12:03 +0900
commit11720818f68181cee38590d8c69a9003393f2363 (patch)
tree21ac01337d8d0c0f56709df306c4b93435089a6e /lib
parentef352c58659eaecdcb1e5dc384de7dc1e1205a6c (diff)
[ruby/rubygems] Don't make duplicated checks on directory safety
This seems to speed up `gem install` on Windows by more than 50%. https://github.com/rubygems/rubygems/commit/1970b1296d
Diffstat (limited to 'lib')
-rw-r--r--lib/rubygems/package.rb11
1 files changed, 6 insertions, 5 deletions
diff --git a/lib/rubygems/package.rb b/lib/rubygems/package.rb
index c4b29e4176..71f82463f9 100644
--- a/lib/rubygems/package.rb
+++ b/lib/rubygems/package.rb
@@ -400,7 +400,7 @@ EOM
# 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 @@ EOM
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 @@ EOM
end
end
- if directories
- directories.uniq!
+ if dir_mode
File.chmod(dir_mode, *directories)
end
end