diff --git a/britney.py b/britney.py index 2778831..56cdff8 100755 --- a/britney.py +++ b/britney.py @@ -279,12 +279,14 @@ class Britney: # lib/dpkg.c and rebuilding self.sources = {'testing': self.read_sources(self.options.testing), 'unstable': self.read_sources(self.options.unstable), - 'tpu': self.read_sources(self.options.tpu),} - self.binaries = {'testing': {}, 'unstable': {}, 'tpu': {}} + 'tpu': self.read_sources(self.options.tpu), + 'pu': self.read_sources(self.options.pu),} + self.binaries = {'testing': {}, 'unstable': {}, 'tpu': {}, 'pu': {}} for arch in self.options.architectures: self.binaries['testing'][arch] = self.read_binaries(self.options.testing, "testing", arch) self.binaries['unstable'][arch] = self.read_binaries(self.options.unstable, "unstable", arch) self.binaries['tpu'][arch] = self.read_binaries(self.options.tpu, "tpu", arch) + self.binaries['pu'][arch] = self.read_binaries(self.options.pu, "pu", arch) # build the testing system self.build_systems(arch) @@ -819,7 +821,7 @@ class Britney: if len(hints["block"]) == 0 and len(hints["block-udeb"]) == 0: self.__log("WARNING: No block hints at all, not even udeb ones!", type="W") - # A t-p-u approval overrides an unstable block + # A (t-)p-u approval overrides an unstable block for p in hints["approve"]: hints["unblock"][p] = hints["approve"][p] @@ -1311,13 +1313,13 @@ class Britney: else: update_candidate = False - if suite == 'tpu': - # o-o-d(ish) checks for t-p-u + if suite in ['pu', 'tpu']: + # o-o-d(ish) checks for (t-)p-u for arch in self.options.architectures: # If the package isn't in testing or the testing # package produces no packages on this architecture, # then it can't be out-of-date. We assume that if - # the t-p-u package has produced any binaries for + # the (t-)p-u package has produced any binaries for # this architecture then it is ok if not src in self.sources["testing"] or \ @@ -1325,7 +1327,11 @@ class Britney: (len([x for x in self.sources[suite][src][BINARIES] if x.endswith("/"+arch) and self.binaries[suite][arch][0][x.split("/")[0]][ARCHITECTURE] != 'all' ]) > 0): continue - text = "Not yet built on %s (relative to testing)" % (urllib.quote(arch), urllib.quote(src), urllib.quote(source_u[VERSION]), arch) + if suite == 'tpu': + base = 'testing' + else: + base = 'stable' + text = "Not yet built on %s (relative to testing)" % (urllib.quote(arch), urllib.quote(src), urllib.quote(source_u[VERSION]), arch, base) if arch in self.options.fucked_arches.split(): text = text + " (but %s isn't keeping up, so never mind)" % (arch) @@ -1431,8 +1437,8 @@ class Britney: excuse.addhtml("Should ignore, but forced by %s" % (self.hints["force"][src][1])) update_candidate = True - # if the suite is testing-proposed-updates, the package needs an explicit approval in order to go in - if suite == "tpu": + # if the suite is *-proposed-updates, the package needs an explicit approval in order to go in + if suite in ['tpu', 'pu']: key = "%s_%s" % (src, source_u[VERSION]) if src in self.hints["approve"] and \ self.same_source(source_u[VERSION], self.hints["approve"][src][0]): @@ -1546,18 +1552,19 @@ class Britney: if should_upgrade_src(pkg, 'unstable'): upgrade_me.append(pkg) - # for every source package in testing-proposed-updates, check if it should be upgraded - for pkg in sources['tpu']: - # if the source package is already present in testing, - # check if it should be upgraded for every binary package - if pkg in sources['testing']: - for arch in architectures: - if should_upgrade_srcarch(pkg, arch, 'tpu'): - upgrade_me.append("%s/%s_tpu" % (pkg, arch)) + # for every source package in *-proposed-updates, check if it should be upgraded + for suite in ['pu', 'tpu']: + for pkg in sources[suite]: + # if the source package is already present in testing, + # check if it should be upgraded for every binary package + if pkg in sources['testing']: + for arch in architectures: + if should_upgrade_srcarch(pkg, arch, suite): + upgrade_me.append("%s/%s_%s" % (pkg, arch, suite)) - # check if the source package should be upgraded - if should_upgrade_src(pkg, 'tpu'): - upgrade_me.append("%s_tpu" % pkg) + # check if the source package should be upgraded + if should_upgrade_src(pkg, suite): + upgrade_me.append("%s_%s" % (pkg, suite)) # process the `remove' hints, if the given package is not yet in upgrade_me for src in self.hints["remove"].keys(): @@ -2026,15 +2033,21 @@ class Britney: pkg_name, arch = pkg.split("/") if arch.endswith("_tpu"): arch, suite = arch.split("_") + elif arch.endswith("_pu"): + arch, suite = arch.split("_") else: suite = "unstable" # removal of source packages = "-", elif pkg[0] == "-": pkg_name = pkg[1:] suite = "testing" # testing-proposed-updates = "_tpu" + # XXXX: why don't these just use split("_") ? elif pkg.endswith("_tpu"): pkg_name = pkg[:-4] suite = "tpu" + elif pkg.endswith("_pu"): + pkg_name = pkg[:-3] + suite = "pu" # normal update of source packages = "" else: pkg_name = pkg @@ -2394,7 +2407,7 @@ class Britney: if pkg[0] != '-' and pkg_name in sources[suite]: for p in sources[suite][pkg_name][BINARIES]: binary, arch = p.split("/") - if '/' not in pkg or pkg.endswith("/%s" % (arch)) or pkg.endswith("/%s_tpu" % (arch)): + if '/' not in pkg or pkg.endswith("/%s" % (arch)) or pkg.endswith("/%s_tpu" % (arch)) or pkg.endswith("/%s_pu" % (arch)): del binaries[arch][0][binary] self.systems[arch].remove_binary(binary) @@ -2531,7 +2544,7 @@ class Britney: if pkg[0] != '-' and pkg_name in self.sources[suite]: for p in self.sources[suite][pkg_name][BINARIES]: binary, arch = p.split("/") - if '/' not in pkg or pkg.endswith("/%s" % (arch)) or pkg.endswith("/%s_tpu" % (arch)): + if '/' not in pkg or pkg.endswith("/%s" % (arch)) or pkg.endswith("/%s_tpu" % (arch)) or pkg.endswith("/%s_pu" % (arch)): del self.binaries['testing'][arch][0][binary] self.systems[arch].remove_binary(binary) @@ -2594,7 +2607,7 @@ class Britney: normpackages = self.upgrade_me[:] archpackages = {} for a in self.options.break_arches.split(): - archpackages[a] = [p for p in normpackages if p.endswith("/" + a) or p.endswith("/" + a + "_tpu")] + archpackages[a] = [p for p in normpackages if p.endswith("/" + a) or p.endswith("/" + a + "_tpu") or p.endswith("/" + a + "_pu")] normpackages = [p for p in normpackages if p not in archpackages[a]] self.upgrade_me = normpackages self.output_write("info: main run\n") @@ -2735,6 +2748,13 @@ class Britney: if apt_pkg.VersionCompare(self.sources['tpu'][pkg][VERSION], v) != 0: self.output_write(" Version mismatch, %s %s != %s\n" % (pkg, v, self.sources['tpu'][pkg][VERSION])) ok = False + # handle proposed-updates + elif pkg.endswith("_pu"): + pkg = pkg[:-3] + if pkg not in self.sources['pu']: continue + if apt_pkg.VersionCompare(self.sources['pu'][pkg][VERSION], v) != 0: + self.output_write(" Version mismatch, %s %s != %s\n" % (pkg, v, self.sources['pu'][pkg][VERSION])) + ok = False # does the package exist in unstable? elif pkg not in self.sources['unstable']: self.output_write(" Source %s has no version in unstable\n" % pkg)