From: Anthony Towns Date: Fri, 21 Mar 2008 12:19:34 +0000 (+0000) Subject: move process_unchecked changes intoconfig/debian/extensions.py X-Git-Url: https://git.decadent.org.uk/gitweb/?a=commitdiff_plain;h=ae6668e84b33470fd2d80f4cb177e3df2df7c23c;p=dak.git move process_unchecked changes intoconfig/debian/extensions.py --- diff --git a/config/debian/extensions.py b/config/debian/extensions.py index 7e418db3..851360ff 100644 --- a/config/debian/extensions.py +++ b/config/debian/extensions.py @@ -1,4 +1,8 @@ -import sys, os +import sys, os, textwrap + +import apt_pkg +import daklib.utils, daklib.database +import syck # This function and its data should move into daklib/extensions.py # or something. @@ -9,6 +13,75 @@ def replace_dak_function(module,name): replace_funcs["%s:%s" % (module,name)] = f return x +def check_transition(): + changes = dak_module.changes + reject = dak_module.reject + Cnf = dak_module.Cnf + + sourcepkg = changes["source"] + + # No sourceful upload -> no need to do anything else, direct return + if "source" not in changes["architecture"]: + return + + # Also only check if there is a file defined (and existant) with + # checks. + transpath = Cnf.get("Dinstall::Reject::ReleaseTransitions", "") + if transpath == "" or not os.path.exists(transpath): + return + + # Parse the yaml file + sourcefile = file(transpath, 'r') + sourcecontent = sourcefile.read() + try: + transitions = syck.load(sourcecontent) + except syck.error, msg: + # This shouldn't happen, there is a wrapper to edit the file which + # checks it, but we prefer to be safe than ending up rejecting + # everything. + daklib.utils.warn("Not checking transitions, the transitions file is broken: %s." % (msg)) + return + + # Now look through all defined transitions + for trans in transitions: + t = transitions[trans] + source = t["source"] + expected = t["new"] + + # Will be None if nothing is in testing. + current = daklib.database.get_suite_version(source, "testing") + if current is not None: + compare = apt_pkg.VersionCompare(current, expected) + + if current is None or compare < 0: + # This is still valid, the current version in testing is older than + # the new version we wait for, or there is none in testing yet + + # Check if the source we look at is affected by this. + if sourcepkg in t['packages']: + # The source is affected, lets reject it. + + rejectmsg = "%s: part of the %s transition.\n\n" % ( + sourcepkg, trans) + + if current is not None: + currentlymsg = "at version %s" % (current) + else: + currentlymsg = "not present in testing" + + rejectmsg += "Transition description: %s\n\n" % (t["reason"]) + + rejectmsg += "\n".join(textwrap.wrap("""Your package +is part of a testing transition designed to get %s migrated (it is +currently %s, we need version %s). This transition is managed by the +Release Team, and %s is the Release-Team member responsible for it. +Please mail debian-release@lists.debian.org or contact %s directly if you +need further assistance.""" + % (source, currentlymsg, expected,t["rm"], t["rm"]))) + + reject(rejectmsg + "\n") + return + @replace_dak_function("process-unchecked", "check_signed_by_key") def check_signed_by_key(): changes = dak_module.changes @@ -27,6 +100,8 @@ def check_signed_by_key(): replaced_funcs["check_signed_by_key"]() + check_transition() + def init(name): global replaced_funcs diff --git a/dak/process_unchecked.py b/dak/process_unchecked.py index 7ad64145..4a4cfd6b 100755 --- a/dak/process_unchecked.py +++ b/dak/process_unchecked.py @@ -30,7 +30,6 @@ import commands, errno, fcntl, os, re, shutil, stat, sys, time, tempfile, traceback import apt_inst, apt_pkg -import syck import daklib.database import daklib.logging import daklib.queue @@ -38,7 +37,6 @@ import daklib.utils from types import * - ################################################################################ re_valid_version = re.compile(r"^([0-9]+:)?[0-9A-Za-z\.\-\+:~]+$") @@ -1000,63 +998,6 @@ def check_timestamps(): except: reject("%s: deb contents timestamp check failed [%s: %s]" % (filename, sys.exc_type, sys.exc_value)) -################################################################################ -################################################################################ - -# We reject packages if the release team defined a transition for them -def check_transition(sourcepkg): - # No sourceful upload -> no need to do anything else, direct return - if changes["architecture"].has_key("source"): - return - - # Also only check if there is a file defined (and existant) with checks. It's a little bit - # specific to Debian, not much use for others, so return early there. - if not Cnf.has_key("Dinstall::Reject::ReleaseTransitions") or not os.path.exists("%s" % (Cnf["Dinstall::Reject::ReleaseTransitions"])): - return - - # Parse the yaml file - sourcefile = file(Cnf["Dinstall::Reject::ReleaseTransitions"], 'r') - sourcecontent = sourcefile.read() - try: - transitions = syck.load(sourcecontent) - except syck.error, msg: - # This shouldn't happen, there is a wrapper to edit the file which checks it, but we prefer - # to be safe than ending up rejecting everything. - daklib.utils.warn("Not checking transitions, the transitions file is broken: %s." % (msg)) - return - - # Now look through all defined transitions - for trans in transitions: - t = transitions[trans] - source = t["source"] - expected = t["new"] - - # Will be None if nothing is in testing. - current = daklib.database.get_suite_version(source, "testing") - if not current == None: - compare = apt_pkg.VersionCompare(current, expected) - - if current == None or compare < 0: - # This is still valid, the current version in testing is older than - # the new version we wait for, or there is none in testing yet - - # Check if the source we look at is affected by this. - if sourcepkg in t['packages']: - # The source is affected, lets reject it. - reject("""%s: part of the %s transition. - -Your package is part of a testing transition designed to get %s migrated -(it currently is at version %s, we need version %s) - -Transition description: %s - -This transition is managed by the Release Team, and %s -is the Release-Team member responsible for it. -Please contact %s or debian-release@lists.debian.org if you -need further assistance. - """ % (sourcepkg, trans, source, current, expected, t["reason"], t["rm"], t["rm"])) - return 0 - ################################################################################ def lookup_uid_from_fingerprint(fpr): @@ -1581,7 +1522,6 @@ def process_it (changes_file): check_urgency() check_timestamps() check_signed_by_key() - check_transition(changes["source"]) Upload.update_subst(reject_message) action() except SystemExit: