Skip to content

Commit

Permalink
Remove spec dependency upon VersionKit
Browse files Browse the repository at this point in the history
Use RubyGems analogues instead
  • Loading branch information
segiddins committed Jan 21, 2017
1 parent 026c060 commit 4a97ff6
Show file tree
Hide file tree
Showing 9 changed files with 40 additions and 52 deletions.
1 change: 0 additions & 1 deletion Gemfile
Expand Up @@ -5,7 +5,6 @@ gemspec
group :development do
gem 'rspec'
gem 'kicker'
gem 'version_kit', :git => 'https://github.com/CocoaPods/VersionKit.git', :branch => 'master'

# Ruby 1.8.7 fixes
gem 'mime-types', '< 2.0'
Expand Down
10 changes: 1 addition & 9 deletions Gemfile.lock
@@ -1,10 +1,3 @@
GIT
remote: https://github.com/CocoaPods/VersionKit.git
revision: fa148992046c0a62db76778fe2ce914a6b3257c5
branch: master
specs:
version_kit (0.0.1)

PATH
remote: .
specs:
Expand Down Expand Up @@ -101,7 +94,6 @@ DEPENDENCIES
rake
rspec
rubocop
version_kit!

BUNDLED WITH
1.13.6
1.14.0
6 changes: 3 additions & 3 deletions spec/errors_spec.rb
Expand Up @@ -3,22 +3,22 @@

module Molinillo
describe NoSuchDependencyError do
let(:dependency) { VersionKit::Dependency.new('foo', '>= 1.0') }
let(:dependency) { Gem::Dependency.new('foo', '>= 1.0') }
let(:required_by) { [] }

subject { described_class.new(dependency, required_by) }

describe '#message' do
it 'says it is unable to find the spec' do
expect(subject.message).to eq('Unable to find a specification for `foo (>= 1.0.0)`')
expect(subject.message).to eq('Unable to find a specification for `foo (>= 1.0)`')
end

context 'when #required_by is not empty' do
let(:required_by) { %w(spec-1 spec-2) }

