summaryrefslogtreecommitdiff
path: root/lib/bundler/resolver.rb
diff options
context:
space:
mode:
authorDov Murik <dov.murik@gmail.com>2014-10-20 13:29:36 -0400
committerAndre Arko <andre@arko.net>2014-10-20 19:58:23 -0700
commit6725c27bdd31c60f5d768360debc508912529f97 (patch)
treee77025f24c51b913cb1fa1ef3a7e6e5e6c8ad80b /lib/bundler/resolver.rb
parentf7723f8079a48c97f02c1902383b9a1685501d0f (diff)
downloadbundler-6725c27bdd31c60f5d768360debc508912529f97.tar.gz
Performance: lazily memoize expensive `prerelease?` values during resolve
Diffstat (limited to 'lib/bundler/resolver.rb')
-rw-r--r--lib/bundler/resolver.rb4
1 files changed, 2 insertions, 2 deletions
diff --git a/lib/bundler/resolver.rb b/lib/bundler/resolver.rb
index 6529228449..218a69969d 100644
--- a/lib/bundler/resolver.rb
+++ b/lib/bundler/resolver.rb
@@ -140,6 +140,7 @@ module Bundler
@index = index
@deps_for = {}
@missing_gems = Hash.new(0)
+ @prereleases_cache = Hash.new { |h,k| h[k] = k.prerelease? }
@source_requirements = source_requirements
@iteration_counter = 0
@started_at = Time.now
@@ -160,7 +161,6 @@ module Bundler
def start(reqs)
activated = {}
@gems_size = Hash[reqs.map { |r| [r, gems_size(r)] }]
- @prereleases = Set.new(reqs.select { |r| r.requirement.prerelease? })
resolve(reqs, activated)
end
@@ -265,7 +265,7 @@ module Bundler
reqs = reqs.sort_by do |a|
[ activated[a.name] ? 0 : 1,
- @prereleases.include?(a) ? 0 : 1,
+ @prereleases_cache[a.requirement] ? 0 : 1,
@errors[a.name] ? 0 : 1,
activated[a.name] ? 0 : @gems_size[a] ]
end