Try to remove old libs during hint run

Attempt the removal of the old libraries from smooth updates during every hint
run. In some cases, the removal needs to happen during the hint run for the
hint to succeed.

Signed-off-by: Ivo De Decker <ivodd@debian.org>
This commit is contained in:
Ivo De Decker 2018-12-17 20:53:17 +00:00 committed by Niels Thykier
parent 70d461ff11
commit 4dc2cf7172
No known key found for this signature in database
GPG Key ID: A65B78DBE67C7AAC

View File

@ -1888,7 +1888,7 @@ class Britney(object):
return (is_accepted, nuninst_after, arch)
def iter_packages(self, packages, selected, nuninst=None, parent_transaction=None):
def iter_packages(self, packages, selected, nuninst=None, parent_transaction=None, try_removals=True):
"""Iter on the list of actions and apply them one-by-one
This method applies the changes from `packages` to testing, checking the uninstallability
@ -1989,6 +1989,18 @@ class Britney(object):
else:
maybe_rescheduled_packages.append(comp[0])
if try_removals and self.options.smooth_updates:
self.logger.info("> Removing old packages left in the target suite from smooth updates")
removals = old_libraries(self.suite_info, self.options.outofsync_arches)
if removals:
output_logger.info("Removing packages left in the target suite for smooth updates (%d):", len(removals))
log_and_format_old_libraries(self.output_logger, removals)
(nuninst_last_accepted, extra) = self.iter_packages(removals,
selected,
nuninst=nuninst_last_accepted,
parent_transaction=parent_transaction,
try_removals=False)
output_logger.info(" finish: [%s]", ",".join(x.uvname for x in selected))
output_logger.info("endloop: %s", self.eval_nuninst(self.nuninst_orig))
output_logger.info(" now: %s", self.eval_nuninst(nuninst_last_accepted))