aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2020-06-08 18:54:46 -0700
committerZac Medico <zmedico@gentoo.org>2020-06-08 18:57:07 -0700
commitc0b355cf51ca73ad9dd52a0f5c1aebf807be42fc (patch)
tree824faecd2d3e22cd3f223a9b6f82a37e624a1286
parentv0.5.0 (diff)
downloadgentoolkit-c0b355cf51ca73ad9dd52a0f5c1aebf807be42fc.tar.gz
gentoolkit-c0b355cf51ca73ad9dd52a0f5c1aebf807be42fc.tar.bz2
gentoolkit-c0b355cf51ca73ad9dd52a0f5c1aebf807be42fc.zip
eclean --changed-deps: fix EAPI logic (bug 727596)
Use separate variables for binary package and corresponding ebuild EAPI values, since the ebuild EAPI may have changed. This avoids a possible InvalidAtom exception as reported in bug 727596. Bug: https://bugs.gentoo.org/727596 Signed-off-by: Zac Medico <zmedico@gentoo.org>
-rw-r--r--pym/gentoolkit/eclean/search.py18
1 files changed, 10 insertions, 8 deletions
diff --git a/pym/gentoolkit/eclean/search.py b/pym/gentoolkit/eclean/search.py
index 51edc63..f68aacf 100644
--- a/pym/gentoolkit/eclean/search.py
+++ b/pym/gentoolkit/eclean/search.py
@@ -490,12 +490,12 @@ class DistfilesSearch(object):
return clean_me, saved
-def _deps_equal(deps_a, deps_b, eapi, uselist=None):
+def _deps_equal(deps_a, eapi_a, deps_b, eapi_b, uselist=None):
"""Compare two dependency lists given a set of USE flags"""
if deps_a == deps_b: return True
- deps_a = use_reduce(deps_a, uselist=uselist, eapi=eapi, token_class=Atom)
- deps_b = use_reduce(deps_b, uselist=uselist, eapi=eapi, token_class=Atom)
+ deps_a = use_reduce(deps_a, uselist=uselist, eapi=eapi_a, token_class=Atom)
+ deps_b = use_reduce(deps_b, uselist=uselist, eapi=eapi_b, token_class=Atom)
strip_slots(deps_a)
strip_slots(deps_b)
return deps_a == deps_b
@@ -578,12 +578,14 @@ def findPackages(
if not options['changed-deps']:
continue
- keys = ('RDEPEND', 'PDEPEND')
- binpkg_deps = ' '.join(bin_dbapi.aux_get(cpv, keys))
- ebuild_deps = ' '.join(port_dbapi.aux_get(cpv, keys))
- uselist = bin_dbapi.aux_get(cpv, ['USE'])[0].split()
+ dep_keys = ('RDEPEND', 'PDEPEND')
+ keys = ('EAPI', 'USE') + dep_keys
+ binpkg_metadata = dict(zip(keys, bin_dbapi.aux_get(cpv, keys)))
+ ebuild_metadata = dict(zip(keys, port_dbapi.aux_get(cpv, keys)))
- if _deps_equal(binpkg_deps, ebuild_deps, cpv.eapi, uselist):
+ if _deps_equal(' '.join(binpkg_metadata[key] for key in dep_keys), binpkg_metadata['EAPI'],
+ ' '.join(ebuild_metadata[key] for key in dep_keys), ebuild_metadata['EAPI'],
+ frozenset(binpkg_metadata['USE'].split())):
continue
if destructive and var_dbapi.cpv_exists(cpv):