summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMasataka Pocke Kuwabara <kuwabara@pocke.me>2021-10-03 01:30:55 +0900
committerHiroshi SHIBATA <hsbt@ruby-lang.org>2021-10-09 08:04:08 +0900
commitd03d122ba1851156c93ea21a9006a7d921ad073e (patch)
treedbb58bee14392eb71c1341d45af7d90bfcf7b127
parentad92651d6428d59b7f4dbee7014f4d1127bbdbe8 (diff)
[rubygems/rubygems] Improve performance of Specification#missing_extensions?
https://github.com/rubygems/rubygems/commit/90c1919f94
-rw-r--r--lib/rubygems/defaults.rb2
-rw-r--r--lib/rubygems/specification.rb4
-rw-r--r--spec/bundler/support/hax.rb5
-rw-r--r--test/rubygems/helper.rb2
4 files changed, 9 insertions, 4 deletions
diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb
index f29104a1b7..39b69ddb1c 100644
--- a/lib/rubygems/defaults.rb
+++ b/lib/rubygems/defaults.rb
@@ -59,7 +59,7 @@ module Gem
# Path to specification files of default gems.
def self.default_specifications_dir
- File.join(Gem.default_dir, "specifications", "default")
+ @default_specifications_dir ||= File.join(Gem.default_dir, "specifications", "default")
end
##
diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb
index 7ed963430f..bafc5e2619 100644
--- a/lib/rubygems/specification.rb
+++ b/lib/rubygems/specification.rb
@@ -1556,8 +1556,8 @@ class Gem::Specification < Gem::BasicSpecification
# the gem.build_complete file is missing.
def build_extensions # :nodoc:
- return if default_gem?
return if extensions.empty?
+ return if default_gem?
return if File.exist? gem_build_complete_path
return if !File.writable?(base_dir)
return if !File.exist?(File.join(base_dir, 'extensions'))
@@ -2120,8 +2120,8 @@ class Gem::Specification < Gem::BasicSpecification
# probably want to build_extensions
def missing_extensions?
- return false if default_gem?
return false if extensions.empty?
+ return false if default_gem?
return false if File.exist? gem_build_complete_path
true
diff --git a/spec/bundler/support/hax.rb b/spec/bundler/support/hax.rb
index aaf8c74894..0ad5239128 100644
--- a/spec/bundler/support/hax.rb
+++ b/spec/bundler/support/hax.rb
@@ -9,7 +9,10 @@ module Gem
Gem.ruby = ENV["RUBY"]
end
- @default_dir = ENV["BUNDLER_GEM_DEFAULT_DIR"] if ENV["BUNDLER_GEM_DEFAULT_DIR"]
+ if ENV["BUNDLER_GEM_DEFAULT_DIR"]
+ @default_dir = ENV["BUNDLER_GEM_DEFAULT_DIR"]
+ @default_specifications_dir = nil
+ end
if ENV["BUNDLER_SPEC_PLATFORM"]
class Platform
diff --git a/test/rubygems/helper.rb b/test/rubygems/helper.rb
index 812142f7d2..320f97e6c3 100644
--- a/test/rubygems/helper.rb
+++ b/test/rubygems/helper.rb
@@ -396,6 +396,7 @@ class Gem::TestCase < Test::Unit::TestCase
ENV['GEM_PRIVATE_KEY_PASSPHRASE'] = PRIVATE_KEY_PASSPHRASE
+ Gem.instance_variable_set(:@default_specifications_dir, nil)
if Gem.java_platform?
@orig_default_gem_home = RbConfig::CONFIG['default_gem_home']
RbConfig::CONFIG['default_gem_home'] = @gemhome
@@ -479,6 +480,7 @@ class Gem::TestCase < Test::Unit::TestCase
RbConfig::CONFIG['bindir'] = @orig_bindir
+ Gem.instance_variable_set :@default_specifications_dir, nil
if Gem.java_platform?
RbConfig::CONFIG['default_gem_home'] = @orig_default_gem_home
else