]> git.decadent.org.uk Git - dak.git/blobdiff - dak/override.py
Adjust to deal with the new Debian supplementaryGid
[dak.git] / dak / override.py
index ddb829b621a2bdb5beb95db1b56bed38504d7b6a..1d43a62579fe08012426cb5dcd1fc2d435c50883 100755 (executable)
@@ -49,40 +49,37 @@ def usage (exit_code=0):
 Make microchanges or microqueries of the binary overrides
 
   -h, --help                 show this help and exit
-  -c, --check                chech override compliance
+  -c, --check                check override compliance
   -d, --done=BUG#            send priority/section change as closure to bug#
   -n, --no-action            don't do anything
   -s, --suite                specify the suite to use
 """
     sys.exit(exit_code)
 
-def check_override_compliance(package, priority, suite, cnf, session):
+def check_override_compliance(package, priority, archive_path, suite_name, cnf, session):
     print "Checking compliance with related overrides..."
 
     depends = set()
     rdepends = set()
-    components = cnf.ValueList("Suite::%s::Components" % suite)
-    arches = set([x.arch_string for x in get_suite_architectures(suite)])
+    components = get_component_names(session)
+    arches = set([x.arch_string for x in get_suite_architectures(suite_name)])
     arches -= set(["source", "all"])
     for arch in arches:
         for component in components:
-            temp_filename = utils.get_packages_from_ftp(cnf['Dir::Root'], suite, component, arch)
-            packages = utils.open_file(temp_filename)
-            Packages = apt_pkg.ParseTagFile(packages)
-            while Packages.Step():
-                package_name = Packages.Section.Find("Package")
-                dep_list = Packages.Section.Find("Depends")
+            Packages = utils.get_packages_from_ftp(archive_path, suite_name, component, arch)
+            while Packages.step():
+                package_name = Packages.section.find("Package")
+                dep_list = Packages.section.find("Depends")
                 if dep_list:
                     if package_name == package:
-                        for d in apt_pkg.ParseDepends(dep_list):
+                        for d in apt_pkg.parse_depends(dep_list):
                             for i in d:
                                 depends.add(i[0])
                     else:
-                        for d in apt_pkg.ParseDepends(dep_list):
+                        for d in apt_pkg.parse_depends(dep_list):
                             for i in d:
                                 if i[0] == package:
                                     rdepends.add(package_name)
-            os.unlink(temp_filename)
 
     query = """SELECT o.package, p.level, p.priority
                FROM override o
