Gentoo Archives: gentoo-commits

From: Zac Medico <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage:master commit in: pym/portage/dbapi/, pym/_emerge/
Date: Sun, 30 Aug 2015 23:44:27
Message-Id: 1440978162.d87eeb7b8edf846330e3c2031eea2f326f149506.zmedico@gentoo
1 commit: d87eeb7b8edf846330e3c2031eea2f326f149506
2 Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
3 AuthorDate: Sat Aug 29 05:10:45 2015 +0000
4 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
5 CommitDate: Sun Aug 30 23:42:42 2015 +0000
6 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=d87eeb7b
7
8 emerge --search: fix duplication of results (bug 559044)
9
10 Fix search._cp_all() to ensure sorted input for MultiIterGroupBy.
11 Add a boolean "sort" keyword argument to all dbapi.cp_all()
12 implementations, and set defaults for backward compatible behavior.
13
14 X-Gentoo-Bug: 559044
15 X-Gentoo-Bug-url: https://bugs.gentoo.org/show_bug.cgi?id=559044
16 Acked-by: Brian Dolbec <dolsen <AT> gentoo.org>
17
18 pym/_emerge/PackageVirtualDbapi.py | 4 ++--
19 pym/_emerge/search.py | 3 ++-
20 pym/portage/dbapi/IndexedPortdb.py | 4 ++--
21 pym/portage/dbapi/IndexedVardb.py | 6 +++---
22 pym/portage/dbapi/__init__.py | 4 ++--
23 pym/portage/dbapi/bintree.py | 4 ++--
24 pym/portage/dbapi/porttree.py | 6 ++++--
25 pym/portage/dbapi/vartree.py | 4 ++--
26 pym/portage/dbapi/virtual.py | 4 ++--
27 9 files changed, 21 insertions(+), 18 deletions(-)
28
29 diff --git a/pym/_emerge/PackageVirtualDbapi.py b/pym/_emerge/PackageVirtualDbapi.py
30 index 56a5576..26293dd 100644
31 --- a/pym/_emerge/PackageVirtualDbapi.py
32 +++ b/pym/_emerge/PackageVirtualDbapi.py
33 @@ -105,8 +105,8 @@ class PackageVirtualDbapi(dbapi):
34 self._match_cache[cache_key] = cpv_list
35 return cpv_list[:]
36
37 - def cp_all(self):
38 - return list(self._cp_map)
39 + def cp_all(self, sort=False):
40 + return sorted(self._cp_map) if sort else list(self._cp_map)
41
42 def cpv_all(self):
43 return list(self._cpv_map)
44
45 diff --git a/pym/_emerge/search.py b/pym/_emerge/search.py
46 index 41c182d..32d326e 100644
47 --- a/pym/_emerge/search.py
48 +++ b/pym/_emerge/search.py
49 @@ -72,7 +72,8 @@ class search(object):
50 def _cp_all(self):
51 iterators = []
52 for db in self._dbs:
53 - i = db.cp_all()
54 + # MultiIterGroupBy requires sorted input
55 + i = db.cp_all(sort=True)
56 try:
57 i = iter(i)
58 except TypeError:
59
60 diff --git a/pym/portage/dbapi/IndexedPortdb.py b/pym/portage/dbapi/IndexedPortdb.py
61 index e96f83c..510e027 100644
62 --- a/pym/portage/dbapi/IndexedPortdb.py
63 +++ b/pym/portage/dbapi/IndexedPortdb.py
64 @@ -127,14 +127,14 @@ class IndexedPortdb(object):
65 if new_cp is not None:
66 yield cp_group[0].cp
67
68 - def cp_all(self):
69 + def cp_all(self, sort=True):
70 """
71 Returns an ordered iterator instead of a list, so that search
72 results can be displayed incrementally.
73 """
74 if self._cp_map is None:
75 return self._init_index()
76 - return iter(sorted(self._cp_map))
77 + return iter(sorted(self._cp_map)) if sort else iter(self._cp_map)
78
79 def match(self, atom):
80 """
81
82 diff --git a/pym/portage/dbapi/IndexedVardb.py b/pym/portage/dbapi/IndexedVardb.py
83 index 38bfeed..b946670 100644
84 --- a/pym/portage/dbapi/IndexedVardb.py
85 +++ b/pym/portage/dbapi/IndexedVardb.py
86 @@ -35,13 +35,13 @@ class IndexedVardb(object):
87
88 self._cp_map = None
89
90 - def cp_all(self):
91 + def cp_all(self, sort=True):
92 """
93 Returns an ordered iterator instead of a list, so that search
94 results can be displayed incrementally.
95 """
96 if self._cp_map is not None:
97 - return iter(sorted(self._cp_map))
98 + return iter(sorted(self._cp_map)) if sort else iter(self._cp_map)
99
100 delta_data = self._vardb._cache_delta.loadRace()
101 if delta_data is None:
102 @@ -62,7 +62,7 @@ class IndexedVardb(object):
103 cp_map[cpv.cp] = cp_list
104 cp_list.append(cpv)
105
106 - return iter(sorted(self._cp_map))
107 + return iter(sorted(self._cp_map)) if sort else iter(self._cp_map)
108
109 def _iter_cp_all(self):
110 self._cp_map = cp_map = {}
111
112 diff --git a/pym/portage/dbapi/__init__.py b/pym/portage/dbapi/__init__.py
113 index 044faec..b6745fa 100644
114 --- a/pym/portage/dbapi/__init__.py
115 +++ b/pym/portage/dbapi/__init__.py
116 @@ -94,10 +94,10 @@ class dbapi(object):
117 cpv_list.extend(self.cp_list(cp))
118 return cpv_list
119
120 - def cp_all(self):
121 + def cp_all(self, sort=False):
122 """ Implement this in a child class
123 Args
124 - None
125 + sort - return sorted results
126 Returns:
127 A list of strings 1 per CP in the datastore
128 """
129
130 diff --git a/pym/portage/dbapi/bintree.py b/pym/portage/dbapi/bintree.py
131 index f415a63..9f47436 100644
132 --- a/pym/portage/dbapi/bintree.py
133 +++ b/pym/portage/dbapi/bintree.py
134 @@ -223,10 +223,10 @@ class bindbapi(fakedbapi):
135 self.bintree.populate()
136 return fakedbapi.cp_list(self, *pargs, **kwargs)
137
138 - def cp_all(self):
139 + def cp_all(self, sort=False):
140 if not self.bintree.populated:
141 self.bintree.populate()
142 - return fakedbapi.cp_all(self)
143 + return fakedbapi.cp_all(self, sort=sort)
144
145 def cpv_all(self):
146 if not self.bintree.populated:
147
148 diff --git a/pym/portage/dbapi/porttree.py b/pym/portage/dbapi/porttree.py
149 index 590e3c5..d13fdee 100644
150 --- a/pym/portage/dbapi/porttree.py
151 +++ b/pym/portage/dbapi/porttree.py
152 @@ -706,7 +706,7 @@ class portdbapi(dbapi):
153 else:
154 return 0
155
156 - def cp_all(self, categories=None, trees=None, reverse=False):
157 + def cp_all(self, categories=None, trees=None, reverse=False, sort=True):
158 """
159 This returns a list of all keys in our tree or trees
160 @param categories: optional list of categories to search or
161 @@ -714,6 +714,7 @@ class portdbapi(dbapi):
162 @param trees: optional list of trees to search the categories in or
163 defaults to self.porttrees
164 @param reverse: reverse sort order (default is False)
165 + @param sort: return sorted results (default is True)
166 @rtype list of [cat/pkg,...]
167 """
168 d = {}
169 @@ -732,7 +733,8 @@ class portdbapi(dbapi):
170 continue
171 d[atom.cp] = None
172 l = list(d)
173 - l.sort(reverse=reverse)
174 + if sort:
175 + l.sort(reverse=reverse)
176 return l
177
178 def cp_list(self, mycp, use_cache=1, mytree=None):
179
180 diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py
181 index 62d880e..927c645 100644
182 --- a/pym/portage/dbapi/vartree.py
183 +++ b/pym/portage/dbapi/vartree.py
184 @@ -491,7 +491,7 @@ class vardbapi(dbapi):
185
186 yield subpath
187
188 - def cp_all(self, use_cache=1):
189 + def cp_all(self, use_cache=1, sort=False):
190 mylist = self.cpv_all(use_cache=use_cache)
191 d={}
192 for y in mylist:
193 @@ -506,7 +506,7 @@ class vardbapi(dbapi):
194 self.invalidentry(self.getpath(y))
195 continue
196 d[mysplit[0]+"/"+mysplit[1]] = None
197 - return list(d)
198 + return sorted(d) if sort else list(d)
199
200 def checkblockers(self, origdep):
201 pass
202
203 diff --git a/pym/portage/dbapi/virtual.py b/pym/portage/dbapi/virtual.py
204 index 3b7d10e..a59c3b5 100644
205 --- a/pym/portage/dbapi/virtual.py
206 +++ b/pym/portage/dbapi/virtual.py
207 @@ -115,8 +115,8 @@ class fakedbapi(dbapi):
208 self._match_cache[cache_key] = cpv_list
209 return cpv_list[:]
210
211 - def cp_all(self):
212 - return list(self.cpdict)
213 + def cp_all(self, sort=False):
214 + return sorted(self.cpdict) if sort else list(self.cpdict)
215
216 def cpv_all(self):
217 if self._multi_instance: