Bug #13843 ยป gem_resolver.patch
| lib/rubygems/resolver.rb | ||
|---|---|---|
| 
           exc.errors = @set.errors 
   | 
||
| 
           raise exc 
   | 
||
| 
         end 
   | 
||
| 
         possibles.sort_by { |s| [s.source, s.version, Gem::Platform.local =~ s.platform ? 1 : 0] }. 
   | 
||
| 
           map { |s| ActivationRequest.new s, dependency, [] } 
   | 
||
| 
         sources = [] 
   | 
||
| 
         groups = Hash.new { |hash, key| hash[key] = [] } 
   | 
||
| 
         # create groups & sources in the same loop 
   | 
||
| 
         sources = possibles.map { |spec| 
   | 
||
| 
           source = spec.source 
   | 
||
| 
           groups[source] << spec 
   | 
||
| 
           source 
   | 
||
| 
         }.uniq.reverse 
   | 
||
| 
         activation_requests = [] 
   | 
||
| 
         sources.each do |source| 
   | 
||
| 
           groups[source]. 
   | 
||
| 
             sort_by { |spec| [spec.version, Gem::Platform.local =~ spec.platform ? 1 : 0] }. 
   | 
||
| 
             map { |spec| ActivationRequest.new spec, dependency, [] }. 
   | 
||
| 
             each { |activation_request| activation_requests << activation_request } 
   | 
||
| 
         end 
   | 
||
| 
         activation_requests 
   | 
||
| 
       end 
   | 
||
| 
       def dependencies_for(specification) 
   | 
||
| test/rubygems/test_gem_resolver.rb | ||
|---|---|---|
| 
         assert_resolves_to [b1, c1, d2], r 
   | 
||
| 
       end 
   | 
||
| 
       def test_sorts_by_source_then_version 
   | 
||
| 
         sourceA = Gem::Source.new 'http://example.com/a' 
   | 
||
| 
         sourceB = Gem::Source.new 'http://example.com/b' 
   | 
||
| 
         sourceC = Gem::Source.new 'http://example.com/c' 
   | 
||
| 
         spec_A_1 = new_spec 'some-dep', '0.0.1' 
   | 
||
| 
         spec_A_2 = new_spec 'some-dep', '1.0.0' 
   | 
||
| 
         spec_B_1 = new_spec 'some-dep', '0.0.1' 
   | 
||
| 
         spec_B_2 = new_spec 'some-dep', '0.0.2' 
   | 
||
| 
         spec_C_1 = new_spec 'some-dep', '0.1.0' 
   | 
||
| 
         set = StaticSet.new [ 
   | 
||
| 
           Gem::Resolver::SpecSpecification.new(nil, spec_B_1, sourceB), 
   | 
||
| 
           Gem::Resolver::SpecSpecification.new(nil, spec_B_2, sourceB), 
   | 
||
| 
           Gem::Resolver::SpecSpecification.new(nil, spec_C_1, sourceC), 
   | 
||
| 
           Gem::Resolver::SpecSpecification.new(nil, spec_A_2, sourceA), 
   | 
||
| 
           Gem::Resolver::SpecSpecification.new(nil, spec_A_1, sourceA), 
   | 
||
| 
         ] 
   | 
||
| 
         dependency = make_dep 'some-dep', '> 0' 
   | 
||
| 
         resolver = Gem::Resolver.new [dependency], set 
   | 
||
| 
         assert_resolves_to [spec_B_2], resolver 
   | 
||
| 
       end 
   | 
||
| 
       def test_select_local_platforms 
   | 
||
| 
         r = Gem::Resolver.new nil, nil 
   | 
||