pub_grub 0.5.0.alpha1 → 0.5.0.alpha2

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: 40eaa44c58fc07be35463658fd5e546ecb100c7a9f7222727f6139fcde705255
4
- data.tar.gz: 46b6c0d957a206c2c31e7f600c752b3922faeba47c8e178b4be937871f539e59
3
+ metadata.gz: e5d938331a11c5c808f24935dbecaba4ddebf099c5b511fe9d4308eedbafcf9c
4
+ data.tar.gz: 1c728638783ac576a475b29269b05d486c049b0d4725dd5fd030f95045f61390
5
5
  SHA512:
6
- metadata.gz: 3eb6abe0326f02d43cf493520df863c542037f151a993f258094353c06fe80a27f8b14122850d9f595690213394bfec45cd14a55bc74e6c320c29eb16d77fef6
7
- data.tar.gz: e300cec6c86b56eec0fe94030ea1cf7b59c150789a1e8b0dce22851fbd0f0dfb3f2713a364d7238661926efd335b8a67c47680d00bad42ca2308333d3d98542a
6
+ metadata.gz: 4ec023a28a5981e6835d5f20cee1534c05b98494c0f97638e161049f18bd9e11ee353563f0b705b119af52c318da829fe2056c773db200c09db077e674ee22eb
7
+ data.tar.gz: 88f857cbe30f1e30426fa68be1d3d293ea269e05fac2fdbcdadc83d6c928b9c9e360322da55e2ba5d0ccf512659010260cbc713787b42a0d39541db2f83e8f4e
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- pub_grub (0.4.3)
4
+ pub_grub (0.5.0.alpha2)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -25,4 +25,4 @@ DEPENDENCIES
25
25
  stackprof (~> 0.2.12)
26
26
 
27
27
  BUNDLED WITH
28
- 1.16.4
28
+ 1.17.3
@@ -22,6 +22,15 @@ module PubGrub
22
22
  end
23
23
  end
24
24
 
25
+ def hash
26
+ cause.hash ^ terms.hash
27
+ end
28
+
29
+ def eql?(other)
30
+ cause.eql?(other.cause) &&
31
+ terms.eql?(other.terms)
32
+ end
33
+
25
34
  def failure?
26
35
  terms.empty? || (terms.length == 1 && terms[0].package == Package.root && terms[0].positive?)
27
36
  end
@@ -6,8 +6,9 @@ module PubGrub
6
6
  ranges = requirement.requirements.map do |(op, ver)|
7
7
  case op
8
8
  when "~>"
9
+ name = "~> #{ver}"
9
10
  bump = ver.class.new(ver.bump.to_s + ".A")
10
- VersionRange.new(min: ver, max: bump, include_min: true)
11
+ VersionRange.new(name: name, min: ver, max: bump, include_min: true)
11
12
  when ">"
12
13
  VersionRange.new(min: ver)
13
14
  when ">="
data/lib/pub_grub/term.rb CHANGED
@@ -18,6 +18,15 @@ module PubGrub
18
18
  end
19
19
  end
20
20
 
21
+ def hash
22
+ constraint.hash ^ positive.hash
23
+ end
24
+
25
+ def eql?(other)
26
+ positive == other.positive &&
27
+ constraint.eql?(other.constraint)
28
+ end
29
+
21
30
  def invert
22
31
  self.class.new(@constraint, !@positive)
23
32
  end
@@ -1,3 +1,3 @@
1
1
  module PubGrub
2
- VERSION = "0.5.0.alpha1"
2
+ VERSION = "0.5.0.alpha2"
3
3
  end
@@ -11,6 +11,15 @@ module PubGrub
11
11
  @range = range
12
12
  end
13
13
 
14
+ def hash
15
+ package.hash ^ range.hash
16
+ end
17
+
18
+ def eql?(other)
19
+ package.eql?(other.package) &&
20
+ range.eql?(other.range)
21
+ end
22
+
14
23
  class << self
15
24
  def exact(package, version)
16
25
  range = VersionRange.new(min: version, max: version, include_min: true, include_max: true)
@@ -19,10 +19,18 @@ module PubGrub
19
19
  true
20
20
  end
21
21
 
22
+ def eql?
23
+ other.empty?
24
+ end
25
+
22
26
  def intersects?(_)
