summaryrefslogtreecommitdiff
path: root/extra/ruby/0001-Fix-installing-gem-from-file-without-dependencies.patch
diff options
context:
space:
mode:
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.patch84
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
+