From fe493ea27e0105f7d63c69052530cd89c6f6914f Mon Sep 17 00:00:00 2001 From: Evan Phoenix Date: Tue, 31 May 2011 19:48:02 -0700 Subject: [PATCH] Don't consider local files in remote only mode. RG #26109 --- lib/rubygems/dependency_installer.rb | 33 ++++++++------- .../test_gem_commands_install_command.rb | 42 +++++++++++++++++++ 2 files changed, 60 insertions(+), 15 deletions(-) diff --git a/lib/rubygems/dependency_installer.rb b/lib/rubygems/dependency_installer.rb index 6303e8e9acb9..5ee755381cb5 100644 --- a/lib/rubygems/dependency_installer.rb +++ b/lib/rubygems/dependency_installer.rb @@ -202,23 +202,26 @@ def add_found_dependencies to_do, dependency_list def find_spec_by_name_and_version(gem_name, version = Gem::Requirement.default, prerelease = false) - spec_and_source = nil - - glob = if File::ALT_SEPARATOR then - gem_name.gsub File::ALT_SEPARATOR, File::SEPARATOR - else - gem_name - end - local_gems = Dir["#{glob}*"].sort.reverse + spec_and_source = nil - local_gems.each do |gem_file| - next unless gem_file =~ /gem$/ - begin - spec = Gem::Format.from_file_by_path(gem_file).spec - spec_and_source = [spec, gem_file] - break - rescue SystemCallError, Gem::Package::FormatError + if @domain != :remote + glob = if File::ALT_SEPARATOR then + gem_name.gsub File::ALT_SEPARATOR, File::SEPARATOR + else + gem_name + end + + local_gems = Dir["#{glob}*"].sort.reverse + + local_gems.each do |gem_file| + next unless gem_file =~ /gem$/ + begin + spec = Gem::Format.from_file_by_path(gem_file).spec + spec_and_source = [spec, gem_file] + break + rescue SystemCallError, Gem::Package::FormatError + end end end diff --git a/test/rubygems/test_gem_commands_install_command.rb b/test/rubygems/test_gem_commands_install_command.rb index bd61db5e4505..a4b0fe214fb3 100644 --- a/test/rubygems/test_gem_commands_install_command.rb +++ b/test/rubygems/test_gem_commands_install_command.rb @@ -256,6 +256,48 @@ def test_execute_remote assert out.empty?, out.inspect end + def test_execute_remote_ignores_files + util_setup_fake_fetcher + util_setup_spec_fetcher + + @cmd.options[:domain] = :remote + + FileUtils.mv @a2.cache_file, @tempdir + + @fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] = + read_binary(@a1.cache_file) + + @cmd.options[:args] = [@a2.name] + + gemdir = File.join @gemhome, 'specifications' + + a2_gemspec = File.join(gemdir, "a-2.gemspec") + a1_gemspec = File.join(gemdir, "a-1.gemspec") + + FileUtils.rm_rf a1_gemspec + FileUtils.rm_rf a2_gemspec + + start = Dir["#{gemdir}/*"] + + use_ui @ui do + Dir.chdir @tempdir do + e = assert_raises Gem::SystemExitException do + @cmd.execute + end + assert_equal 0, e.exit_code + end + end + + out = @ui.output.split "\n" + assert_equal "Successfully installed #{@a1.full_name}", out.shift + assert_equal "1 gem installed", out.shift + assert out.empty?, out.inspect + + fin = Dir["#{gemdir}/*"] + + assert_equal [a1_gemspec], fin - start + end + def test_execute_two util_setup_fake_fetcher @cmd.options[:domain] = :local