]> git.decadent.org.uk Git - dak.git/commitdiff
Merge remote-tracking branch 'origin/master' into auditpackages
authorAnsgar Burchardt <ansgar@debian.org>
Wed, 24 Aug 2011 12:34:13 +0000 (14:34 +0200)
committerAnsgar Burchardt <ansgar@debian.org>
Wed, 24 Aug 2011 12:34:13 +0000 (14:34 +0200)
Conflicts:
dak/update_db.py

config/debian/dinstall.functions
config/debian/vars
dak/admin.py
dak/control_suite.py
dak/dakdb/update66.py [new file with mode: 0755]
dak/rm.py
daklib/dbconn.py

index c4a25a61396f561d9e140d8051984cc77600cbd5..ed6f48bcb5c4acf427ca51c0881737dd489b171a 100644 (file)
@@ -243,22 +243,10 @@ function mkmaintainers() {
 function copyoverrides() {
     log 'Copying override files into public view ...'
 
-    for ofile in $copyoverrides ; do
-           cd $overridedir
-           chmod g+w override.$ofile
-
-           cd $indices
-
-           newofile=override.$ofile.gz
-           rm -f .newover-$ofile.gz
-           pc="`gzip 2>&1 -9nv <$overridedir/override.$ofile >.newover-$ofile.gz`"
-        if ! cmp -s .newover-$ofile.gz $newofile || [ ! -f $newofile ]; then
-                   log "   installing new $newofile $pc"
-                   mv -f .newover-$ofile.gz $newofile
-                   chmod g+w $newofile
-        else
-                   rm -f .newover-$ofile.gz
-           fi
+    for ofile in ${overridedir}/override.{lenny,squeeze,wheezy,sid}.{,extra.}{main,contrib,non-free}*; do
+        bname=${ofile##*/}
+        gzip -9cv --rsyncable ${ofile} > ${indices}/${bname}.gz
+        chmod g+w ${indices}/${bname}.gz
     done
 }
 
index 19dee850447b05a30e59ae597be21db5bc72ead3..cea5344f8e73d423ee56d32ee81cd24e7b702e9f 100644 (file)
@@ -30,8 +30,6 @@ exportpublic=$public/rsync/export/
 
 ftpgroup=debadmin
 
-copyoverrides="wheezy.contrib wheezy.contrib.src wheezy.main wheezy.main.src wheezy.non-free wheezy.non-free.src wheezy.extra.main wheezy.extra.non-free wheezy.extra.contrib wheezy.main.debian-installer sid.contrib sid.contrib.src sid.main sid.main.debian-installer sid.main.src sid.non-free sid.non-free.src sid.extra.contrib sid.extra.main sid.extra.non-free lenny.contrib lenny.contrib.src lenny.main lenny.main.src lenny.non-free lenny.non-free.src lenny.extra.main lenny.extra.contrib lenny.extra.non-free squeeze.contrib squeeze.contrib.src squeeze.main squeeze.main.src squeeze.non-free squeeze.non-free.src squeeze.extra.main squeeze.extra.contrib squeeze.extra.non-free"
-
 TMPDIR=${base}/tmp
 
 PATH=$masterdir:$PATH
index c6128b9befb0fc3c86792e41c9472538b1809bfa..fe369b51a753ca08add8ad22657e94f4644a4c9e 100755 (executable)
@@ -100,7 +100,7 @@ Perform administrative work on the dak database.
      v-c list                        show version checks for all suites
      v-c list-suite SUITE            show version checks for suite SUITE
      v-c add SUITE CHECK REFERENCE   add a version check for suite SUITE
-     v-c rm SUITE CHECK REFERENCE    rmove a version check
+     v-c rm SUITE CHECK REFERENCE    remove a version check
        where
          CHECK     is one of Enhances, MustBeNewerThan, MustBeOlderThan
         REFERENCE is another suite name
index ed4f6b1ace28e3dcb255cbfe9a48d3c17b1409f7..6dd79b8fd258f113b3bcb90a9cea53984001f0f5 100755 (executable)
@@ -193,6 +193,17 @@ def version_checks(package, architecture, target_suite, new_version, session, fo
 
 #######################################################################################
 
+def cmp_package_version(a, b):
+    """
+    comparison function for tuples of the form (package-name, version ...)
+    """
+    cmp_package = cmp(a[0], b[0])
+    if cmp_package != 0:
+        return cmp_package
+    return apt_pkg.VersionCompare(a[1], b[1])
+
+#######################################################################################
+
 def set_suite(file, suite, session, britney=False, force=False):
     suite_id = suite.suite_id
     lines = file.readlines()
@@ -227,19 +238,8 @@ def set_suite(file, suite, session, britney=False, force=False):
         key = " ".join(split_line)
         desired[key] = ""
 
-    # Check to see which packages need removed and remove them
-    for key in current.keys():
-        if not desired.has_key(key):
-            (package, version, architecture) = key.split()
-            pkid = current[key]
-            if architecture == "source":
-                session.execute("""DELETE FROM src_associations WHERE id = :pkid""", {'pkid': pkid})
-            else:
-                session.execute("""DELETE FROM bin_associations WHERE id = :pkid""", {'pkid': pkid})
-            Logger.log(["removed", key, pkid])
-
     # Check to see which packages need added and add them
-    for key in desired.keys():
+    for key in sorted(desired.keys(), cmp=cmp_package_version):
         if not current.has_key(key):
             (package, version, architecture) = key.split()
             version_checks(package, architecture, suite.suite_name, version, session, force)
@@ -254,6 +254,17 @@ def set_suite(file, suite, session, britney=False, force=False):
                                         VALUES (:suiteid, :pkid)""", {'suiteid': suite_id, 'pkid': pkid})
             Logger.log(["added", key, pkid])
 
+    # Check to see which packages need removed and remove them
+    for key in current.keys():
+        if not desired.has_key(key):
+            (package, version, architecture) = key.split()
+            pkid = current[key]
+            if architecture == "source":
+                session.execute("""DELETE FROM src_associations WHERE id = :pkid""", {'pkid': pkid})
+            else:
+                session.execute("""DELETE FROM bin_associations WHERE id = :pkid""", {'pkid': pkid})
+            Logger.log(["removed", key, pkid])
+
     session.commit()
 
     if britney:
@@ -268,17 +279,19 @@ def process_file(file, suite, action, session, britney=False, force=False):
 
     suite_id = suite.suite_id
 
-    lines = file.readlines()
+    request = []
 
     # Our session is already in a transaction
-    for line in lines:
+    for line in file:
         split_line = line.strip().split()
         if len(split_line) != 3:
             utils.warn("'%s' does not break into 'package version architecture'." % (line[:-1]))
             continue
+        request.append(split_line)
 
-        (package, version, architecture) = split_line
+    request.sort(cmp=cmp_package_version)
 
+    for package, version, architecture in request:
         pkid = get_id(package, version, architecture, session)
         if not pkid:
             continue
diff --git a/dak/dakdb/update66.py b/dak/dakdb/update66.py
new file mode 100755 (executable)
index 0000000..af61c04
--- /dev/null
@@ -0,0 +1,60 @@
+#!/usr/bin/env python
+# coding=utf8
+
+"""
+Add 2 partial indexes to speed up dak rm.
+
+@contact: Debian FTP Master <ftpmaster@debian.org>
+@copyright: 2011 Torsten Werner <twerner@debian.org>
+@license: GNU General Public License version 2 or later
+"""
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+################################################################################
+
+import psycopg2
+from daklib.dak_exceptions import DBUpdateError
+from daklib.config import Config
+
+################################################################################
+def do_update(self):
+    """
+    Add 2 partial indexes to speed up dak rm.
+    """
+    print __doc__
+    try:
+        cnf = Config()
+
+        c = self.db.cursor()
+
+        # partial index for Depends
+        c.execute("SELECT key_id FROM metadata_keys WHERE key = 'Depends'")
+        key = c.fetchone()[0]
+        c.execute("""CREATE INDEX binaries_metadata_depends
+            ON binaries_metadata (bin_id) WHERE key_id = %d""" % key)
+
+        # partial index for Provides
+        c.execute("SELECT key_id FROM metadata_keys WHERE key = 'Provides'")
+        key = c.fetchone()[0]
+        c.execute("""CREATE INDEX binaries_metadata_provides
+            ON binaries_metadata (bin_id) WHERE key_id = %d""" % key)
+
+        c.execute("UPDATE config SET value = '66' WHERE name = 'db_revision'")
+        self.db.commit()
+
+    except psycopg2.ProgrammingError, msg:
+        self.db.rollback()
+        raise DBUpdateError, 'Unable to apply sick update 66, rollback issued. Error message : %s' % (str(msg))
index 0583755b3b6bc4c048af6d395b51f599edcf3bec..d0b46f62234b2033770d4b18fdcd98fd9a694dd3 100755 (executable)
--- a/dak/rm.py
+++ b/dak/rm.py
@@ -51,7 +51,7 @@ from daklib.config import Config
 from daklib.dbconn import *
 from daklib import utils
 from daklib.dak_exceptions import *
-from daklib.regexes import re_strip_source_version, re_build_dep_arch
+from daklib.regexes import re_strip_source_version, re_build_dep_arch, re_bin_only_nmu
 import debianbts as bts
 
 ################################################################################
@@ -126,16 +126,11 @@ def reverse_depends_check(removals, suite, arches=None, session=None):
         params['arch_id'] = get_architecture(architecture, session).arch_id
 
         statement = '''
-            create temp table suite_binaries (
-                id integer primary key,
-                package text,
-                source integer,
-                file integer);
-            insert into suite_binaries
-                select b.id, b.package, b.source, b.file
+            WITH suite_binaries AS
+                (select b.id, b.package, b.source, b.file
                     from binaries b WHERE b.id in
                         (SELECT bin FROM bin_associations WHERE suite = :suite_id)
-                        AND b.architecture in (:arch_id, :arch_all_id);
+                        AND b.architecture in (:arch_id, :arch_all_id))
             SELECT b.id, b.package, s.source, c.name as component,
                 bmd.value as depends, bmp.value as provides
                 FROM suite_binaries b
@@ -671,6 +666,7 @@ def main ():
         Subst_close_other = Subst_common
         bcc = []
         wnpp = utils.parse_wnpp_bug_file()
+        versions = list(set([re_bin_only_nmu.sub('', v) for v in versions]))
         if len(versions) == 1:
             Subst_close_other["__VERSION__"] = versions[0]
         else:
index 1fa7974f5d0f5e2f2cdd4101c1621722bf86a731..637301871a6bf4495036d8a004d7d3d8086f7fa2 100755 (executable)
@@ -81,6 +81,9 @@ import warnings
 warnings.filterwarnings('ignore', \
     "The SQLAlchemy PostgreSQL dialect has been renamed from 'postgres' to 'postgresql'.*", \
     SADeprecationWarning)
+warnings.filterwarnings('ignore', \
+    "Predicate of partial index .* ignored during reflection", \
+    SAWarning)
 
 
 ################################################################################