From: Mike O'Connor Date: Fri, 30 Oct 2009 12:03:07 +0000 (+0000) Subject: Merge commit 'public/knownchanges' into knownchanges X-Git-Url: https://git.decadent.org.uk/gitweb/?a=commitdiff_plain;h=df610ec6b921b869c4e4a25629a0aff3f13a03ae;hp=efda164c1f3209e2522f222dfb6553736a10449c;p=dak.git Merge commit 'public/knownchanges' into knownchanges --- diff --git a/dak/dakdb/update19.py b/dak/dakdb/update19.py new file mode 100755 index 00000000..49a4dbc7 --- /dev/null +++ b/dak/dakdb/update19.py @@ -0,0 +1,107 @@ +#!/usr/bin/env python +# coding=utf8 + +""" +Move to using the C version of debversion + +@contact: Debian FTP Master +@copyright: 2009 Mark Hymers +@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 +import time +import os +import datetime +import traceback + +from daklib.dak_exceptions import DBUpdateError +from daklib.config import Config + +################################################################################ + +def do_update(self): + print "Converting database to use new C based debversion type" + + try: + c = self.db.cursor() + + print "Temporarily converting columns to TEXT" + c.execute("ALTER TABLE binaries ALTER COLUMN version TYPE TEXT") + c.execute("ALTER TABLE source ALTER COLUMN version TYPE TEXT") + c.execute("ALTER TABLE upload_blocks ALTER COLUMN version TYPE TEXT") + c.execute("ALTER TABLE pending_content_associations ALTER COLUMN version TYPE TEXT") + + print "Dropping old debversion type" + c.execute("DROP OPERATOR >(debversion, debversion)") + c.execute("DROP OPERATOR <(debversion, debversion)") + c.execute("DROP OPERATOR <=(debversion, debversion)") + c.execute("DROP OPERATOR >=(debversion, debversion)") + c.execute("DROP OPERATOR =(debversion, debversion)") + c.execute("DROP OPERATOR <>(debversion, debversion)") + c.execute("DROP FUNCTION debversion_eq(debversion,debversion)") + c.execute("DROP FUNCTION debversion_ge(debversion,debversion)") + c.execute("DROP FUNCTION debversion_gt(debversion,debversion)") + c.execute("DROP FUNCTION debversion_le(debversion,debversion)") + c.execute("DROP FUNCTION debversion_lt(debversion,debversion)") + c.execute("DROP FUNCTION debversion_ne(debversion,debversion)") + c.execute("DROP FUNCTION debversion_compare(debversion,debversion)") + c.execute("DROP FUNCTION debversion_revision(debversion)") + c.execute("DROP FUNCTION debversion_version(debversion)") + c.execute("DROP FUNCTION debversion_epoch(debversion)") + c.execute("DROP FUNCTION debversion_split(debversion)") + c.execute("DROP TYPE debversion") + + # URGH - kill me now + print "Importing new debversion type" + f = open('/usr/share/postgresql/8.4/contrib/debversion.sql', 'r') + cmds = [] + curcmd = '' + for j in f.readlines(): + j = j.replace('\t', '').replace('\n', '').split('--')[0] + if not j.startswith('--'): + jj = j.split(';') + curcmd += " " + jj[0] + if len(jj) > 1: + for jjj in jj[1:]: + if jjj.strip() == '': + cmds.append(curcmd) + curcmd = '' + else: + curcmd += " " + jjj + + for cm in cmds: + c.execute(cm) + + print "Converting columns to new debversion type" + c.execute("ALTER TABLE binaries ALTER COLUMN version TYPE debversion") + c.execute("ALTER TABLE source ALTER COLUMN version TYPE debversion") + c.execute("ALTER TABLE upload_blocks ALTER COLUMN version TYPE debversion") + c.execute("ALTER TABLE pending_content_associations ALTER COLUMN version TYPE debversion") + + print "Committing" + c.execute("UPDATE config SET value = '19' WHERE name = 'db_revision'") + self.db.commit() + + except psycopg2.InternalError, msg: + self.db.rollback() + raise DBUpdateError, "Unable to apply debversion update 19, rollback issued. Error message : %s" % (str(msg)) diff --git a/dak/import_known_changes.py b/dak/import_known_changes.py index 475c8f76..b403a808 100755 --- a/dak/import_known_changes.py +++ b/dak/import_known_changes.py @@ -168,6 +168,10 @@ class ChangesGenerator(threading.Thread): threading.Thread.__init__(self) self.queue = queue self.session = DBConn().session() + self.die = False + + def plsDie(self): + self.die = True def run(self): cnf = Config() @@ -181,6 +185,9 @@ class ChangesGenerator(threading.Thread): if not filenames: # Empty directory (or only subdirectories), next continue + if self.die: + return + for changesfile in filenames: if not changesfile.endswith(".changes"): # Only interested in changes files. @@ -198,10 +205,16 @@ class ImportThread(threading.Thread): threading.Thread.__init__(self) self.queue = queue self.session = DBConn().session() + self.die = False + + def plsDie(self): + self.die = True def run(self): while True: try: + if self.die: + return to_import = self.queue.dequeue() if not to_import: return @@ -266,10 +279,25 @@ def main(): queue = OneAtATime() - ChangesGenerator(queue).start() + threads = [ ChangesGenerator(queue) ] for i in range(num_threads): - ImportThread(queue).start() + threads.append( ImportThread(queue) ) + + try: + for thread in threads: + thread.start() + + for thread in thrads: + thread.join() + + except KeyboardInterrupt: + utils.warn("Caught C-c; terminating.") + for thread in threads: + thread.plsDie() + + for thread in threads: + thread.join() if __name__ == '__main__': diff --git a/dak/process_unchecked.py b/dak/process_unchecked.py index 886fb689..8a3e49d1 100755 --- a/dak/process_unchecked.py +++ b/dak/process_unchecked.py @@ -102,7 +102,7 @@ def init(): ################################################################################ def usage (exit_code=0): - print """Usage: dinstall [OPTION]... [CHANGES]... + print """Usage: dak process-unchecked [OPTION]... [CHANGES]... -a, --automatic automatic run -h, --help show this help and exit. -n, --no-action don't do anything diff --git a/dak/rm.py b/dak/rm.py index be3e1676..69b35971 100755 --- a/dak/rm.py +++ b/dak/rm.py @@ -554,7 +554,10 @@ def main (): if carbon_copy: Subst["__CC__"] += "\nCc: " + ", ".join(carbon_copy) Subst["__SUITE_LIST__"] = suites_list - Subst["__SUMMARY__"] = summary + summarymail = "%s\n------------------- Reason -------------------\n%s\n" % (summary, Options["Reason"]) + summarymail += "----------------------------------------------\n" + Subst["__SUMMARY__"] = summarymail + Subst["__SUBJECT__"] = "Removed package(s) from %s" % (suites_list) Subst["__ADMIN_ADDRESS__"] = cnf["Dinstall::MyAdminAddress"] Subst["__DISTRO__"] = cnf["Dinstall::MyDistribution"] Subst["__WHOAMI__"] = whoami diff --git a/dak/update_db.py b/dak/update_db.py index c54971cf..e9dfa9a7 100755 --- a/dak/update_db.py +++ b/dak/update_db.py @@ -44,7 +44,7 @@ from daklib.dak_exceptions import DBUpdateError ################################################################################ Cnf = None -required_database_schema = 16 +required_database_schema = 19 ################################################################################ diff --git a/daklib/changes.py b/daklib/changes.py index 2413bf4c..90ce2311 100755 --- a/daklib/changes.py +++ b/daklib/changes.py @@ -215,7 +215,7 @@ class Changes(object): distribution, urgency, maintainer, fingerprint, changedby, date) VALUES (:changesfile,:filetime,:source,:binary, :architecture, :version,:distribution,:urgency,:maintainer,:fingerprint,:changedby,:date)""", - { 'changesfile':changesfile, + { 'changesfile':self.changes_file, 'filetime':filetime, 'source':self.changes["source"], 'binary':self.changes["binary"], diff --git a/daklib/dbconn.py b/daklib/dbconn.py index 72b072c1..45e000d3 100755 --- a/daklib/dbconn.py +++ b/daklib/dbconn.py @@ -40,8 +40,10 @@ import traceback from inspect import getargspec +import sqlalchemy from sqlalchemy import create_engine, Table, MetaData from sqlalchemy.orm import sessionmaker, mapper, relation +from sqlalchemy import types as sqltypes # Don't remove this, we re-export the exceptions to scripts which import us from sqlalchemy.exc import * @@ -55,6 +57,22 @@ from textutils import fix_maintainer ################################################################################ +# Patch in support for the debversion field type so that it works during +# reflection + +class DebVersion(sqltypes.Text): + def get_col_spec(self): + return "DEBVERSION" + +sa_major_version = sqlalchemy.__version__[0:3] +if sa_major_version == "0.5": + from sqlalchemy.databases import postgres + postgres.ischema_names['debversion'] = DebVersion +else: + raise Exception("dak isn't ported to SQLA versions != 0.5 yet. See daklib/dbconn.py") + +################################################################################ + __all__ = ['IntegrityError', 'SQLAlchemyError'] ################################################################################ diff --git a/daklib/utils.py b/daklib/utils.py index 29b6032a..0b9fa841 100755 --- a/daklib/utils.py +++ b/daklib/utils.py @@ -73,6 +73,9 @@ def dak_getstatusoutput(cmd): output = "".join(pipe.stdout.readlines()) + if output[-1:] == '\n': + output = output[:-1] + ret = pipe.wait() if ret is None: ret = 0 diff --git a/templates/contents b/templates/contents index 48950314..1021da45 100644 --- a/templates/contents +++ b/templates/contents @@ -12,22 +12,24 @@ the first is listed. As all Contents files are shipped compressed, the best way to search quickly for a file is with the Unix `zgrep' utility, as in: - `zgrep CONTENTS.gz': + `zgrep CONTENTSFILE.gz': - $ zgrep nose Contents.gz - etc/nosendfile net/sendfile - usr/X11R6/bin/noseguy x11/xscreensaver - usr/X11R6/man/man1/noseguy.1x.gz x11/xscreensaver - usr/doc/examples/ucbmpeg/mpeg_encode/nosearch.param graphics/ucbmpeg - usr/lib/cfengine/bin/noseyparker admin/cfengine + $ zgrep -i debian/ Contents-amd64.gz + usr/share/IlohaMail/debian/Ilohamail.apache web/ilohamail + usr/share/R/debian/r-cran.mk devel/r-base-dev + usr/share/apt-listbugs/debian/apt_preferences.rb admin/apt-listbugs + usr/share/apt-listbugs/debian/bts.rb admin/apt-listbugs + usr/share/apt-listbugs/debian/btssoap.rb admin/apt-listbugs + usr/share/apt-listbugs/debian/bug.rb admin/apt-listbugs + usr/share/apt-listbugs/debian/mytempfile.rb admin/apt-listbugs This list contains files in all packages, even though not all of the packages are installed on an actual system at once. If you want to find out which packages on an installed Debian system provide a particular file, you can use `dpkg --search ': - $ dpkg --search /usr/bin/dselect - dpkg: /usr/bin/dselect + $ dpkg --search apt-get + apt: /usr/bin/apt-get -FILE LOCATION \ No newline at end of file +FILE LOCATION diff --git a/templates/rm.bug-close b/templates/rm.bug-close index 7e521e8a..78addd22 100644 --- a/templates/rm.bug-close +++ b/templates/rm.bug-close @@ -6,7 +6,7 @@ X-Debian: DAK MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit -Subject: Bug#__BUG_NUMBER__: fixed +Subject: Bug#__BUG_NUMBER__: __SUBJECT__ We believe that the bug you reported is now fixed; the following package(s) have been removed from __SUITE_LIST__: