[ruby-core:80951] [Ruby trunk Bug#13510] Problems with dependency resolution - Molinillo algo

From: nobu@...
Date: 2017-05-01 08:03:39 UTC
List: ruby-core #80951
Issue #13510 has been updated by nobu (Nobuyoshi Nakada).

Description updated

The current rubygems does not provide support for multiple versions, or branches at installation time.
All dependencies are resolved at the gem building time, and gem files contain static values only.
Rubygems needs improvements.

----------------------------------------
Bug #13510: Problems with dependency resolution - Molinillo algo
https://bugs.ruby-lang.org/issues/13510#change-64617

* Author: sarangan12 (Sarangan Rajamanickam)
* Status: Third Party's Issue
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: ruby 2.0.0p648 (2015-12-16 revision 53162) [x86_64-darwin16.3.0]
* Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN
----------------------------------------
This is the gemspec defined for the azure ruby gem (https://github.com/Azure/azure-sdk-for-ruby/blob/asm/azure.gemspec#L39)

```ruby
  if RUBY_VERSION < "2.1.0"
    s.add_runtime_dependency('nokogiri',              '~> 1.6.0')
  else
    s.add_runtime_dependency('nokogiri',              '~> 1.7')
  end
```

Now, with ruby version 2.0.0, I get the following error:

```
ERROR:  Error installing azure:
	nokogiri requires Ruby version >= 2.1.0.
```

which should never happen because for ruby 2.0.0, the nokogiri version of 1.6.8.1 must be installed and not 1.7.1 (which needs Ruby version >= 2.1.0)

On debugging, I ended up with this code:  (in resolver.rb)

```ruby
 def resolve
    locking_dg = Molinillo::DependencyGraph.new
    puts locking_dg
    Molinillo::Resolver.new(self, self).resolve(@needed.map { |d| DependencyRequest.new d, nil }, locking_dg).tsort.map(&:payload).compact
  rescue Molinillo::VersionConflict => e    
    conflict = e.conflicts.values.first
    raise Gem::DependencyResolutionError, Conflict.new(conflict.requirement_trees.first.first, conflict.existing, conflict.requirement)
  ensure
    @output.close if defined?(@output) and !debug?
  end
```

The output of this module is:

```ruby
{
   :name=>"azure", 
   :number=>"0.7.9", 
   :platform=>"ruby",
   :dependencies=>[
       ["thor", "~> 0.19"], 
	["systemu", "~> 2.6"], 
	["nokogiri", "~> 1.7"], 
	["mime-types", "< 4.0, >= 1"], 
	["faraday_middleware", "~> 0.10"], 
	["faraday", "~> 0.9"], 
	["azure-core", "~> 0.1"], 
	["addressable", "~> 2.3"]
]
}
```

I am surprised at this return value. Why is this happening? The Molinillo algorithms reports incorrect version of nokogiri. 




-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread

Prev Next