summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Grove <sean@fakecoolguys.com>2011-01-12 19:27:43 -0800
committerAndre Arko and Terence Lee <andre.arko+terence.lee@gmail.com>2011-03-15 17:46:59 -0700
commit48758f945d19628ce4b480080f120449395d9e5f (patch)
tree1c6d2aea12ceb250794066bdd233314458315e5f
parent814de81e878a029b6974956721094fe791ccddcd (diff)
downloadbundler-48758f945d19628ce4b480080f120449395d9e5f.tar.gz
As per issue #842, store a hash of Gemfile to avoid rerunning unnecessary resolve against locally available gems if Gemfile has not changed.
-rw-r--r--lib/bundler/definition.rb16
1 files changed, 12 insertions, 4 deletions
diff --git a/lib/bundler/definition.rb b/lib/bundler/definition.rb
index c96b30b6c5..674534ba63 100644
--- a/lib/bundler/definition.rb
+++ b/lib/bundler/definition.rb
@@ -151,16 +151,24 @@ module Bundler
source_requirements[dep.name] = dep.source.specs
end
- # Run a resolve against the locally available gems
- last_resolve.merge Resolver.resolve(expanded_dependencies, index, source_requirements, last_resolve)
- end
+ # Only run a resolve against the locally available gems if Gemfile has changed
+ # since the last resolve
+ return last_resolve unless gemfile_changed?
+
+ # If it's changed, update hash and rerun resolve
+ Bundler.settings[:gemfile_hash] = gemfile_hash
+ last_resolve.merge Resolver.resolve(expanded_dependencies, index, source_requirements, last_resolve) end
end
end
+ def gemfile_changed?
+ Digest::MD5.hexdigest(File.read(Bundler.default_gemfile)) == Bundler.settings[:gemfile_hash]
+ end
+
def index
@index ||= Index.build do |idx|
@sources.each do |s|
- idx.use s.specs(@dependencies)
+ idx.use s.specs
end
end
end