mirror of
https://git.launchpad.net/~ubuntu-release/britney/+git/britney2-ubuntu
synced 2025-06-06 23:31:29 +00:00
Create a clone_nuninst function for iter_packages{,_hint}
Signed-off-by: Niels Thykier <niels@thykier.net>
This commit is contained in:
parent
4d218df7d0
commit
8f27919cf8
33
britney.py
33
britney.py
@ -204,7 +204,8 @@ from britney_util import (old_libraries_format, same_source, undo_changes,
|
|||||||
read_nuninst, write_nuninst, write_heidi,
|
read_nuninst, write_nuninst, write_heidi,
|
||||||
eval_uninst, newly_uninst, make_migrationitem,
|
eval_uninst, newly_uninst, make_migrationitem,
|
||||||
write_excuses, write_heidi_delta, write_controlfiles,
|
write_excuses, write_heidi_delta, write_controlfiles,
|
||||||
old_libraries, is_nuninst_asgood_generous)
|
old_libraries, is_nuninst_asgood_generous,
|
||||||
|
clone_nuninst)
|
||||||
from consts import (VERSION, SECTION, BINARIES, MAINTAINER, FAKESRC,
|
from consts import (VERSION, SECTION, BINARIES, MAINTAINER, FAKESRC,
|
||||||
SOURCE, SOURCEVER, ARCHITECTURE, DEPENDS, CONFLICTS,
|
SOURCE, SOURCEVER, ARCHITECTURE, DEPENDS, CONFLICTS,
|
||||||
PROVIDES, RDEPENDS, RCONFLICTS, MULTIARCH, ESSENTIAL)
|
PROVIDES, RDEPENDS, RCONFLICTS, MULTIARCH, ESSENTIAL)
|
||||||
@ -2240,7 +2241,6 @@ class Britney(object):
|
|||||||
nobreakall_arches = self.options.nobreakall_arches
|
nobreakall_arches = self.options.nobreakall_arches
|
||||||
packages_t = self.binaries['testing']
|
packages_t = self.binaries['testing']
|
||||||
check_packages = partial(self._check_packages, packages_t)
|
check_packages = partial(self._check_packages, packages_t)
|
||||||
nuninst = {}
|
|
||||||
|
|
||||||
|
|
||||||
for item in hinted_packages:
|
for item in hinted_packages:
|
||||||
@ -2258,15 +2258,11 @@ class Britney(object):
|
|||||||
lundo.append((undo,item))
|
lundo.append((undo,item))
|
||||||
|
|
||||||
# deep copy nuninst (in case the hint is undone)
|
# deep copy nuninst (in case the hint is undone)
|
||||||
# NB: We do this *after* updating testing and we have to filter out
|
# NB: We do this *after* updating testing as we have to filter out
|
||||||
# removed binaries. Otherwise, uninstallable binaries that were
|
# removed binaries. Otherwise, uninstallable binaries that were
|
||||||
# removed by the hint would still be counted.
|
# removed by the hint would still be counted.
|
||||||
for arch in self.options.architectures:
|
nuninst = clone_nuninst(self.nuninst_orig, packages_t,
|
||||||
nuninst_arch = self.nuninst_orig[arch]
|
self.options.architectures)
|
||||||
nuninst_arch_all = self.nuninst_orig[arch + '+all']
|
|
||||||
binaries_t_a = packages_t[arch][0]
|
|
||||||
nuninst[arch] = set(x for x in nuninst_arch if x in binaries_t_a)
|
|
||||||
nuninst[arch + '+all'] = set(x for x in nuninst_arch_all if x in binaries_t_a)
|
|
||||||
|
|
||||||
for arch in self.options.architectures:
|
for arch in self.options.architectures:
|
||||||
check_archall = arch in nobreakall_arches
|
check_archall = arch in nobreakall_arches
|
||||||
@ -2339,27 +2335,18 @@ class Britney(object):
|
|||||||
# Copy nuninst_comp - we have to deep clone affected
|
# Copy nuninst_comp - we have to deep clone affected
|
||||||
# architectures.
|
# architectures.
|
||||||
|
|
||||||
# NB: We do this *after* updating testing and we have to filter out
|
# NB: We do this *after* updating testing as we have to filter out
|
||||||
# removed binaries. Otherwise, uninstallable binaries that were
|
# removed binaries. Otherwise, uninstallable binaries that were
|
||||||
# removed by the item would still be counted.
|
# removed by the item would still be counted.
|
||||||
if item.architecture == 'source':
|
if item.architecture == 'source':
|
||||||
# Assume that all architectures are affected and deep
|
affected_architectures = architectures
|
||||||
# copy nuninst_comp
|
|
||||||
nuninst = {}
|
|
||||||
for arch in architectures:
|
|
||||||
nuninst[arch] = set(x for x in nuninst_comp[arch] if x in binaries[arch][0])
|
|
||||||
nuninst[arch + "+all"] = set(x for x in nuninst_comp[arch + "+all"] if x in binaries[arch][0])
|
|
||||||
else:
|
else:
|
||||||
# Shallow clone nuninst_comp except for the affected
|
affected_architectures = [item.architecture]
|
||||||
# architecture, which is deep cloned.
|
nuninst = clone_nuninst(nuninst_comp, binaries, affected_architectures)
|
||||||
arch = item.architecture
|
|
||||||
nuninst = nuninst_comp.copy()
|
|
||||||
nuninst[arch] = set(x for x in nuninst_comp[arch] if x in binaries[arch][0])
|
|
||||||
nuninst[arch + "+all"] = set(x for x in nuninst_comp[arch + "+all"] if x in binaries[arch][0])
|
|
||||||
|
|
||||||
|
|
||||||
# check the affected packages on all the architectures
|
# check the affected packages on all the architectures
|
||||||
for arch in (item.architecture == 'source' and architectures or (item.architecture,)):
|
for arch in affected_architectures:
|
||||||
check_archall = arch in nobreakall_arches
|
check_archall = arch in nobreakall_arches
|
||||||
|
|
||||||
check_packages(arch, affected, check_archall, nuninst)
|
check_packages(arch, affected, check_archall, nuninst)
|
||||||
|
@ -595,3 +595,18 @@ def is_nuninst_asgood_generous(architectures, old, new, break_arches=frozenset()
|
|||||||
continue
|
continue
|
||||||
diff = diff + (len(new[arch]) - len(old[arch]))
|
diff = diff + (len(new[arch]) - len(old[arch]))
|
||||||
return diff <= 0
|
return diff <= 0
|
||||||
|
|
||||||
|
|
||||||
|
def clone_nuninst(nuninst, packages_s, architectures):
|
||||||
|
"""Selectively deep clone nuninst
|
||||||
|
|
||||||
|
Given nuninst table, the package table for a given suite and
|
||||||
|
a list of architectures, this function will clone the nuninst
|
||||||
|
table. Only the listed architectures will be deep cloned -
|
||||||
|
the rest will only be shallow cloned.
|
||||||
|
"""
|
||||||
|
clone = nuninst.copy()
|
||||||
|
for arch in architectures:
|
||||||
|
clone[arch] = set(x for x in nuninst[arch] if x in packages_s[arch][0])
|
||||||
|
clone[arch + "+all"] = set(x for x in nuninst[arch + "+all"] if x in packages_s[arch][0])
|
||||||
|
return clone
|
||||||
|
Loading…
x
Reference in New Issue
Block a user