pub_grub 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 90903e9ac8d79a7f74af0ef80ad36f53bd485e3c359369a861b609426b3146a9
4
- data.tar.gz: 6d3e1d1f6989e4b22825eeed08bfd8476b138efd0d436ea2ab707391a2e759c3
3
+ metadata.gz: 5b0b0a89dd31b84300d59b3a6d5b051136d0658cb7046d49412b6ad4518eeb30
4
+ data.tar.gz: dabfb9a2e6b1d00657f41933b89b48909ce61683de37ca62601abfdaad0cc89c
5
5
  SHA512:
6
- metadata.gz: 10d228e102328e2d112c79eaebd50b35e77667b290986ef36685081eb517101f68f741b489accbab9a46e8f5628b757924b57faf265d7a3913c38333eabb0088
7
- data.tar.gz: 90dcf1cfe0921f95cef532d92affe813ac30bbef2c57e736cc706d55265a2fb4f42a6e4e0886c0b667c8d0f4f7a3e7f4f73c858436ff0c01295648479937632b
6
+ metadata.gz: 35b94b554e04473d65c9e81d6036b1dd76025901b86b2c06a2551e7b116e94b8da3e8a91dcbb9308f03b645eed32f2dac8d51ab484a6e34e5a360a62e382a459
7
+ data.tar.gz: 4b38762754fc5226f034d5659ee62ac46ff22107038ac421d2823f3d2a54f146586ee0c6f321c1e3618b07fe3565130827bfc0fd94b355bb537a4108dc23e0c4
data/.gitmodules ADDED
@@ -0,0 +1,3 @@
1
+ [submodule "test/molinillo_integration_specs"]
2
+ path = test/fixtures/molinillo_integration_specs
3
+ url = https://github.com/CocoaPods/Resolver-Integration-Specs
data/.travis.yml CHANGED
@@ -4,4 +4,5 @@ rvm:
4
4
  - 2.3
5
5
  - 2.4
6
6
  - 2.5
7
+ - 2.6
7
8
  before_install: gem install bundler -v 1.16.1
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- pub_grub (0.4.1)
4
+ pub_grub (0.4.2)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/bin/console CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  require "bundler/setup"
4
4
  require "pub_grub"
5
+ require "pub_grub/rubygems"
5
6
 
6
7
  source =
7
8
  PubGrub::StaticPackageSource.new do |s|
@@ -11,11 +12,11 @@ source =
11
12
 
12
13
  s.add "bar", "2.0.0"
13
14
  s.add "bar", "1.0.0"
14
- end
15
15
 
16
- foo = source.get_package("foo")
17
- bar = source.get_package("bar")
16
+ s.root deps: { "foo" => ">= 0" }
17
+ end
18
18
 
19
+ root = PubGrub::Package.root
19
20
  solver = PubGrub::VersionSolver.new(source: source)
20
21
 
21
22
  require 'irb'
@@ -79,6 +79,16 @@ module PubGrub
79
79
  dependencies_for(@root_package, @root_version)
80
80
  end
81
81
 
82
+ # Override me (maybe)
83
+ #
84
+ # If not overridden, the order returned by all_versions_for will be used
85
+ #
86
+ # Returns: Array of versions in preferred order
87
+ def sort_versions_by_preferred(package, sorted_versions)
88
+ indexes = @version_indexes[package]
89
+ sorted_versions.sort_by { |version| indexes[version] }
90
+ end
91
+
82
92
  def initialize
83
93
  @root_package = Package.root
84
94
  @root_version = Package.root_version
@@ -91,6 +101,7 @@ module PubGrub
91
101
  end
92
102
  end
93
103
  @sorted_versions = Hash.new { |h,k| h[k] = @cached_versions[k].sort }
104
+ @version_indexes = Hash.new { |h,k| h[k] = @cached_versions[k].each.with_index.to_h }
94
105
 
95
106
  @cached_dependencies = Hash.new do |packages, package|
96
107
  if package == @root_package
@@ -106,9 +117,8 @@ module PubGrub
106
117
  end
107
118
 
108
119
  def versions_for(package, range=VersionRange.any)
109
- @cached_versions[package].select do |version|
110
- range.include?(version)
111
- end
120
+ versions = range.select_versions(@sorted_versions[package])
121
+ sort_versions_by_preferred(package, versions)
112
122
  end
113
123
 
114
124
  def incompatibilities_for(package, version)
@@ -1,5 +1,3 @@
1
- require 'rubygems/requirement'
2
-
3
1
  module PubGrub
4
2
  module RubyGems
5
3
  extend self
@@ -8,16 +6,12 @@ module PubGrub
8
6
  ranges = requirement.requirements.map do |(op, ver)|
9
7
  case op
10
8
  when "~>"
11
- # TODO: not sure this is correct for prereleases
12
- VersionRange.new(min: ver, max: ver.bump, include_min: true)
9
+ bump = ver.class.new(ver.bump.to_s + ".A")
10
+ VersionRange.new(min: ver, max: bump, include_min: true)
13
11
  when ">"
