diff --git a/britney.py b/britney.py index da0f158..6c0a26d 100755 --- a/britney.py +++ b/britney.py @@ -2147,8 +2147,7 @@ class Britney(object): nobreakall_arches = self.options.nobreakall_arches.split() binaries_t = self.binaries['testing'] check_packages = partial(self._check_packages, binaries_t) - # Deep copy nuninst (in case the hint is undone) - nuninst = {k:v.copy() for k,v in self.nuninst_orig.iteritems()} + nuninst = {} for item in hinted_packages: @@ -2165,6 +2164,16 @@ class Britney(object): if lundo is not None: lundo.append((undo,item)) + # deep copy nuninst (in case the hint is undone) + # NB: We do this *after* updating testing and we have to filter out + # removed binaries. Otherwise, uninstallable binaries that were + # removed by the hint would still be counted. + for arch in self.options.architectures: + nuninst_arch = self.nuninst_orig[arch] + nuninst_arch_all = self.nuninst_orig[arch + '+all'] + nuninst[arch] = set(x for x in nuninst_arch if x in binaries_t[arch]) + nuninst[arch + '+all'] = set(x for x in nuninst_arch_all if x in binaries_t[arch]) + for arch in self.options.architectures: if arch not in nobreakall_arches: skip_archall = True