+2008-03-21 Joerg Jaspert <joerg@debian.org>
+
+ * 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 <ajt@debian.org>
* config/debian/extensions.py: Add infrastructure for replacing
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
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
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
################################################################################
-import os, pg, sys, time
+import os, pg, sys, time, errno
import apt_pkg
import daklib.database
import daklib.utils
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")
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)
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
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():