Method: Lyp::DependencyResolver#sort_permutations
- Defined in:
- lib/lyp/resolver.rb
#sort_permutations(permutations, user_deps) ⇒ Object
Sort permutations by version numbers
358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 |
# File 'lib/lyp/resolver.rb', line 358 def sort_permutations(permutations, user_deps) # Cache for versions converted to Gem::Version instances versions = {} map = lambda do |m, p| if p =~ Lyp::PACKAGE_RE m[$1] = versions[p] ||= (Lyp.version($2 || '0.0') rescue nil) end m end compare = lambda do |x, y| x_versions = x.inject({}, &map) y_versions = y.inject({}, &map) # If the dependency is direct (not transitive), just compare its versions. # Otherwise, add the result of comparison to score. x_versions.inject(0) do |score, kv| package = kv[0] cmp = kv[1] <=> y_versions[package] if user_deps.include?(package) && cmp != 0 return cmp else score += cmp unless cmp.nil? end score end end permutations.sort(&compare) end |