pub_grub 0.4.1 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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