summaryrefslogtreecommitdiff
path: root/spec/bundler/support/rubygems_version_manager.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/bundler/support/rubygems_version_manager.rb')
-rw-r--r--spec/bundler/support/rubygems_version_manager.rb74
1 files changed, 25 insertions, 49 deletions
diff --git a/spec/bundler/support/rubygems_version_manager.rb b/spec/bundler/support/rubygems_version_manager.rb
index 356d391c08..854bce890d 100644
--- a/spec/bundler/support/rubygems_version_manager.rb
+++ b/spec/bundler/support/rubygems_version_manager.rb
@@ -8,27 +8,25 @@ class RubygemsVersionManager
include Spec::Helpers
include Spec::Path
- def initialize(env_version)
- @env_version = env_version
+ def initialize(source)
+ @source = source
end
def switch
return if use_system?
- unrequire_rubygems_if_needed
-
switch_local_copy_if_needed
- prepare_environment
+ reexec_if_needed
end
private
def use_system?
- @env_version.nil?
+ @source.nil?
end
- def unrequire_rubygems_if_needed
+ def reexec_if_needed
return unless rubygems_unrequire_needed?
require "rbconfig"
@@ -37,7 +35,8 @@ private
ruby << RbConfig::CONFIG["EXEEXT"]
cmd = [ruby, $0, *ARGV].compact
- cmd[1, 0] = "--disable-gems"
+
+ ENV["RUBYOPT"] = "-I#{local_copy_path.join("lib")} #{ENV["RUBYOPT"]}"
exec(ENV, *cmd)
end
@@ -47,35 +46,28 @@ private
Dir.chdir(local_copy_path) do
sys_exec!("git remote update")
- sys_exec!("git checkout #{target_tag_version} --quiet")
+ sys_exec!("git checkout #{target_tag} --quiet")
end
- end
- def prepare_environment
- $:.unshift File.expand_path("lib", local_copy_path)
+ ENV["RGV"] = local_copy_path.to_s
end
def rubygems_unrequire_needed?
- defined?(Gem::VERSION) && Gem::VERSION != target_gem_version
+ !$LOADED_FEATURES.include?(local_copy_path.join("lib/rubygems.rb").to_s)
end
def local_copy_switch_needed?
- !env_version_is_path? && target_gem_version != local_copy_version
- end
-
- def target_gem_version
- @target_gem_version ||= resolve_target_gem_version
+ !source_is_path? && target_tag != local_copy_tag
end
- def target_tag_version
- @target_tag_version ||= resolve_target_tag_version
+ def target_tag
+ @target_tag ||= resolve_target_tag
end
- def local_copy_version
- gemspec_contents = File.read(local_copy_path.join("lib/rubygems.rb"))
- version_regexp = /VERSION = ["'](.*)["']/
-
- version_regexp.match(gemspec_contents)[1]
+ def local_copy_tag
+ Dir.chdir(local_copy_path) do
+ sys_exec!("git rev-parse --abbrev-ref HEAD")
+ end
end
def local_copy_path
@@ -83,7 +75,7 @@ private
end
def resolve_local_copy_path
- return expanded_env_version if env_version_is_path?
+ return expanded_source if source_is_path?
rubygems_path = root.join("tmp/rubygems")
@@ -95,33 +87,17 @@ private
rubygems_path
end
- def env_version_is_path?
- expanded_env_version.directory?
+ def source_is_path?
+ expanded_source.directory?
end
- def expanded_env_version
- @expanded_env_version ||= Pathname.new(@env_version).expand_path(root)
+ def expanded_source
+ @expanded_source ||= Pathname.new(@source).expand_path(root)
end
- def resolve_target_tag_version
- return "v#{@env_version}" if @env_version.match(/^\d/)
-
- return "master" if @env_version == master_gem_version
-
- @env_version
- end
-
- def resolve_target_gem_version
- return local_copy_version if env_version_is_path?
-
- return @env_version[1..-1] if @env_version.match(/^v/)
-
- return master_gem_version if @env_version == "master"
-
- @env_version
- end
+ def resolve_target_tag
+ return "v#{@source}" if @source.match(/^\d/)
- def master_gem_version
- "3.1.0.pre1"
+ @source
end
end