Refactor installability test in iter_packages into separate method

Signed-off-by: Niels Thykier <niels@thykier.net>
debian
Niels Thykier 13 years ago
parent f48897a3ba
commit ed21179110

@ -2061,55 +2061,24 @@ class Britney:
# broken packages (first round)
for p in [x[0] for x in affected if x[1] == arch]:
if p not in binaries[arch][0]: continue
r = systems[arch].is_installable(p)
if not r:
if p not in broken:
to_check.append(p)
broken.add(p)
if not (skip_archall and binaries[arch][0][p][ARCHITECTURE] == 'all'):
if p not in nuninst[arch]:
nuninst[arch].add(p)
else:
if p in broken:
to_check.append(p)
broken.remove(p)
if p not in binaries[arch][0]:
continue
nuninst_arch = None
if not (skip_archall and binaries[arch][0][p][ARCHITECTURE] == 'all'):
# if the package was previously arch:all and uninstallable
# and has moved to being architecture-dependent, becoming
# installable in the process then it will not be in the
# architecture-dependent uninstallability set; therefore,
# don't try removing it
if p in nuninst[arch]:
nuninst[arch].remove(p)
nuninst_arch = nuninst[arch]
self._installability_test(systems[arch], p, broken, to_check, nuninst_arch)
# broken packages (second round, reverse dependencies of the first round)
while to_check:
j = to_check.pop(0)
if j not in binaries[arch][0]: continue
for p in binaries[arch][0][j][RDEPENDS]:
if p in broken or p not in binaries[arch][0]: continue
r = systems[arch].is_installable(p)
if not r:
if p not in broken:
broken.add(p)
to_check.append(p)
if not (skip_archall and binaries[arch][0][p][ARCHITECTURE] == 'all'):
if p not in nuninst[arch]:
nuninst[arch].add(p)
else:
if p in broken:
broken.remove(p)
to_check.append(p)
if p in broken or p not in binaries[arch][0]:
continue
nuninst_arch = None
if not (skip_archall and binaries[arch][0][p][ARCHITECTURE] == 'all'):
# if the package was previously arch:all and uninstallable
# and has moved to being architecture-dependent, becoming
# installable in the process then it will not be in the
# architecture-dependent uninstallability set; therefore,
# don't try removing it
if p in nuninst[arch]:
nuninst[arch].remove(p)
nuninst_arch = nuninst[arch]
self._installability_test(systems[arch], p, broken, to_check, nuninst_arch)
# if we are processing hints, go ahead
if hint:
@ -2778,5 +2747,34 @@ class Britney:
self.__output.close()
def _installability_test(self, system, p, broken, to_check, nuninst_arch):
"""Test for installability of a package on an architecture
p is the package to check and system does the actual check.
broken is the set of broken packages. If p changes
installability (e.g. goes from uninstallable to installable),
broken will be updated accordingly. Furthermore, p will be
added to "to_check" for futher processing.
If nuninst_arch is not None then it also updated in the same
way as broken is.
"""
r = system.is_installable(p)
if not r:
# not installable
if p not in broken:
broken.add(p)
to_check.append(p)
if nuninst_arch is not None and p not in nuninst_arch:
nuninst_arch.add(p)
else:
if p in broken:
to_check.append(p)
broken.remove(p)
if nuninst_arch is not None and p in nuninst_arch:
nuninst_arch.remove(p)
if __name__ == '__main__':
Britney().main()

Loading…
Cancel
Save