From bf9362be8316b825e9b80fdc7f91967504cd5a88 Mon Sep 17 00:00:00 2001 From: Niels Thykier Date: Sat, 12 Jan 2013 17:17:41 +0100 Subject: [PATCH] Move {read,write}_nuninst to britney_util Signed-off-by: Niels Thykier --- britney.py | 29 +++++++---------------------- britney_util.py | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 22 deletions(-) diff --git a/britney.py b/britney.py index 1ae2a00..511e03d 100755 --- a/britney.py +++ b/britney.py @@ -212,7 +212,8 @@ from migrationitem import MigrationItem, HintItem from hints import HintCollection from britney import buildSystem 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) from consts import (VERSION, SECTION, BINARIES, MAINTAINER, FAKESRC, SOURCE, SOURCEVER, ARCHITECTURE, DEPENDS, CONFLICTS, PROVIDES, RDEPENDS, RCONFLICTS) @@ -273,7 +274,7 @@ class Britney(object): if self.options.print_uninst: self.nuninst_arch_report(nuninst, arch) if not self.options.print_uninst: - self.write_nuninst(nuninst) + write_nuninst(self.options.noninst_status, nuninst) else: self.__log("Not building the list of non-installable packages, as requested", type="I") @@ -888,25 +889,6 @@ class Britney(object): f.write(output + "\n") f.close() - def write_nuninst(self, nuninst): - """Write the non-installable report""" - f = open(self.options.noninst_status, 'w') - f.write("Built on: " + time.strftime("%Y.%m.%d %H:%M:%S %z", time.gmtime(time.time())) + "\n") - f.write("Last update: " + time.strftime("%Y.%m.%d %H:%M:%S %z", time.gmtime(time.time())) + "\n\n") - f.write("".join([k + ": " + " ".join(nuninst[k]) + "\n" for k in nuninst])) - f.close() - - def read_nuninst(self): - """Read the non-installable report""" - f = open(self.options.noninst_status) - nuninst = {} - for r in f: - if ":" not in r: continue - arch, packages = r.strip().split(":", 1) - if arch.split("+", 1)[0] in self.options.architectures: - nuninst[arch] = set(packages.split()) - return nuninst - # Utility methods for package analysis # ------------------------------------ @@ -1670,10 +1652,13 @@ class Britney(object): It returns a dictionary with the architectures as keys and the list of uninstallable packages as values. + + NB: If build is False, requested_arch is ignored. """ # if we are not asked to build the nuninst, read it from the cache if not build: - return self.read_nuninst() + return read_nuninst(self.options.noninst_status, + self.options.architectures) nuninst = {} diff --git a/britney_util.py b/britney_util.py index 762c9fe..d4739e1 100644 --- a/britney_util.py +++ b/britney_util.py @@ -22,6 +22,7 @@ import apt_pkg from functools import partial from itertools import chain, ifilter, ifilterfalse, izip, repeat import re +import time from consts import (BINARIES, PROVIDES, DEPENDS, CONFLICTS, @@ -259,3 +260,35 @@ def compute_reverse_tree(packages_s, pkg, arch, # the current iteration rev_deps = set(revfilt(flatten( binaries[x][RDEPENDS] for x in binfilt(rev_deps) ))) return izip(seen, repeat(arch)) + + +def write_nuninst(filename, nuninst): + """Write the non-installable report + + Write the non-installable report derived from "nuninst" to the + file denoted by "filename". + """ + with open(filename, 'w') as f: + # Having two fields with (almost) identical dates seems a bit + # redundant. + f.write("Built on: " + time.strftime("%Y.%m.%d %H:%M:%S %z", time.gmtime(time.time())) + "\n") + f.write("Last update: " + time.strftime("%Y.%m.%d %H:%M:%S %z", time.gmtime(time.time())) + "\n\n") + f.write("".join([k + ": " + " ".join(nuninst[k]) + "\n" for k in nuninst])) + + +def read_nuninst(filename, architectures): + """Read the non-installable report + + Read the non-installable report from the file denoted by + "filename" and return it. Only architectures in "architectures" + will be included in the report. + """ + nuninst = {} + with open(filename) as f: + for r in f: + if ":" not in r: continue + arch, packages = r.strip().split(":", 1) + if arch.split("+", 1)[0] in architectures: + nuninst[arch] = set(packages.split()) + return nuninst +