X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Fcontents.py;h=65e7e3f1c31dedd1f0fc660550d0b0ed3f077268;hb=edae3d82ea0b9cebbb3921930e1e62028efc73fd;hp=1148758c704e87b8e09695b5cee947fafae958b7;hpb=63bdfa5a24caa17adc8307002b4f6a03df2e7d44;p=dak.git diff --git a/daklib/contents.py b/daklib/contents.py index 1148758c..65e7e3f1 100755 --- a/daklib/contents.py +++ b/daklib/contents.py @@ -31,6 +31,7 @@ from daklib.threadpool import ThreadPool from multiprocessing import Pool from sqlalchemy import desc, or_ +from sqlalchemy.exc import IntegrityError from subprocess import Popen, PIPE, call import os.path @@ -55,12 +56,16 @@ class ContentsWriter(object): ''' Returns a query object that is doing most of the work. ''' + overridesuite = self.suite + if self.suite.overridesuite is not None: + overridesuite = get_suite(self.suite.overridesuite, self.session) params = { - 'suite': self.suite.suite_id, - 'arch_all': get_architecture('all', self.session).arch_id, - 'arch': self.architecture.arch_id, - 'type_id': self.overridetype.overridetype_id, - 'type': self.overridetype.overridetype, + 'suite': self.suite.suite_id, + 'overridesuite': overridesuite.suite_id, + 'arch_all': get_architecture('all', self.session).arch_id, + 'arch': self.architecture.arch_id, + 'type_id': self.overridetype.overridetype_id, + 'type': self.overridetype.overridetype, } if self.component is not None: @@ -84,7 +89,7 @@ with unique_override as (select o.package, s.section from override o, section s - where o.suite = :suite and o.type = :type_id and o.section = s.id and + where o.suite = :overridesuite and o.type = :type_id and o.section = s.id and o.component = :component) select bc.file, substring(o.section from position('/' in o.section) + 1) || '/' || b.package as package @@ -112,7 +117,7 @@ with unique_override as (select distinct on (o.package, s.section) o.package, s.section from override o, section s - where o.suite = :suite and o.type = :type_id and o.section = s.id + where o.suite = :overridesuite and o.type = :type_id and o.section = s.id order by o.package, s.section, o.modified desc) select bc.file, substring(o.section from position('/' in o.section) + 1) || '/' || b.package as package @@ -249,7 +254,12 @@ class ContentsScanner(object): binary = session.query(DBBinary).get(self.binary_id) for filename in binary.scan_contents(): binary.contents.append(BinContents(file = filename)) - session.commit() + try: + session.commit() + except IntegrityError: + session.rollback() + binary.contents.append(BinContents(file = 'DUPLICATE_FILENAMES')) + session.commit() session.close() @classmethod