Write "HeidiResultDelta" file containing the changes of the run

Based on Colin Watson's code to do the same from the "britney2-ubuntu"
repository[1] revision 306, 308 and 309.

Notable differences include:
 * output include version of source package being removed
 * output prefix removals with a "-" (otherwise it would be identical to
   a upgrade/new source with the change above).

[1] http://bazaar.launchpad.net/~ubuntu-release/britney/britney2-ubuntu/revision/306

Signed-off-by: Niels Thykier <niels@thykier.net>
bzr-import-20160707
Niels Thykier 11 years ago
parent cc644bc57f
commit 3dc4a6367f

@ -216,7 +216,7 @@ from britney_util import (old_libraries_format, same_source, undo_changes,
register_reverses, compute_reverse_tree, register_reverses, compute_reverse_tree,
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_excuses, write_heidi_delta)
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)
@ -257,6 +257,8 @@ class Britney(object):
apt_pkg.init() apt_pkg.init()
self.sources = {} self.sources = {}
self.binaries = {} self.binaries = {}
self.all_selected = []
try: try:
self.hints = self.read_hints(self.options.hintsdir) self.hints = self.read_hints(self.options.hintsdir)
except AttributeError: except AttributeError:
@ -385,6 +387,9 @@ class Britney(object):
not getattr(self.options, k.lower()): not getattr(self.options, k.lower()):
setattr(self.options, k.lower(), v) setattr(self.options, k.lower(), v)
if not hasattr(self.options, "heidi_delta_output"):
self.options.heidi_delta_output = self.options.heidi_output + "Delta"
# Sort the architecture list # Sort the architecture list
allarches = sorted(self.options.architectures.split()) allarches = sorted(self.options.architectures.split())
arches = [x for x in allarches if x in self.options.nobreakall_arches.split()] arches = [x for x in allarches if x in self.options.nobreakall_arches.split()]
@ -2272,6 +2277,7 @@ class Britney(object):
newly_uninst(nuninst_start, nuninst_end)) + "\n") newly_uninst(nuninst_start, nuninst_end)) + "\n")
self.output_write("SUCCESS (%d/%d)\n" % (len(actions or self.upgrade_me), len(extra))) self.output_write("SUCCESS (%d/%d)\n" % (len(actions or self.upgrade_me), len(extra)))
self.nuninst_orig = nuninst_end self.nuninst_orig = nuninst_end
self.all_selected += selected
if not actions: if not actions:
if recurse: if recurse:
self.upgrade_me = sorted(extra) self.upgrade_me = sorted(extra)
@ -2401,6 +2407,11 @@ class Britney(object):
write_heidi(self.options.heidi_output, self.sources["testing"], write_heidi(self.options.heidi_output, self.sources["testing"],
self.binaries["testing"]) self.binaries["testing"])
self.__log("Writing delta to %s" % self.options.heidi_delta_output)
write_heidi_delta(self.options.heidi_delta_output,
self.all_selected)
self.printuninstchange() self.printuninstchange()
self.__log("Test completed!", type="I") self.__log("Test completed!", type="I")

@ -407,6 +407,34 @@ def write_heidi(filename, sources_t, packages_t,
srcsec = src[SECTION] or 'unknown' srcsec = src[SECTION] or 'unknown'
f.write('%s %s source %s\n' % (src_name, srcv, srcsec)) f.write('%s %s source %s\n' % (src_name, srcv, srcsec))
def write_heidi_delta(filename, all_selected):
"""Write the output delta
This method writes the packages to be upgraded, in the form:
<src-name> <src-version>
or (if the source is to be removed):
-<src-name> <src-version>
The order corresponds to that shown in update_output.
"""
with open(filename, "w") as fd:
fd.write("#HeidiDelta\n")
for item in all_selected:
prefix = ""
if item.is_removal:
prefix = "-"
if item.architecture == 'source':
fd.write('%s%s %s\n' % (prefix, item.package, item.version))
else:
fd.write('%s%s %s %s\n' % (prefix, item.package,
item.version, item.architecture))
def make_migrationitem(package, sources, VERSION=VERSION): def make_migrationitem(package, sources, VERSION=VERSION):
"""Convert a textual package specification to a MigrationItem """Convert a textual package specification to a MigrationItem

Loading…
Cancel
Save