mirror of
https://git.launchpad.net/~ubuntu-release/britney/+git/britney2-ubuntu
synced 2025-05-21 15:31:31 +00:00
Handle smooth updates better in "easy"-hints
Avoid smooth-updating libraries in hints, when all of their reverse dependencies will certainly disappear in the same hint. Note that in "hint"-hint, reverse dependencies removed in the following "full run" will not cause the smooth-updated library to be removed. Instead these will still be removed in the end as usual, but in some cases that is too late. Signed-off-by: Niels Thykier <niels@thykier.net>
This commit is contained in:
parent
580f4a7f3d
commit
ebc9af70fa
46
britney.py
46
britney.py
@ -1728,7 +1728,9 @@ class Britney(object):
|
|||||||
|
|
||||||
|
|
||||||
def _compute_groups(self, source_name, suite, migration_architecture,
|
def _compute_groups(self, source_name, suite, migration_architecture,
|
||||||
is_removal, include_hijacked=False):
|
is_removal, include_hijacked=False,
|
||||||
|
allow_smooth_updates=True,
|
||||||
|
removals=frozenset()):
|
||||||
"""Compute the groups of binaries being migrated by item
|
"""Compute the groups of binaries being migrated by item
|
||||||
|
|
||||||
This method will compute the binaries that will be added,
|
This method will compute the binaries that will be added,
|
||||||
@ -1747,6 +1749,17 @@ class Britney(object):
|
|||||||
or not [Same as item.is_removal, where available]
|
or not [Same as item.is_removal, where available]
|
||||||
* "include_hijacked" determines whether hijacked binaries should
|
* "include_hijacked" determines whether hijacked binaries should
|
||||||
be included in results or not. (defaults: False)
|
be included in results or not. (defaults: False)
|
||||||
|
* "allow_smooth_updates" is a boolean determing whether smooth-
|
||||||
|
updates are permitted in this migration. When set to False,
|
||||||
|
the "smoothbins" return value will always be the empty set.
|
||||||
|
Any value that would have been there will now be in "rms"
|
||||||
|
instead. (defaults: True)
|
||||||
|
* "removals" is a set of binaries that is assumed to be
|
||||||
|
removed at the same time as this migration (e.g. in the same
|
||||||
|
"easy"-hint). This may affect what if some binaries are
|
||||||
|
smooth updated or not. (defaults: empty-set)
|
||||||
|
- Binaries must be given as ("package-name", "version",
|
||||||
|
"architecture") tuples.
|
||||||
|
|
||||||
Returns a tuple (adds, rms, smoothbins). "adds" is a set of
|
Returns a tuple (adds, rms, smoothbins). "adds" is a set of
|
||||||
binaries that will updated in or appear after the migration.
|
binaries that will updated in or appear after the migration.
|
||||||
@ -1801,7 +1814,7 @@ class Britney(object):
|
|||||||
for p in bins:
|
for p in bins:
|
||||||
binary, parch = p.split("/")
|
binary, parch = p.split("/")
|
||||||
# if a smooth update is possible for the package, skip it
|
# if a smooth update is possible for the package, skip it
|
||||||
if suite == 'unstable' and \
|
if allow_smooth_updates and suite == 'unstable' and \
|
||||||
binary not in self.binaries[suite][parch][0] and \
|
binary not in self.binaries[suite][parch][0] and \
|
||||||
('ALL' in self.options.smooth_updates or \
|
('ALL' in self.options.smooth_updates or \
|
||||||
binaries_t[parch][0][binary][SECTION] in self.options.smooth_updates):
|
binaries_t[parch][0][binary][SECTION] in self.options.smooth_updates):
|
||||||
@ -1826,6 +1839,14 @@ class Britney(object):
|
|||||||
if dep in binaries_t[parch][0]:
|
if dep in binaries_t[parch][0]:
|
||||||
bin = binaries_t[parch][0][dep]
|
bin = binaries_t[parch][0][dep]
|
||||||
deps = []
|
deps = []
|
||||||
|
# If the package is being removed
|
||||||
|
# together with dep, then it is
|
||||||
|
# not a reason to smooth update
|
||||||
|
# the binary
|
||||||
|
t = (dep, bin[VERSION], parch)
|
||||||
|
if t in removals:
|
||||||
|
continue
|
||||||
|
|
||||||
if bin[DEPENDS] is not None:
|
if bin[DEPENDS] is not None:
|
||||||
deps.extend(apt_pkg.parse_depends(bin[DEPENDS], False))
|
deps.extend(apt_pkg.parse_depends(bin[DEPENDS], False))
|
||||||
if any(binary == entry[0] for deplist in deps for entry in deplist):
|
if any(binary == entry[0] for deplist in deps for entry in deplist):
|
||||||
@ -1869,12 +1890,18 @@ class Britney(object):
|
|||||||
return (adds, rms, set(smoothbins.itervalues()))
|
return (adds, rms, set(smoothbins.itervalues()))
|
||||||
|
|
||||||
|
|
||||||
def doop_source(self, item, hint_undo=[]):
|
def doop_source(self, item, hint_undo=[], removals=frozenset()):
|
||||||
"""Apply a change to the testing distribution as requested by `pkg`
|
"""Apply a change to the testing distribution as requested by `pkg`
|
||||||
|
|
||||||
An optional list of undo actions related to packages processed earlier
|
An optional list of undo actions related to packages processed earlier
|
||||||
in a hint may be passed in `hint_undo`.
|
in a hint may be passed in `hint_undo`.
|
||||||
|
|
||||||
|
An optional set of binaries may be passed in "removals". Binaries listed
|
||||||
|
in this set will be assumined to be removed at the same time as the "item"
|
||||||
|
will migrate. This may change what binaries will be smooth-updated.
|
||||||
|
- Binaries in this set must be ("package-name", "version", "architecture")
|
||||||
|
tuples.
|
||||||
|
|
||||||
This method applies the changes required by the action `item` tracking
|
This method applies the changes required by the action `item` tracking
|
||||||
them so it will be possible to revert them.
|
them so it will be possible to revert them.
|
||||||
|
|
||||||
@ -1898,7 +1925,8 @@ class Britney(object):
|
|||||||
_, bins, _ = self._compute_groups(item.package,
|
_, bins, _ = self._compute_groups(item.package,
|
||||||
item.suite,
|
item.suite,
|
||||||
item.architecture,
|
item.architecture,
|
||||||
item.is_removal)
|
item.is_removal,
|
||||||
|
removals=removals)
|
||||||
|
|
||||||
# remove all the binaries which aren't being smooth updated
|
# remove all the binaries which aren't being smooth updated
|
||||||
for bin_data in bins:
|
for bin_data in bins:
|
||||||
@ -2074,8 +2102,16 @@ class Britney(object):
|
|||||||
# pre-process a hint batch
|
# pre-process a hint batch
|
||||||
pre_process = {}
|
pre_process = {}
|
||||||
if selected and hint:
|
if selected and hint:
|
||||||
|
removals = set()
|
||||||
|
for item in selected:
|
||||||
|
_, rms, _ = self._compute_groups(item.package, item.suite,
|
||||||
|
item.architecture,
|
||||||
|
item.is_removal,
|
||||||
|
allow_smooth_updates=False)
|
||||||
|
removals.update(rms)
|
||||||
for package in selected:
|
for package in selected:
|
||||||
pkg, affected, undo = self.doop_source(package)
|
pkg, affected, undo = self.doop_source(package,
|
||||||
|
removals=removals)
|
||||||
pre_process[package] = (pkg, affected, undo)
|
pre_process[package] = (pkg, affected, undo)
|
||||||
|
|
||||||
if lundo is None:
|
if lundo is None:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user