From 330380784a943b286b05171f31b54bd3a34713a0 Mon Sep 17 00:00:00 2001 From: Fabio Tranchitella Date: Thu, 3 Aug 2006 11:41:39 +0000 Subject: [PATCH] Implemented control file rewriter. --- britney.py | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/britney.py b/britney.py index 102938b..5d1d025 100644 --- a/britney.py +++ b/britney.py @@ -264,6 +264,8 @@ class Britney: help="override the list of actions to be performed") self.parser.add_option("", "--compatible", action="store_true", dest="compatible", default=False, help="enable full compatibility with old britney's output") + self.parser.add_option("", "--control-files", action="store_true", dest="control_files", default=False, + help="enable control files generation") (self.options, self.args) = self.parser.parse_args() # if the configuration file exists, than read it and set the additional options @@ -744,6 +746,57 @@ class Britney: f.close() + def write_controlfiles(self, basedir, suite): + """Write the control files + + This method write the control files for the binary packages of all + the architectures and for the source packages. + """ + sources = self.sources[suite] + + self.__log("Writing new %s control files to %s" % (suite, basedir)) + for arch in self.options.architectures: + filename = os.path.join(basedir, 'Packages_%s.new' % arch) + f = open(filename, 'w') + binaries = self.binaries[suite][arch][0] + for pkg in binaries: + output = "Package: %s\n" % pkg + for k in ('Section', 'Architecture', 'Source', 'Version', + 'Pre-Depends', 'Depends', 'Provides', 'Conflicts'): + key = k.lower() + if key not in binaries[pkg]: continue + if key == 'source': + if binaries[pkg]['source'] == pkg: + if binaries[pkg]['source-ver'] != binaries[pkg]['version']: + source = binaries[pkg]['source'] + " (" + binaries[pkg]['source-ver'] + ")" + else: continue + else: + if binaries[pkg]['source-ver'] != binaries[pkg]['version']: + source = binaries[pkg]['source'] + " (" + binaries[pkg]['source-ver'] + ")" + else: + source = binaries[pkg]['source'] + output += (k + ": " + source + "\n") + if sources[binaries[pkg]['source']]['maintainer']: + output += (k + ": " + sources[binaries[pkg]['source']]['maintainer'] + "\n") + elif key == 'provides': + if len(binaries[pkg][key]) > 0: + output += (k + ": " + ", ".join(binaries[pkg][key]) + "\n") + else: + output += (k + ": " + binaries[pkg][key] + "\n") + f.write(output + "\n") + f.close() + + filename = os.path.join(basedir, 'Sources.new') + f = open(filename, 'w') + for src in sources: + output = "Package: %s\n" % src + for k in ('Version', 'Section', 'Maintainer'): + key = k.lower() + if key not in sources[src] or not sources[src][key]: continue + output += (k + ": " + sources[src][key] + "\n") + f.write(output + "\n") + f.close() + # Utility methods for package analisys # ------------------------------------ @@ -2190,6 +2243,10 @@ class Britney: # run the first round of the upgrade self.do_all() + # re-write control files + if self.options.control_files: + self.write_controlfiles(self.options.testing, 'testing') + # write bugs and dates self.write_bugs(self.options.testing, self.bugs['testing']) self.write_dates(self.options.testing, self.dates)