pub_grub 0.5.0.alpha2 → 0.5.0.alpha3

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: 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