summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/bundler/resolver.rb13
-rw-r--r--spec/bundler/commands/install_spec.rb20
2 files changed, 31 insertions, 2 deletions
diff --git a/lib/bundler/resolver.rb b/lib/bundler/resolver.rb
index 56a6c7ac67..ce51056904 100644
--- a/lib/bundler/resolver.rb
+++ b/lib/bundler/resolver.rb
@@ -389,9 +389,18 @@ module Bundler
end
def filter_remote_specs(specs, package)
- return specs unless package.prefer_local?
+ if package.prefer_local?
+ local_specs = specs.select {|s| s.is_a?(StubSpecification) }
- specs.select {|s| s.is_a?(StubSpecification) }
+ if local_specs.empty?
+ package.consider_remote_versions!
+ specs
+ else
+ local_specs
+ end
+ else
+ specs
+ end
end
# Ignore versions that depend on themselves incorrectly
diff --git a/spec/bundler/commands/install_spec.rb b/spec/bundler/commands/install_spec.rb
index 92c8f52195..f2c1781418 100644
--- a/spec/bundler/commands/install_spec.rb
+++ b/spec/bundler/commands/install_spec.rb
@@ -1606,6 +1606,26 @@ RSpec.describe "bundle install with gem sources" do
expect(out).to include("Fetching foo 1.0.1").and include("Installing foo 1.0.1").and include("Fetching b 1.0.0").and include("Installing b 1.0.0")
expect(last_command).to be_success
end
+
+ it "resolves to the latest version if no gems are available locally" do
+ build_repo4 do
+ build_gem "myreline", "0.3.8"
+ build_gem "debug", "0.2.1"
+
+ build_gem "debug", "1.10.0" do |s|
+ s.add_dependency "myreline"
+ end
+ end
+
+ install_gemfile <<~G, "prefer-local": true, verbose: true
+ source "https://gem.repo4"
+
+ gem "debug"
+ G
+
+ expect(out).to include("Fetching debug 1.10.0").and include("Installing debug 1.10.0").and include("Fetching myreline 0.3.8").and include("Installing myreline 0.3.8")
+ expect(last_command).to be_success
+ end
end
context "with a symlinked configured as bundle path and a gem with symlinks" do