diff options
-rw-r--r-- | lib/bundler/source/git/git_proxy.rb | 5 | ||||
-rw-r--r-- | spec/bundler/commands/lock_spec.rb | 38 |
2 files changed, 43 insertions, 0 deletions
diff --git a/lib/bundler/source/git/git_proxy.rb b/lib/bundler/source/git/git_proxy.rb index 3a6a666627..926c9b8ead 100644 --- a/lib/bundler/source/git/git_proxy.rb +++ b/lib/bundler/source/git/git_proxy.rb @@ -366,6 +366,11 @@ module Bundler args += ["--single-branch"] args.unshift("--no-tags") if supports_cloning_with_no_tags? + # If there's a locked revision, no need to clone any specific branch + # or tag, since we will end up checking out that locked revision + # anyways. + return args if @revision + args += ["--branch", branch || tag] if branch || tag args end diff --git a/spec/bundler/commands/lock_spec.rb b/spec/bundler/commands/lock_spec.rb index f0c3537d2f..a148d6dd19 100644 --- a/spec/bundler/commands/lock_spec.rb +++ b/spec/bundler/commands/lock_spec.rb @@ -158,6 +158,44 @@ RSpec.describe "bundle lock" do expect(out).not_to include("re-resolving dependencies because the list of sources changed") end + it "updates specific gems using --update using the locked revision of unrelated git gems for resolving" do + ref = build_git("foo").ref_for("HEAD") + + gemfile <<-G + source "#{file_uri_for(gem_repo1)}" + gem "rake" + gem "foo", :git => "#{file_uri_for(lib_path("foo-1.0"))}", :branch => "deadbeef" + G + + lockfile <<~L + GIT + remote: #{file_uri_for(lib_path("foo-1.0"))} + revision: #{ref} + branch: deadbeef + specs: + foo (1.0) + + GEM + remote: #{file_uri_for(gem_repo1)}/ + specs: + rake (10.0.1) + + PLATFORMS + #{lockfile_platforms} + + DEPENDENCIES + foo! + rake + + BUNDLED WITH + #{Bundler::VERSION} + L + + bundle "lock --update rake --verbose" + expect(out).to match(/Writing lockfile to.+lock/) + expect(lockfile).to include("rake (13.0.1)") + end + it "errors when updating a missing specific gems using --update" do lockfile @lockfile |