1 |
On Fri, 8 May 2015 22:57:36 -0700 |
2 |
Zac Medico <zmedico@g.o> wrote: |
3 |
|
4 |
> Since commit d800d224ab38c0f524d3fe858ebe201cbfa903c1, emerge --search |
5 |
> could report removed packages as installed, since applyDelta failed to |
6 |
> apply "remove" events unless the cpv exactly matched. Fix it to apply |
7 |
> the "remove" event to each affected package slot, using the same code |
8 |
> which is used to handle replaced packages for "add" events. |
9 |
> |
10 |
> Fixes: d800d224ab38 ("Log changes between vdb_metadata.pickle |
11 |
> updates") X-Gentoo-Bug: 547532 |
12 |
> X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=547532 |
13 |
> --- |
14 |
> pym/portage/dbapi/_VdbMetadataDelta.py | 39 |
15 |
> ++++++++++++++++++---------------- 1 file changed, 21 insertions(+), |
16 |
> 18 deletions(-) |
17 |
> |
18 |
> diff --git a/pym/portage/dbapi/_VdbMetadataDelta.py |
19 |
> b/pym/portage/dbapi/_VdbMetadataDelta.py index 2dbb07a..7461f87 100644 |
20 |
> --- a/pym/portage/dbapi/_VdbMetadataDelta.py |
21 |
> +++ b/pym/portage/dbapi/_VdbMetadataDelta.py |
22 |
> @@ -139,12 +139,12 @@ class VdbMetadataDelta(object): |
23 |
> |
24 |
> def applyDelta(self, data): |
25 |
> packages = self._vardb._aux_cache["packages"] |
26 |
> - added_slots = {} |
27 |
> + deltas = {} |
28 |
> for delta in data["deltas"]: |
29 |
> cpv = delta["package"] + "-" + |
30 |
> delta["version"] |
31 |
> + deltas[cpv] = delta |
32 |
> event = delta["event"] |
33 |
> if event == "add": |
34 |
> - added_slots[cpv] = delta |
35 |
> # Use aux_get to populate the cache |
36 |
> # for this cpv. |
37 |
> if cpv not in packages: |
38 |
> @@ -155,19 +155,22 @@ class VdbMetadataDelta(object): |
39 |
> elif event == "remove": |
40 |
> packages.pop(cpv, None) |
41 |
> |
42 |
> - # Remove replaced versions from updated slots |
43 |
> - for cached_cpv, (mtime, metadata) in |
44 |
> list(packages.items()): |
45 |
> - if cached_cpv in added_slots: |
46 |
> - continue |
47 |
> - replaced = False |
48 |
> - for cpv, delta in added_slots.items(): |
49 |
> - if |
50 |
> (cached_cpv.startswith(delta["package"]) and |
51 |
> - metadata.get("SLOT") == |
52 |
> delta["slot"] and |
53 |
> - cpv_getkey(cached_cpv) == |
54 |
> delta["package"]): |
55 |
> - replaced = True |
56 |
> - break |
57 |
> - if replaced: |
58 |
> - del packages[cached_cpv] |
59 |
> - del added_slots[cpv] |
60 |
> - if not added_slots: |
61 |
> - break |
62 |
> + if deltas: |
63 |
> + # Delete removed or replaced versions from |
64 |
> affected slots |
65 |
> + for cached_cpv, (mtime, metadata) in |
66 |
> list(packages.items()): |
67 |
> + if cached_cpv in deltas: |
68 |
> + continue |
69 |
> + |
70 |
> + removed = False |
71 |
> + for cpv, delta in deltas.items(): |
72 |
> + if |
73 |
> (cached_cpv.startswith(delta["package"]) and |
74 |
> + metadata.get("SLOT") |
75 |
> == delta["slot"] and |
76 |
> + |
77 |
> cpv_getkey(cached_cpv) == delta["package"]): |
78 |
> + removed = True |
79 |
> + break |
80 |
> + |
81 |
> + if removed: |
82 |
> + del packages[cached_cpv] |
83 |
> + del deltas[cpv] |
84 |
> + if not deltas: |
85 |
> + break |
86 |
|
87 |
looks good |
88 |
|
89 |
|
90 |
-- |
91 |
Brian Dolbec <dolsen> |