23
27
  false
24
28
  end
25
29
 
30
+ def intersect(other)
31
+ self
32
+ end
33
+
26
34
  def allows_all?(other)
27
35
  other.empty?
28
36
  end
@@ -35,8 +43,8 @@ module PubGrub
35
43
  false
36
44
  end
37
45
 
38
- def constraints
39
- ["(no versions)"]
46
+ def to_s
47
+ "(no versions)"
40
48
  end
41
49
 
42
50
  def ==(other)
@@ -52,27 +60,33 @@ module PubGrub
52
60
  end
53
61
  end
54
62
 
63
+ EMPTY = Empty.new
64
+
55
65
  def self.empty
56
- Empty.new
66
+ EMPTY
57
67
  end
58
68
 
59
69
  def self.any
60
70
  new
61
71
  end
62
72
 
63
- def initialize(min: nil, max: nil, include_min: false, include_max: false)
73
+ def initialize(min: nil, max: nil, include_min: false, include_max: false, name: nil)
64
74
  @min = min
65
75
  @max = max
66
76
  @include_min = include_min
67
77
  @include_max = include_max
78
+ @name = name
79
+ end
68
80
 
69
- if min && max
70
- if min > max
71
- raise ArgumentError, "min version #{min} must be less than max #{max}"
72
- elsif min == max && (!include_min || !include_max)
73
- raise ArgumentError, "include_min and include_max must be true when min == max"
74
- end
75
- end
81
+ def hash
82
+ min.hash ^ max.hash ^ include_min.hash ^ include_max.hash
83
+ end
84
+
85
+ def eql?(other)
86
+ min.eql?(other.min) &&
87
+ max.eql?(other.max) &&
88
+ include_min.eql?(other.include_min) &&
89
+ include_max.eql?(other.include_max)
76
90
  end
77
91
 
78
92
  def ranges
@@ -173,7 +187,7 @@ module PubGrub
173
187
  alias_method :allows_any?, :intersects?
174
188
 
175
189
  def intersect(other)
176
- return self.class.empty unless intersects?(other)
190
+ return other if other.empty?
177
191
  return other.intersect(self) if other.is_a?(VersionUnion)
178
192
 
179
193
  min_range =
@@ -208,7 +222,19 @@ module PubGrub
208
222
  end
209
223
  end
210
224
 
