pub_grub 0.5.0.alpha2 → 0.5.0.alpha3

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: e5d938331a11c5c808f24935dbecaba4ddebf099c5b511fe9d4308eedbafcf9c
4
- data.tar.gz: 1c728638783ac576a475b29269b05d486c049b0d4725dd5fd030f95045f61390
3
+ metadata.gz: 2318849a1cea100c14280880d29b53fad23da9bb6e56035d16c8526304d02570
4
+ data.tar.gz: 06f54f9d158a9cc20684ae48eaccb2626276a8c3bec4e8b5ef301e1ceafb1958
5
5
  SHA512:
6
- metadata.gz: 4ec023a28a5981e6835d5f20cee1534c05b98494c0f97638e161049f18bd9e11ee353563f0b705b119af52c318da829fe2056c773db200c09db077e674ee22eb
7
- data.tar.gz: 88f857cbe30f1e30426fa68be1d3d293ea269e05fac2fdbcdadc83d6c928b9c9e360322da55e2ba5d0ccf512659010260cbc713787b42a0d39541db2f83e8f4e
6
+ metadata.gz: f043f66fe1ba07cbf5bf9e60c632e4a1100456125a66e09ba6512835808a1c5187576f4106c64ff600397d4a7ff87e590e8f30b2d5395d94d72a0358e6ac8f88
7
+ data.tar.gz: f46c47b204a5e7dc2b51a1e9eb26f798289a9d674adef3b2102c6fe2d697cbdf4509dca66482e317968fc386ad31f51638d682b4bfa90dcc75f62ec6205f5cd1
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- pub_grub (0.5.0.alpha2)
4
+ pub_grub (0.5.0.alpha3)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -21,7 +21,8 @@ module PubGrub
21
21
  package = term.package
22
22
  return :overlap if !@terms.key?(package)
23
23
 
24
- @terms[package].relation(term)
24
+ @relation_cache[package][term] ||=
25
+ @terms[package].relation(term)
25
26
  end
26
27
 
27
28
  def satisfies?(term)
@@ -33,21 +34,12 @@ module PubGrub
33
34
  end
34
35
 
35
36
  def satisfier(term)
36
- assigned_term = nil
37
-
38
- @assignments_by[term.package].each do |assignment|
39
- if assigned_term
40
- assigned_term = assigned_term.intersect(assignment.term)
41
- else
42
- assigned_term = assignment.term
37
+ assignment =
38
+ @assignments_by[term.package].bsearch do |assignment|
39
+ @cumulative_assignments[assignment].satisfies?(term)
43
40
  end
44
41
 
45
- if assigned_term.satisfies?(term)
46
- return assignment
47
- end
48
- end
49
-
50
- raise "#{term} unsatisfied"
42
+ assignment || raise("#{term} unsatisfied")
51
43
  end
52
44
 
53
45
  # A list of unsatisfied terms
@@ -94,32 +86,37 @@ module PubGrub
94
86
 
95
87
  # { Package => Array<Assignment> }
96
88
  @assignments_by = Hash.new { |h,k| h[k] = [] }
89
+ @cumulative_assignments = {}.compare_by_identity
97
90
 
98
91
  # { Package => Package::Version }
99
92
  @decisions = {}
100
93
 
101
94
  # { Package => Term }
102
95
  @terms = {}
96
+ @relation_cache = Hash.new { |h,k| h[k] = {} }
103
97
 
104
98
  # { Package => Boolean }
105
99
  @required = Set.new
106
100
  end
107
101
 
108
102
  def add_assignment(assignment)
109
- @assignments << assignment
110
- @assignments_by[assignment.term.package] << assignment
111
-
112
103
  term = assignment.term
113
104
  package = term.package
114
105
 
106
+ @assignments << assignment
107
+ @assignments_by[package] << assignment
108
+
115
109
  @required.add(package) if term.positive?
116
110
 
117
111
  if @terms.key?(package)
118
112
  old_term = @terms[package]
119
113
  @terms[package] = old_term.intersect(term)
120
114
  else
121
- @terms[term.package] = term
115
+ @terms[package] = term
122
116
  end
117
+ @relation_cache[package].clear
118
+
119
+ @cumulative_assignments[assignment] = @terms[package]
123
120
  end
124
121
  end
125
122
  end
@@ -1,3 +1,3 @@
1
1
  module PubGrub
2
- VERSION = "0.5.0.alpha2"
2
+ VERSION = "0.5.0.alpha3"
3
3
  end
@@ -79,7 +79,7 @@ module PubGrub
79
79
  end
80
80
 
81
81
  def hash
82
- min.hash ^ max.hash ^ include_min.hash ^ include_max.hash
82
+ @hash ||= min.hash ^ max.hash ^ include_min.hash ^ include_max.hash
83
83
  end
84
84
 
85
85
  def eql?(other)
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.5.0.alpha2
4
+ version: 0.5.0.alpha3
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Hawthorn