summaryrefslogtreecommitdiff
path: root/lib/bundler/definition.rb
diff options
context:
space:
mode:
authorSamuel Giddins <segiddins@segiddins.me>2018-02-03 13:12:57 -0800
committerSamuel Giddins <segiddins@segiddins.me>2018-02-03 13:12:57 -0800
commit40cb76eedadb43389103c7691b83432357eb33eb (patch)
tree1727a20191c969361c02362f8f741f63433bc6ed /lib/bundler/definition.rb
parentbf7d54818a49b07d2145aecff104fa866ff45d47 (diff)
downloadbundler-40cb76eedadb43389103c7691b83432357eb33eb.tar.gz
[Definition] Gracefully handle when the lockfile is missing specs needed to run on the current platform
Diffstat (limited to 'lib/bundler/definition.rb')
-rw-r--r--lib/bundler/definition.rb8
1 files changed, 6 insertions, 2 deletions
diff --git a/lib/bundler/definition.rb b/lib/bundler/definition.rb
index b30ae81623..0349af39f2 100644
--- a/lib/bundler/definition.rb
+++ b/lib/bundler/definition.rb
@@ -76,6 +76,7 @@ module Bundler
@lockfile_contents = String.new
@locked_bundler_version = nil
@locked_ruby_version = nil
+ @locked_specs_incomplete_for_platform = false
if lockfile && File.exist?(lockfile)
@lockfile_contents = Bundler.read_file(lockfile)
@@ -529,7 +530,7 @@ module Bundler
private :sources
def nothing_changed?
- !@source_changes && !@dependency_changes && !@new_platform && !@path_changes && !@local_changes
+ !@source_changes && !@dependency_changes && !@new_platform && !@path_changes && !@local_changes && !@locked_specs_incomplete_for_platform
end
def unlocking?
@@ -556,6 +557,7 @@ module Bundler
[@new_platform, "you added a new platform to your gemfile"],
[@path_changes, "the gemspecs for path gems changed"],
[@local_changes, "the gemspecs for git local gems changed"],
+ [@locked_specs_incomplete_for_platform, "the lockfile does not have all gems needed for the current platform"],
].select(&:first).map(&:last).join(", ")
end
@@ -802,7 +804,9 @@ module Bundler
end
resolve = SpecSet.new(converged)
- resolve = resolve.for(expand_dependencies(deps, true), @unlock[:gems], false, false, false)
+ expanded_deps = expand_dependencies(deps, true)
+ @locked_specs_incomplete_for_platform = !resolve.for(expanded_deps, @unlock[:gems], true, true)
+ resolve = resolve.for(expanded_deps, @unlock[:gems], false, false, false)
diff = nil
# Now, we unlock any sources that do not have anymore gems pinned to it