On 3/2/20 1:02 PM, Matt Turner wrote: > On Mon, Mar 2, 2020 at 12:40 PM Matt Turner <matts...@gentoo.org> wrote: >> >> On Sun, Mar 1, 2020 at 10:32 PM Zac Medico <zmed...@gentoo.org> wrote: >>> >>> On 2/20/20 9:29 PM, Matt Turner wrote: >>>> + >>>> def findPackages( >>>> options, >>>> exclude=None, >>>> @@ -564,7 +577,22 @@ def findPackages( >>>> >>>> # Exclude if binpkg exists in the porttree and not --deep >>>> if not destructive and port_dbapi.cpv_exists(cpv): >>>> - continue >>>> + if not options['changed-deps']: >>>> + continue >>>> + >>>> + uselist = bin_dbapi.aux_get(cpv, ['USE'])[0].split() >>>> + all_equal = True >>>> + >>>> + for k in ('RDEPEND', 'PDEPEND'): >>>> + binpkg_deps = bin_dbapi.aux_get(cpv, [k]) >>>> + ebuild_deps = port_dbapi.aux_get(cpv, [k]) >>>> + >>>> + if not _deps_equal(binpkg_deps, ebuild_deps, cpv.eapi, >>>> uselist): >>>> + all_equal = False >>>> + break >>>> + >>>> + if all_equal: >>>> + continue >>>> >>>> if destructive and var_dbapi.cpv_exists(cpv): >>>> # Exclude if an instance of the package is installed due to >>>> >>> >>> The aux_get calls are expensive, so it's more efficient to get multiple >>> values with each call like: >>> keys = ('RDEPEND', 'PDEPEND') >>> binpkg_deps = dict(zip(keys, bin_dbapi.aux_get(cpv, keys)) >>> ebuild_deps = dict(zip(keys, port_dbapi.aux_get(cpv, keys)) >>> >>> Otherwise, looks good. >> >> Thanks, that makes the code a lot nicer too. > > Actually, use_reduce wants a list (it calls .split). Wrapping those in > list() looks like it works, but I suspect that's not as you intended. > What does the zip add over just doing this? > > binpkg_deps = bin_dbapi.aux_get(cpv, keys) > ebuild_deps = port_dbapi.aux_get(cpv, keys)
Using dict(zip(keys, port_dbapi.aux_get(cpv, keys)) is only useful if you want to use a dictionary to access the values. However, if lists are good enough then you might just use those instead. You could even join the values together like this: ebuild_deps = ' '.join(port_dbapi.aux_get(cpv, keys)) -- Thanks, Zac
signature.asc
Description: OpenPGP digital signature