From: Anthony Towns Date: Fri, 21 Mar 2008 16:57:26 +0000 (+0000) Subject: merge from joerg X-Git-Url: https://git.decadent.org.uk/gitweb/?a=commitdiff_plain;h=74dbcfb0868204288f5142a7b7cec4a18ce31836;hp=da0da02412e7b6a51a88a7ffcbe50893c28a81b9;p=dak.git merge from joerg --- diff --git a/ChangeLog b/ChangeLog index d269ff65..8766c80f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-03-21 Joerg Jaspert + + * dak/edit_transitions.py (edit_transitions): Use sudo to copy the + edited file back in place + (check_transitions): Use proper locking and also use sudo to copy + the new file in place + 2008-03-21 Anthony Towns * config/debian/extensions.py: Add infrastructure for replacing diff --git a/config/debian/extensions.py b/config/debian/extensions.py index 9823b29c..51c9f82a 100644 --- a/config/debian/extensions.py +++ b/config/debian/extensions.py @@ -15,7 +15,9 @@ def check_transition(): sourcepkg = changes["source"] # No sourceful upload -> no need to do anything else, direct return - if "source" not in changes["architecture"]: + # We also work with unstable uploads, not experimental or those going to some + # proposed-updates queue + if "source" not in changes["architecture"] or "unstable" not in changes["distribution"]: return # Also only check if there is a file defined (and existant) with @@ -32,7 +34,7 @@ def check_transition(): 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. + # everything. daklib.utils.warn("Not checking transitions, the transitions file is broken: %s." % (msg)) return @@ -55,22 +57,23 @@ def check_transition(): if sourcepkg in t['packages']: # The source is affected, lets reject it. - rejectmsg = "%s: part of the %s transition.\n\n" % ( - sourcepkg, trans) - rejectmsg += "Transition description: %s\n\n" % (t["reason"]) + 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" + if current is not None: + currentlymsg = "at version %s" % (current) + else: + currentlymsg = "not present in testing" - rejectmsg += "\n".join(textwrap.wrap("""Your package + 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. +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"]))) + % (source, currentlymsg, expected,t["rm"], t["rm"]))) reject(rejectmsg + "\n") return diff --git a/dak/edit_transitions.py b/dak/edit_transitions.py index 15cc8dc4..e283a46a 100755 --- a/dak/edit_transitions.py +++ b/dak/edit_transitions.py @@ -24,7 +24,7 @@ ################################################################################ -import os, pg, sys, time +import os, pg, sys, time, errno import apt_pkg import daklib.database import daklib.utils @@ -102,11 +102,11 @@ def lock_file(lockfile): def edit_transitions(): trans_file = Cnf["Dinstall::Reject::ReleaseTransitions"] - tempfile = "./%s.transition.tmp" % (os.getpid() ) - - lockfile="%s.lock" % (tempfile) + lockfile="/tmp/transitions.lock" lock_file(lockfile) + tempfile = "./%s.transition.tmp" % (os.getpid() ) + daklib.utils.copy(trans_file, tempfile) editor = os.environ.get("EDITOR", "vi") @@ -144,7 +144,11 @@ def edit_transitions(): break # We seem to be done and also have a working file. Copy over. - daklib.utils.copy(tempfile, trans_file, True) + # We are not using daklib.utils.copy here, as we use sudo to get this file copied, to + # limit the rights needed to edit transitions + os.spawnl(os.P_WAIT, "/usr/bin/sudo", "/usr/bin/sudo", "-u", "dak", "-H", + "cp", tempfile, trans_file) + os.unlink(tempfile) os.unlink(lockfile) @@ -230,7 +234,6 @@ def check_transitions(transitions): print "Transition source %s not in testing, transition still ongoing." % (source) else: compare = apt_pkg.VersionCompare(current, expected) - print "Apt compare says: %s" % (compare) if compare < 0: # This is still valid, the current version in database is older than # the new version we wait for @@ -266,14 +269,25 @@ def check_transitions(transitions): print "Committing" for remove in to_remove: del transitions[remove] - destfile = file(Cnf["Dinstall::Reject::ReleaseTransitions"], 'w') + + lockfile="/tmp/transitions.lock" + lock_file(lockfile) + tempfile = "./%s.transition.tmp" % (os.getpid() ) + + destfile = file(tempfile, 'w') syck.dump(transitions, destfile) + destfile.close() + + os.spawnl(os.P_WAIT, "/usr/bin/sudo", "/usr/bin/sudo", "-u", "dak", "-H", + "cp", tempfile, Cnf["Dinstall::Reject::ReleaseTransitions"]) + + os.unlink(tempfile) + os.unlink(lockfile) print "Done" else: print "WTF are you typing?" sys.exit(0) - ################################################################################ def main():