it 'includes the source names' do
expect(subject.message).to eq(
'Unable to find a specification for `foo (>= 1.0.0)` depended upon by `spec-1` and `spec-2`')
'Unable to find a specification for `foo (>= 1.0)` depended upon by `spec-1` and `spec-2`')
end
end
end
Expand Down
4 changes: 2 additions & 2 deletions spec/fuzz_spec.rb
Expand Up @@ -7,7 +7,7 @@
let(:dependencies) do
index.specs.keys.sample(Random.rand(5)).
map do |d|
VersionKit::Dependency.new(
Gem::Dependency.new(
d,
"#{CONSTRAINTS.sample} #{Random.rand(2)}.#{Random.rand(2)}"
)
Expand All @@ -22,7 +22,7 @@
def validate_dependency_graph_from(graph, dependency)
vertex = graph.vertex_named(dependency.name)
spec = vertex.payload
expect(dependency).to be_satisfied_by(spec.version)
expect(dependency.requirement).to be_satisfied_by(spec.version)
expect(spec.dependencies).to match_array(vertex.outgoing_edges.map(&:requirement))
spec.dependencies.each do |d|
validate_dependency_graph_from(graph, d)
Expand Down
42 changes: 21 additions & 21 deletions spec/resolver_spec.rb
Expand Up @@ -13,11 +13,11 @@ def initialize(fixture_path)
self.name = test_case['name']
self.index = TestIndex.from_fixture(test_case['index'] || 'awesome')
self.requested = test_case['requested'].map do |(name, reqs)|
VersionKit::Dependency.new name, reqs.split(',').map(&:chomp)
Gem::Dependency.new name, reqs.split(',').map(&:chomp)
end
add_dependencies_to_graph = lambda do |graph, parent, hash|
name = hash['name']
version = VersionKit::Version.new(hash['version'])
version = Gem::Version.new(hash['version'])
dependency = index.specs[name].find { |s| s.version == version }
node = if parent
graph.add_vertex(name, dependency).tap do |v|
Expand Down Expand Up @@ -91,18 +91,18 @@ def initialize(fixture_path)

it 'includes the source of a user-specified unsatisfied dependency' do
expect do
@resolver.resolve([VersionKit::Dependency.new('missing', '3.0')], DependencyGraph.new)
@resolver.resolve([Gem::Dependency.new('missing', '3.0')], DependencyGraph.new)
end.to raise_error(VersionConflict, /required by `user-specified dependency`/)
end

it 'can handle when allow_missing? returns true for the only requirement' do
dep = VersionKit::Dependency.new('missing', '3.0')
dep = Gem::Dependency.new('missing', '3.0')
allow(@resolver.specification_provider).to receive(:allow_missing?).with(dep).and_return(true)
expect(@resolver.resolve([dep], DependencyGraph.new).to_a).to be_empty
end

it 'can handle when allow_missing? returns true for a nested requirement' do
dep = VersionKit::Dependency.new('actionpack', '1.2.3')
dep = Gem::Dependency.new('actionpack', '1.2.3')
allow(@resolver.specification_provider).to receive(:allow_missing?).
with(have_attributes(:name => 'activesupport')).and_return(true)
allow(@resolver.specification_provider).to receive(:search_for).
Expand All @@ -117,7 +117,7 @@ def initialize(fixture_path)
index = BundlerIndex.from_fixture('rubygems-2016-09-11')
@resolver = described_class.new(index, TestUI.new)
demands = [
VersionKit::Dependency.new('chef', '~> 12.1.2'),
Gem::Dependency.new('chef', '~> 12.1.2'),
]

demands.each { |d| index.search_for(d) }
Expand Down Expand Up @@ -150,7 +150,7 @@ def initialize(fixture_path)
'rspec-support (3.5.0)',
'multi_json (1.12.1)',
'net-telnet (0.1.1)',
'sfl (2.2.0)',
'sfl (2.2)',
'ffi-yajl (1.4.0)',
'mixlib-authentication (1.4.1)',
'net-ssh-gateway (1.2.0)',
Expand All @@ -177,8 +177,8 @@ def initialize(fixture_path)
index = BundlerIndex.from_fixture('rubygems-2016-10-06')
@resolver = described_class.new(index, TestUI.new)
demands = [
VersionKit::Dependency.new('avro_turf', '0.6.2'),
VersionKit::Dependency.new('fog', '1.38.0'),
Gem::Dependency.new('avro_turf', '0.6.2'),
Gem::Dependency.new('fog', '1.38.0'),
]
demands.each { |d| index.search_for(d) }

Expand Down Expand Up @@ -238,13 +238,13 @@ def initialize(fixture_path)
index = BundlerIndex.from_fixture('rubygems-2016-11-05')
@resolver = described_class.new(index, TestUI.new)
demands = [
VersionKit::Dependency.new('github-pages', '>= 0'),
Gem::Dependency.new('github-pages', '>= 0'),
]
demands.each { |d| index.search_for(d) }

resolved = @resolver.resolve(demands, DependencyGraph.new)

expect(resolved.map(&:payload).map(&:to_s).sort).to include('github-pages (104.0.0)')
expect(resolved.map(&:payload).map(&:to_s).sort).to include('github-pages (104)')
end

it 'can resolve when swapping changes transitive dependencies' do
Expand All @@ -253,7 +253,7 @@ def index.sort_dependencies(dependencies, activated, conflicts)
dependencies.sort_by do |d|
[
activated.vertex_named(d.name).payload ? 0 : 1,
dependency_pre_release?(d) ? 0 : 1,
dependency_prerelease?(d) ? 0 : 1,
conflicts[d.name] ? 0 : 1,
search_for(d).count,
]
Expand All @@ -266,16 +266,16 @@ def index.requirement_satisfied_by?(requirement, activated, spec)
end
existing = existing_vertices.map(&:payload).compact.first
if existing
existing.version == spec.version && requirement.satisfied_by?(spec.version)
existing.version == spec.version && requirement.requirement.satisfied_by?(spec.version)
else
requirement.satisfied_by? spec.version
requirement.requirement.satisfied_by? spec.version
end
end

@resolver = described_class.new(index, TestUI.new)
demands = [
VersionKit::Dependency.new('RestKit', '~> 0.23.0'),
VersionKit::Dependency.new('RestKit', '<= 0.23.2'),
Gem::Dependency.new('RestKit', '~> 0.23.0'),
Gem::Dependency.new('RestKit', '<= 0.23.2'),
]

resolved = @resolver.resolve(demands, DependencyGraph.new)
Expand Down Expand Up @@ -314,8 +314,8 @@ def versions_of(dependency_name)
index = swap_child_with_successors_index.from_fixture('swap_child_with_successors')
@resolver = described_class.new(index, TestUI.new)
demands = [
VersionKit::Dependency.new('build-essential', '>= 0.0.0'),
VersionKit::Dependency.new('nginx', '>= 0.0.0'),
Gem::Dependency.new('build-essential', '>= 0.0.0'),
Gem::Dependency.new('nginx', '>= 0.0.0'),
]

resolved = @resolver.resolve(demands, DependencyGraph.new)
Expand Down Expand Up @@ -362,9 +362,9 @@ def index.sort_dependencies(dependencies, _activated, _conflicts)
end
@resolver = described_class.new(index, TestUI.new)
demands = [
VersionKit::Dependency.new('c', '= 1.0.0'),
VersionKit::Dependency.new('c', '>= 1.0.0'),
VersionKit::Dependency.new('z', '>= 1.0.0'),
Gem::Dependency.new('c', '= 1.0.0'),
Gem::Dependency.new('c', '>= 1.0.0'),
Gem::Dependency.new('z', '>= 1.0.0'),
]

resolved = @resolver.resolve(demands, DependencyGraph.new)
Expand Down
1 change: 0 additions & 1 deletion spec/spec_helper.rb
Expand Up @@ -29,7 +29,6 @@
$LOAD_PATH.unshift((ROOT + 'lib').to_s)
$LOAD_PATH.unshift((ROOT + 'spec').to_s)

require 'version_kit'
require 'molinillo'

require 'spec_helper/index'
Expand Down
20 changes: 9 additions & 11 deletions spec/spec_helper/index.rb
Expand Up @@ -25,19 +25,19 @@ def initialize(specs_by_name)
def requirement_satisfied_by?(requirement, _activated, spec)
case requirement
when TestSpecification
VersionKit::Dependency.new(requirement.name, requirement.version).satisfied_by?(spec.version)
when VersionKit::Dependency
requirement.satisfied_by?(spec.version)
requirement.version == spec.version
when Gem::Dependency
requirement.requirement.satisfied_by?(spec.version)
end
end

def search_for(dependency)
@search_for ||= {}
@search_for[dependency] ||= begin
pre_release = dependency_pre_release?(dependency)
prerelease = dependency_prerelease?(dependency)
Array(specs[dependency.name]).select do |spec|
(pre_release ? true : !spec.version.pre_release?) &&
dependency.satisfied_by?(spec.version)
(prerelease ? true : !spec.version.prerelease?) &&
dependency.requirement.satisfied_by?(spec.version)
end
end
@search_for[dependency].dup
Expand All @@ -55,7 +55,7 @@ def sort_dependencies(dependencies, activated, conflicts)
dependencies.sort_by do |d|
[
activated.vertex_named(d.name).payload ? 0 : 1,
dependency_pre_release?(d) ? 0 : 1,
dependency_prerelease?(d) ? 0 : 1,
conflicts[d.name] ? 0 : 1,
activated.vertex_named(d.name).payload ? 0 : search_for(d).count,
]
Expand All @@ -64,10 +64,8 @@ def sort_dependencies(dependencies, activated, conflicts)

private

def dependency_pre_release?(dependency)
dependency.requirement_list.requirements.any? do |r|
VersionKit::Version.new(r.reference_version).pre_release?
end
def dependency_prerelease?(dependency)
dependency.prerelease?
end
end

Expand Down
4 changes: 2 additions & 2 deletions spec/spec_helper/naive_resolver.rb
Expand Up @@ -15,9 +15,9 @@ def self.resolve(index, dependencies)
loop do
vertex = activated.find { |a| !a.requirements.empty? && a.payload.nil? }
break unless vertex
possibilities = possibilities_by_level[level] ||= index.search_for(VersionKit::Dependency.new(vertex.name, '>= 0.0.0-a'))
possibilities = possibilities_by_level[level] ||= index.search_for(Gem::Dependency.new(vertex.name, '>= 0.0.0-a'))
possibilities.select! do |spec|
vertex.requirements.all? { |r| r.satisfied_by?(spec.version) && (!spec.version.pre_release? || index.send(:dependency_pre_release?, r)) } &&
vertex.requirements.all? { |r| r.requirement.satisfied_by?(spec.version) && (!spec.version.prerelease? || index.send(:dependency_prerelease?, r)) } &&
spec.dependencies.all? { |d| v = activated.vertex_named(d.name); !v || !v.payload || d.satisfied_by?(v.payload.version) }
end
warn "level = #{level} possibilities = #{possibilities.map(&:to_s)} requirements = #{vertex.requirements.map(&:to_s)}"
Expand Down
4 changes: 2 additions & 2 deletions spec/spec_helper/specification.rb
Expand Up @@ -4,10 +4,10 @@ class TestSpecification
attr_accessor :name, :version, :dependencies
def initialize(hash)
self.name = hash['name']
self.version = VersionKit::Version.new(hash['version'])
self.version = Gem::Version.new(hash['version'])
self.dependencies = hash.fetch('dependencies') { Hash.new }.map do |(name, requirement)|
requirements = requirement.split(',').map(&:chomp)
VersionKit::Dependency.new(name, requirements)
Gem::Dependency.new(name, requirements)
end
end

Expand Down

0 comments on commit 4a97ff6

Please sign in to comment.