]> git.decadent.org.uk Git - dak.git/commitdiff
merge from joerg
authorAnthony Towns <aj@azure.humbug.org.au>
Fri, 21 Mar 2008 16:57:26 +0000 (16:57 +0000)
committerAnthony Towns <aj@azure.humbug.org.au>
Fri, 21 Mar 2008 16:57:26 +0000 (16:57 +0000)
ChangeLog
config/debian/extensions.py
dak/edit_transitions.py

index d269ff65f98bf8ff157b0578bd87f57d0e681f17..8766c80f35906c88722ebd9ac7b7bff4d04c1094 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+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
index 9823b29c5fd1f563adffb89f4207194429f9d4fe..51c9f82a3f9a4ef4076b4f432f87c39bef846139 100644 (file)
@@ -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
index 15cc8dc4d2a34f2cc5d0ce71c914fd67fd19dcb4..e283a46a3499153a86c9491a95f284b26811cdd4 100755 (executable)
@@ -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():