X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Fdbconn.py;h=5aa1cf5db87490c0f160ff103e75f91bf07e2f09;hb=1b70efbb284c409256589036ffe6d54c832421ea;hp=80a1f233ad29341a3e13972372811c466c25ff4c;hpb=9a4fb568340b14698947bfa59b309ae0c67c693a;p=dak.git diff --git a/daklib/dbconn.py b/daklib/dbconn.py index 80a1f233..5aa1cf5d 100755 --- a/daklib/dbconn.py +++ b/daklib/dbconn.py @@ -42,6 +42,8 @@ import traceback import commands import signal +from daklib.gpg import SignedFile + try: # python >= 2.6 import json @@ -75,7 +77,6 @@ from sqlalchemy.orm.exc import NoResultFound from config import Config from textutils import fix_maintainer from dak_exceptions import DBUpdateError, NoSourceFieldError, FileExistsError -import utils # suppress some deprecation warnings in squeeze related to sqlalchemy import warnings @@ -501,7 +502,7 @@ def subprocess_setup(): class DBBinary(ORMObject): def __init__(self, package = None, source = None, version = None, \ maintainer = None, architecture = None, poolfile = None, \ - binarytype = 'deb'): + binarytype = 'deb', fingerprint=None): self.package = package self.source = source self.version = version @@ -509,6 +510,7 @@ class DBBinary(ORMObject): self.architecture = architecture self.poolfile = poolfile self.binarytype = binarytype + self.fingerprint = fingerprint @property def pkid(self): @@ -559,7 +561,7 @@ class DBBinary(ORMObject): @rtype: text @return: stanza text of the control section. ''' - import apt_inst + import utils fullpath = self.poolfile.fullpath deb_file = open(fullpath, 'r') stanza = utils.deb_extract_control(deb_file) @@ -1423,6 +1425,10 @@ class PoolFile(ORMObject): def fullpath(self): return os.path.join(self.location.path, self.filename) + @property + def basename(self): + return os.path.basename(self.filename) + def is_valid(self, filesize = -1, md5sum = None): return self.filesize == long(filesize) and self.md5sum == md5sum @@ -2404,69 +2410,16 @@ __all__.append('SrcContents') ################################################################################ -from debian.debfile import Deb822 - -# Temporary Deb822 subclass to fix bugs with : handling; see #597249 -class Dak822(Deb822): - def _internal_parser(self, sequence, fields=None): - # The key is non-whitespace, non-colon characters before any colon. - key_part = r"^(?P[^: \t\n\r\f\v]+)\s*:\s*" - single = re.compile(key_part + r"(?P\S.*?)\s*$") - multi = re.compile(key_part + r"$") - multidata = re.compile(r"^\s(?P.+?)\s*$") - - wanted_field = lambda f: fields is None or f in fields - - if isinstance(sequence, basestring): - sequence = sequence.splitlines() - - curkey = None - content = "" - for line in self.gpg_stripped_paragraph(sequence): - m = single.match(line) - if m: - if curkey: - self[curkey] = content - - if not wanted_field(m.group('key')): - curkey = None - continue - - curkey = m.group('key') - content = m.group('data') - continue - - m = multi.match(line) - if m: - if curkey: - self[curkey] = content - - if not wanted_field(m.group('key')): - curkey = None - continue - - curkey = m.group('key') - content = "" - continue - - m = multidata.match(line) - if m: - content += '\n' + line # XXX not m.group('data')? - continue - - if curkey: - self[curkey] = content - - class DBSource(ORMObject): def __init__(self, source = None, version = None, maintainer = None, \ - changedby = None, poolfile = None, install_date = None): + changedby = None, poolfile = None, install_date = None, fingerprint = None): self.source = source self.version = version self.maintainer = maintainer self.changedby = changedby self.poolfile = poolfile self.install_date = install_date + self.fingerprint = fingerprint @property def pkid(self): @@ -2479,7 +2432,7 @@ class DBSource(ORMObject): def not_null_constraints(self): return ['source', 'version', 'install_date', 'maintainer', \ - 'changedby', 'poolfile', 'install_date'] + 'changedby', 'poolfile'] def read_control_fields(self): ''' @@ -2489,7 +2442,9 @@ class DBSource(ORMObject): @return: fields is the dsc information in a dictionary form ''' fullpath = self.poolfile.fullpath - fields = Dak822(open(self.poolfile.fullpath, 'r')) + contents = open(fullpath, 'r').read() + signed_file = SignedFile(contents, keyrings=[], require_signature=False) + fields = apt_pkg.TagSection(signed_file.contents) return fields metadata = association_proxy('key', 'value') @@ -2998,6 +2953,10 @@ class Suite(ORMObject): else: return object_session(self).query(Suite).filter_by(suite_name=self.overridesuite).one() + @property + def path(self): + return os.path.join(self.archive.path, 'dists', self.suite_name) + __all__.append('Suite') @session_wrapper @@ -3595,7 +3554,8 @@ class DBConn(object): copy_queues = relation(BuildQueue, secondary=self.tbl_suite_build_queue_copy), srcformats = relation(SrcFormat, secondary=self.tbl_suite_src_formats, - backref=backref('suites', lazy='dynamic'))), + backref=backref('suites', lazy='dynamic')), + archive = relation(Archive, backref='suites')), extension = validator) mapper(Uid, self.tbl_uid,