211
- self.class.new(
225
+ if !min_range.equal?(max_range) && min_range.min && max_range.max
226
+ case min_range.min <=> max_range.max
227
+ when -1
228
+ when 0
229
+ if !min_range.include_min || !max_range.include_max
230
+ return EMPTY
231
+ end
232
+ when 1
233
+ return EMPTY
234
+ end
235
+ end
236
+
237
+ VersionRange.new(
212
238
  min: min_range.min,
213
239
  include_min: min_range.include_min,
214
240
  max: max_range.max,
@@ -255,7 +281,7 @@ module PubGrub
255
281
  end
256
282
  end
257
283
 
258
- self.class.new(
284
+ VersionRange.new(
259
285
  min: min_range.min,
260
286
  include_min: min_range.include_min,
261
287
  max: max_range.max,
@@ -285,7 +311,7 @@ module PubGrub
285
311
  return true if other.empty?
286
312
 
287
313
  if other.is_a?(VersionUnion)
288
- return other.ranges.all? { |r| allows_all?(r) }
314
+ return VersionUnion.new([self]).allows_all?(other)
289
315
  end
290
316
 
291
317
  return false if max && !other.max
@@ -314,21 +340,6 @@ module PubGrub
314
340
  true
315
341
  end
316
342
 
317
- def constraints
318
- return ["any"] if any?
319
- return ["#{min}"] if min == max
320
-
321
- # FIXME: remove this
322
- if min && max && include_min && !include_max && min.respond_to?(:bump) && (min.bump.to_s + ".A") == max.to_s
323
- return ["~> #{min}"]
324
- end
325
-
326
- c = []
327
- c << "#{include_min ? ">=" : ">"} #{min}" if min
328
- c << "#{include_max ? "<=" : "<"} #{max}" if max
329
- c
330
- end
331
-
332
343
  def any?
333
344
  !min && !max
334
345
  end
@@ -338,7 +349,7 @@ module PubGrub
338
349
  end
339
350
 
340
351
  def to_s
341
- constraints.join(", ")
352
+ @name ||= constraints.join(", ")
342
353
  end
343
354
 
344
355
  def inspect
@@ -367,5 +378,18 @@ module PubGrub
367
378
  include_min == other.include_min &&
368
379
  include_max == other.include_max
369
380
  end
381
+
382
+ private
383
+
384
+ def constraints
385
+ return ["any"] if any?
386
+ return ["= #{min}"] if min == max
387
+
388
+ c = []
389
+ c << "#{include_min ? ">=" : ">"} #{min}" if min
390
+ c << "#{include_max ? "<=" : "<"} #{max}" if max
391
+ c
392
+ end
393
+
370
394
  end
371
395
  end
@@ -16,6 +16,8 @@ module PubGrub
16
16
  h[k] = []
17
17
  end
18
18
 
19
+ @seen_incompatibilities = Set.new
20
+
19
21
  @solution = PartialSolution.new
20
22
 
21
23
  @package_depth = { root => 0 }
@@ -130,6 +132,12 @@ module PubGrub
130
132
  conflict = false
131
133
 
132
134
  source.incompatibilities_for(package, version).each do |incompatibility|
135
+ if @seen_incompatibilities.include?(incompatibility)
136
+ logger.debug { "knew: #{incompatibility}" }
137
+ next
138
+ end
139
+ @seen_incompatibilities.add(incompatibility)
140
+
133
141
  add_incompatibility incompatibility
134
142
 
135
143
  conflict ||= incompatibility.terms.all? do |term|
@@ -44,6 +44,14 @@ module PubGrub
44
44
  @ranges = ranges
45
45
  end
46
46
 
47
+ def hash
48
+ ranges.hash
49
+ end
50
+
51
+ def eql?(other)
52
+ ranges.eql?(other.ranges)
53
+ end
54
+
47
55
  def include?(version)
48
56
  !!ranges.bsearch {|r| r.compare_version(version) }
49
57
  end
@@ -79,12 +87,17 @@ module PubGrub
79
87
  alias_method :allows_any?, :intersects?
80
88
 
81
89
  def allows_all?(other)
82
- other_ranges = other.ranges
90
+ my_ranges = ranges.dup
91
+
92
+ my_range = my_ranges.shift
83
93
 
84
- other_ranges.all? do |other_range|
85
- ranges.any? do |range|
86
- range.allows_all?(other_range)
94
+ other.ranges.all? do |other_range|
95
+ while my_range
96
+ break if my_range.allows_all?(other_range)
97
+ my_range = my_ranges.shift
87
98
  end
99
+
100
+ !!my_range
88
101
  end
89
102
  end
90
103
 
@@ -97,10 +110,22 @@ module PubGrub
97
110
  end
98
111
 
99
112
  def intersect(other)
100
- new_ranges = ranges.map{ |r| r.intersect(other) }
101
- new_ranges = new_ranges.flat_map { |r| r.ranges }
102
- new_ranges.reject!(&:empty?)
113
+ my_ranges = ranges.dup
114
+ other_ranges = other.ranges.dup
115
+ new_ranges = []
103
116
 
117
+ my_range = my_ranges.shift
118
+ other_range = other_ranges.shift
119
+ while my_range && other_range
120
+ new_ranges << my_range.intersect(other_range)
121
+
122
+ if !my_range.max || (other_range.max && other_range.max < my_range.max)
123
+ other_range = other_ranges.shift
124
+ else
125
+ my_range = my_ranges.shift
126
+ end
127
+ end
128
+ new_ranges.reject!(&:empty?)
104
129
  VersionUnion.union(new_ranges, normalize: false)
105
130
  end
106
131
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pub_grub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0.alpha1
4
+ version: 0.5.0.alpha2
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Hawthorn
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-01-04 00:00:00.000000000 Z
11
+ date: 2019-01-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -135,7 +135,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
135
135
  version: 1.3.1
136
136
  requirements: []
137
137
  rubyforge_project:
138
- rubygems_version: 2.7.7
138
+ rubygems_version: 2.7.6
139
139
  signing_key:
140
140
  specification_version: 4
141
141
  summary: A version solver based on dart's PubGrub