From cda3145d95f9ede5ea76499e4757c91529f99acf Mon Sep 17 00:00:00 2001 From: Jurij Smakov Date: Sat, 15 Aug 2009 16:39:00 +0100 Subject: [PATCH] Add udeb blocking/unblocking support for b2. Signed-off-by: Jurij Smakov --- britney.conf | 2 +- britney.py | 40 ++++++++++++++++++++++++++-------------- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/britney.conf b/britney.conf index 9abee09..918996b 100644 --- a/britney.conf +++ b/britney.conf @@ -50,7 +50,7 @@ HINTS_ZOBEL = STANDARD force HINTS_PKERN = STANDARD HINTS_MADCODER = STANDARD HINTS_NEILM = STANDARD -HINTS_FREEZE = block block-all +HINTS_FREEZE = block block-all block-udeb HINTS_FTPTEAM = block # support for old libraries in testing (smooth update) diff --git a/britney.py b/britney.py index bf910ce..1d1ab2c 100755 --- a/britney.py +++ b/britney.py @@ -128,6 +128,10 @@ does for the generation of the update excuses. 5. If there is a `block' hint for the source package without an `unblock` hint or a `block-all source`, the package is ignored. + 6. If there is a `block-udeb' hint for the source package, it will + have the same effect as `block', but may only be cancelled by + a subsequent `unblock-udeb' hint. + 7. If the suite is unstable, the update can go ahead only if the upload happend more then the minimum days specified by the urgency of the upload; if this is not true, the package is @@ -220,7 +224,7 @@ class Britney: For more documentation on this script, please read the Developers Reference. """ - HINTS_HELPERS = ("easy", "hint", "remove", "block", "unblock", "approve") + HINTS_HELPERS = ("easy", "hint", "remove", "block", "block-udeb", "unblock", "unblock-udeb", "approve") HINTS_STANDARD = ("urgent", "age-days") + HINTS_HELPERS HINTS_ALL = ("force", "force-hint", "block-all") + HINTS_STANDARD @@ -737,16 +741,16 @@ class Britney: hints[l[0]].append((who, [k.rsplit("/", 1) for k in l if "/" in k])) elif l[0] in ["block-all"]: hints[l[0]].extend([(y, who) for y in l[1:]]) - elif l[0] in ["block"]: + elif l[0] in ["block", "block-udeb"]: hints[l[0]].extend([(y, who) for y in l[1:]]) elif l[0] in ["age-days"] and len(l) >= 3 and l[1].isdigit(): days = l[1] tmp = [tuple([who] + k.rsplit("/", 1)) for k in l[2:] if "/" in k] hints[l[0]].extend([(p, (v, h, days)) for h, p, v in tmp]) - elif l[0] in ["remove", "approve", "unblock", "force", "urgent"]: + elif l[0] in ["remove", "approve", "unblock", "unblock-udeb", "force", "urgent"]: hints[l[0]].extend([(k.rsplit("/", 1)[0], (k.rsplit("/", 1)[1], who)) for k in l if "/" in k]) - for x in ["approve", "block", "block-all", "unblock", "force", "urgent", "remove", "age-days"]: + for x in ["approve", "block", "block-all", "block-udeb", "unblock", "unblock-udeb", "force", "urgent", "remove", "age-days"]: z = {} for a, b in hints[x]: if z.has_key(a) and z[a] != b: @@ -1189,23 +1193,31 @@ class Britney: excuse.addhtml("Trying to remove package, not update it") update_candidate = False - # check if there is a `block' hint for this package or a `block-all source' hint - blocked = None + # check if there is a `block' or `block-udeb' hint for this package, or a `block-all source' hint + blocked = {} if src in self.hints["block"]: - blocked = self.hints["block"][src] + blocked["block"] = self.hints["block"][src] elif 'source' in self.hints["block-all"]: - blocked = self.hints["block-all"]["source"] + blocked["block"] = self.hints["block-all"]["source"] + + if src in hints["block-udeb"]: + blocked["block-udeb"] = hints["block-udeb"][src] # if the source is blocked, then look for an `unblock' hint; the unblock request - # is processed only if the specified version is correct - if blocked: - unblock = self.hints["unblock"].get(src,(None,None)) + # is processed only if the specified version is correct. If a package is blocked + # by `block-udeb', then `unblock-udeb' must be present to cancel it. + for block_cmd in blocked: + unblock_cmd = "un" + block_cmd + unblock = self.hints[unblock_cmd].get(src,(None,None)) if unblock[0] != None and self.same_source(unblock[0], source_u[VERSION]): - excuse.addhtml("Ignoring request to block package by %s, due to unblock request by %s" % (blocked, unblock[1])) + excuse.addhtml("Ignoring %s request by %s, due to %s request by %s" % + (block_cmd, blocked[block_cmd], unblock_cmd, hints[unblock_cmd][src][1])) else: if unblock[0] != None: - excuse.addhtml("Unblock request by %s ignored due to version mismatch: %s" % (unblock[1], unblock[0])) - excuse.addhtml("Not touching package, as requested by %s (contact debian-release if update is needed)" % (blocked)) + excuse.addhtml("%s request by %s ignored due to version mismatch: %s" % + (unblock_cmd.capitalize(), hints[unblock_cmd][src][1], hints[unblock_cmd][src][0])) + excuse.addhtml("Not touching package due to %s request by %s (contact debian-release if update is needed)" % + (block_cmd, blocked[block_cmd])) update_candidate = False # if the suite is unstable, then we have to check the urgency and the minimum days of