@@ -90,7 +87,7 @@ def check_override_compliance(package, priority, suite, cnf, session):
                JOIN priority p ON p.id = o.priority
                WHERE s.suite_name = '%s'
                AND o.package in ('%s')""" \
-               % (suite, "', '".join(depends.union(rdepends)))
+               % (suite_name, "', '".join(depends.union(rdepends)))
     packages = session.execute(query)
 
     excuses = []
@@ -127,8 +124,8 @@ def main ():
     if not cnf.has_key("Override::Options::Suite"):
         cnf["Override::Options::Suite"] = "unstable"
 
-    arguments = apt_pkg.ParseCommandLine(cnf.Cnf, Arguments, sys.argv)
-    Options = cnf.SubTree("Override::Options")
+    arguments = apt_pkg.parse_commandline(cnf.Cnf, Arguments, sys.argv)
+    Options = cnf.subtree("Override::Options")
 
     if Options["Help"]:
         usage()
@@ -139,10 +136,14 @@ def main ():
         utils.fubar("package name is a required argument.")
 
     package = arguments.pop(0)
-    suite = Options["Suite"]
+    suite_name = Options["Suite"]
     if arguments and len(arguments) > 2:
         utils.fubar("Too many arguments")
 
+    suite = get_suite(suite_name, session)
+    if suite is None:
+        utils.fubar("Unknown suite '{0}'".format(suite_name))
+
     if arguments and len(arguments) == 1:
         # Determine if the argument is a priority or a section...
         arg = arguments.pop()
@@ -173,8 +174,8 @@ def main ():
        AND override.section = section.id
        AND override.package = :package
        AND override.suite = suite.id
-       AND suite.suite_name = :suite
-        """ % (eqdsc), {'package': package, 'suite': suite})
+       AND suite.suite_name = :suite_name
+        """ % (eqdsc), {'package': package, 'suite_name': suite_name})
 
         if q.rowcount == 0:
             continue
@@ -230,7 +231,7 @@ def main ():
         utils.fubar("Trying to change priority of a source-only package")
 
     if Options["Check"] and newpriority != oldpriority:
-        check_override_compliance(package, p, suite, cnf, session)
+        check_override_compliance(package, p, suite.archive.path, suite_name, cnf, session)
 
     # If we're in no-action mode
     if Options["No-Action"]:
@@ -257,7 +258,7 @@ def main ():
 
     game_over()
 
-    Logger = daklog.Logger(cnf.Cnf, "override")
+    Logger = daklog.Logger("override")
 
     dsc_otype_id = get_override_type('dsc').overridetype_id
 
@@ -269,9 +270,9 @@ def main ():
            SET priority = :newprioid
          WHERE package = :package
            AND override.type != :otypedsc
-           AND suite = (SELECT id FROM suite WHERE suite_name = :suite)""",
+           AND suite = (SELECT id FROM suite WHERE suite_name = :suite_name)""",
            {'newprioid': newprioid, 'package': package,
-            'otypedsc':  dsc_otype_id, 'suite': suite})
+            'otypedsc':  dsc_otype_id, 'suite_name': suite_name})
 
         Logger.log(["changed priority", package, oldpriority, newpriority])
 
@@ -280,33 +281,41 @@ def main ():
         UPDATE override
            SET section = :newsecid
          WHERE package = :package
-           AND suite = (SELECT id FROM suite WHERE suite_name = :suite)""",
+           AND suite = (SELECT id FROM suite WHERE suite_name = :suite_name)""",
            {'newsecid': newsecid, 'package': package,
-            'suite': suite})
+            'suite_name': suite_name})
 
         Logger.log(["changed section", package, oldsection, newsection])
 
     session.commit()
 
     if Options.has_key("Done"):
+        if not cnf.has_key("Dinstall::BugServer"):
+            utils.warn("Asked to send Done message but Dinstall::BugServer is not configured")
+            Logger.close()
+            return
+
         Subst = {}
         Subst["__OVERRIDE_ADDRESS__"] = cnf["Dinstall::MyEmailAddress"]
         Subst["__BUG_SERVER__"] = cnf["Dinstall::BugServer"]
         bcc = []
-        if cnf.Find("Dinstall::Bcc") != "":
+        if cnf.find("Dinstall::Bcc") != "":
             bcc.append(cnf["Dinstall::Bcc"])
         if bcc:
             Subst["__BCC__"] = "Bcc: " + ", ".join(bcc)
         else:
             Subst["__BCC__"] = "X-Filler: 42"
-        Subst["__CC__"] = "Cc: " + package + "@" + cnf["Dinstall::PackagesServer"] + "\nX-DAK: dak override"
+        if cnf.has_key("Dinstall::PackagesServer"):
+            Subst["__CC__"] = "Cc: " + package + "@" + cnf["Dinstall::PackagesServer"] + "\nX-DAK: dak override"
+        else:
+            Subst["__CC__"] = "X-DAK: dak override"
         Subst["__ADMIN_ADDRESS__"] = cnf["Dinstall::MyAdminAddress"]
         Subst["__DISTRO__"] = cnf["Dinstall::MyDistribution"]
         Subst["__WHOAMI__"] = utils.whoami()
         Subst["__SOURCE__"] = package
 
         summary = "Concerning package %s...\n" % (package)
-        summary += "Operating on the %s suite\n" % (suite)
+        summary += "Operating on the %s suite\n" % (suite_name)
         if newpriority != oldpriority:
             summary += "Changed priority from %s to %s\n" % (oldpriority,newpriority)
         if newsection != oldsection: