diff options
Diffstat (limited to 'extra/ruby/0001-Fix-installing-gem-from-file-without-dependencies.patch')
-rw-r--r-- | extra/ruby/0001-Fix-installing-gem-from-file-without-dependencies.patch | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/extra/ruby/0001-Fix-installing-gem-from-file-without-dependencies.patch b/extra/ruby/0001-Fix-installing-gem-from-file-without-dependencies.patch new file mode 100644 index 000000000..8fefb275d --- /dev/null +++ b/extra/ruby/0001-Fix-installing-gem-from-file-without-dependencies.patch @@ -0,0 +1,84 @@ +From f5bbf838c8b13369a61c6756355305388df5824f Mon Sep 17 00:00:00 2001 +From: Tim Moore <tmoore@incrementalism.net> +Date: Tue, 31 Dec 2013 17:39:45 +1100 +Subject: [PATCH] Fix installing gem from file without dependencies. + +Commit 9437ccc fixed the ability to install remote gems that was accidentally +broken by d97fba1, but in the process accidentally broke installing from local +files. + +This also changes the order to check for local first, to avoid unnecessary +network requests in the case where the gem is local. + +Closes #760. +--- + lib/rubygems/commands/install_command.rb | 20 ++++++++++++-------- + test/rubygems/test_gem_commands_install_command.rb | 14 ++++++++++++++ + 2 files changed, 26 insertions(+), 8 deletions(-) + +diff --git a/lib/rubygems/commands/install_command.rb b/lib/rubygems/commands/install_command.rb +index 4485eb1..8219eef 100644 +--- a/lib/rubygems/commands/install_command.rb ++++ b/lib/rubygems/commands/install_command.rb +@@ -228,7 +228,18 @@ to write the specification by hand. For example: + def install_gem_without_dependencies name, req # :nodoc: + gem = nil + +- if remote? then ++ if local? then ++ if name =~ /\.gem$/ and File.file? name then ++ source = Gem::Source::SpecificFile.new name ++ spec = source.spec ++ else ++ source = Gem::Source::Local.new ++ spec = source.find_gem name, req ++ end ++ gem = source.download spec if spec ++ end ++ ++ if remote? and not gem then + dependency = Gem::Dependency.new name, req + dependency.prerelease = options[:prerelease] + +@@ -236,13 +247,6 @@ to write the specification by hand. For example: + gem = fetcher.download_to_cache dependency + end + +- if local? and not gem then +- source = Gem::Source::Local.new +- spec = source.find_gem name, req +- +- gem = source.download spec +- end +- + inst = Gem::Installer.new gem, options + inst.install + +diff --git a/test/rubygems/test_gem_commands_install_command.rb b/test/rubygems/test_gem_commands_install_command.rb +index 76ea6b4..a5917c0 100644 +--- a/test/rubygems/test_gem_commands_install_command.rb ++++ b/test/rubygems/test_gem_commands_install_command.rb +@@ -560,6 +560,20 @@ ERROR: Possible alternatives: non_existent_with_hint + assert_equal %w[a-2], @cmd.installed_specs.map { |spec| spec.full_name } + end + ++ def test_install_gem_ignore_dependencies_specific_file ++ spec = quick_spec 'a', 2 ++ ++ util_build_gem spec ++ ++ FileUtils.mv spec.cache_file, @tempdir ++ ++ @cmd.options[:ignore_dependencies] = true ++ ++ @cmd.install_gem File.join(@tempdir, spec.file_name), nil ++ ++ assert_equal %w[a-2], @cmd.installed_specs.map { |spec| spec.full_name } ++ end ++ + def test_parses_requirement_from_gemname + spec_fetcher do |fetcher| + fetcher.gem 'a', 2 +-- +1.8.5.2 + |