diff options
author | Zac Medico <zmedico@gentoo.org> | 2020-06-08 18:54:46 -0700 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2020-06-08 18:57:07 -0700 |
commit | c0b355cf51ca73ad9dd52a0f5c1aebf807be42fc (patch) | |
tree | 824faecd2d3e22cd3f223a9b6f82a37e624a1286 | |
parent | v0.5.0 (diff) | |
download | gentoolkit-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.py | 18 |
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): |