提交 df610ec6 编写于 作者: M Mike O'Connor

Merge commit 'public/knownchanges' into knownchanges

#!/usr/bin/env python
# coding=utf8
"""
Move to using the C version of debversion
@contact: Debian FTP Master <ftpmaster@debian.org>
@copyright: 2009 Mark Hymers <mhy@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
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))
......@@ -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__':
......
......@@ -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
......
......@@ -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
......
......@@ -44,7 +44,7 @@ from daklib.dak_exceptions import DBUpdateError
################################################################################
Cnf = None
required_database_schema = 16
required_database_schema = 19
################################################################################
......
......@@ -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"],
......
......@@ -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']
################################################################################
......
......@@ -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
......
......@@ -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 <regular expression> CONTENTS.gz':
`zgrep <regular expression> 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 <filename>':
$ 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
......@@ -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__:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册