14
12
  VersionRange.new(min: ver)
15
13
  when ">="
16
- if ver == Gem::Version.new("0")
17
- VersionRange.any
18
- else
19
- VersionRange.new(min: ver, include_min: true)
20
- end
14
+ VersionRange.new(min: ver, include_min: true)
21
15
  when "<"
22
16
  VersionRange.new(max: ver)
23
17
  when "<="
data/lib/pub_grub/term.rb CHANGED
@@ -26,9 +26,6 @@ module PubGrub
26
26
  def intersect(other)
27
27
  raise ArgumentError, "packages must match" if package != other.package
28
28
 
29
- return self if relation(other) == :subset
30
- return other if other.relation(self) == :subset
31
-
32
29
  if positive? && other.positive?
33
30
  self.class.new(constraint.intersect(other.constraint), true)
34
31
  elsif negative? && other.negative?
@@ -75,6 +75,10 @@ module PubGrub
75
75
  end
76
76
  end
77
77
 
78
+ def ranges
79
+ [self]
80
+ end
81
+
78
82
  def include?(version)
79
83
  compare_version(version) == 0
80
84
  end
@@ -315,7 +319,7 @@ module PubGrub
315
319
  return ["#{min}"] if min == max
316
320
 
317
321
  # FIXME: remove this
318
- if min && max && include_min && !include_max && min.respond_to?(:bump) && min.bump == max
322
+ if min && max && include_min && !include_max && min.respond_to?(:bump) && (min.bump.to_s + ".A") == max.to_s
319
323
  return ["~> #{min}"]
320
324
  end
321
325
 
@@ -39,6 +39,7 @@ module PubGrub
39
39
  if solved?
40
40
  logger.info { "Solution found after #{solution.attempted_solutions} attempts:" }
41
41
  solution.decisions.each do |package, version|
42
+ next if package == Package.root
42
43
  logger.info { "* #{package} #{version}" }
43
44
  end
44
45
 
@@ -6,11 +6,7 @@ module PubGrub
6
6
 
7
7
  def self.normalize_ranges(ranges)
8
8
  ranges = ranges.flat_map do |range|
9
- if range.is_a?(VersionUnion)
10
- range.ranges
11
- else
12
- [range]
13
- end
9
+ range.ranges
14
10
  end
15
11
 
16
12
  ranges.reject!(&:empty?)
@@ -31,8 +27,8 @@ module PubGrub
31
27
  ranges
32
28
  end
33
29
 
34
- def self.union(ranges)
35
- ranges = normalize_ranges(ranges)
30
+ def self.union(ranges, normalize: true)
31
+ ranges = normalize_ranges(ranges) if normalize
36
32
 
37
33
  if ranges.size == 0
38
34
  VersionRange.empty
@@ -64,12 +60,7 @@ module PubGrub
64
60
 
65
61
  def intersects?(other)
66
62
  my_ranges = ranges.dup
67
- other_ranges =
68
- if other.instance_of?(VersionRange)
69
- [other]
70
- else
71
- other.ranges.dup
72
- end
63
+ other_ranges = other.ranges.dup
73
64
 
74
65
  my_range = my_ranges.shift
75
66
  other_range = other_ranges.shift
@@ -88,12 +79,7 @@ module PubGrub
88
79
  alias_method :allows_any?, :intersects?
89
80
 
90
81
  def allows_all?(other)
91
- other_ranges =
92
- if other.is_a?(VersionUnion)
93
- other.ranges
94
- else
95
- [other]
96
- end
82
+ other_ranges = other.ranges
97
83
 
98
84
  other_ranges.all? do |other_range|
99
85
  ranges.any? do |range|
@@ -112,7 +98,10 @@ module PubGrub
112
98
 
113
99
  def intersect(other)
114
100
  new_ranges = ranges.map{ |r| r.intersect(other) }
115
- VersionUnion.union(new_ranges)
101
+ new_ranges = new_ranges.flat_map { |r| r.ranges }
102
+ new_ranges.reject!(&:empty?)
103
+
104
+ VersionUnion.union(new_ranges, normalize: false)
116
105
  end
117
106
 
118
107
  def invert
data/pub_grub.gemspec CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "pub_grub"
7
- spec.version = "0.4.1"
7
+ spec.version = "0.4.2"
8
8
  spec.authors = ["John Hawthorn"]
9
9
  spec.email = ["john@hawthorn.email"]
10
10
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pub_grub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Hawthorn
@@ -88,6 +88,7 @@ extensions: []
88
88
  extra_rdoc_files: []
89
89
  files:
90
90
  - ".gitignore"
91
+ - ".gitmodules"
91
92
  - ".travis.yml"
92
93
  - CODE_OF_CONDUCT.md
93
94
  - Gemfile
@@ -133,7 +134,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
133
134
  version: '0'
134
135
  requirements: []
135
136
  rubyforge_project:
136
- rubygems_version: 2.7.6
137
+ rubygems_version: 2.7.7
137
138
  signing_key:
138
139
  specification_version: 4
139
140
  summary: A version solver based on dart's PubGrub