From: Torsten Werner Date: Thu, 31 Dec 2009 15:04:33 +0000 (+0100) Subject: generate-filelist: improve arch all handling X-Git-Url: https://git.decadent.org.uk/gitweb/?a=commitdiff_plain;h=b5feab8ab22835ba9a01e96ab9a8088986bd493c;p=dak.git generate-filelist: improve arch all handling include only the 'right' version of arch all packages Signed-off-by: Torsten Werner --- diff --git a/dak/generate_filelist.py b/dak/generate_filelist.py index 43a76054..50a0949a 100755 --- a/dak/generate_filelist.py +++ b/dak/generate_filelist.py @@ -44,11 +44,46 @@ def getSources(suite, component, session): def getBinaries(suite, component, architecture, type, session): query = """ - SELECT path, filename - FROM binfiles_suite_component_arch - WHERE suite = :suite AND component = :component AND type = :type AND - (architecture = :architecture OR architecture = 2) - ORDER BY filename +CREATE TEMP TABLE gf_candidates ( + filename text, + path text, + architecture integer, + src integer, + source text); + +INSERT INTO gf_candidates (filename, path, architecture, src, source) + SELECT f.filename, l.path, b.architecture, b.source as src, s.source + FROM binaries b + JOIN bin_associations ba ON b.id = ba.bin + JOIN source s ON b.source = s.id + JOIN files f ON b.file = f.id + JOIN location l ON f.location = l.id + WHERE ba.suite = :suite AND b.type = :type AND + l.component = :component AND b.architecture IN (2, :architecture); + +WITH arch_any AS + + (SELECT path, filename FROM gf_candidates + WHERE architecture > 2), + + arch_all_with_any AS + (SELECT path, filename FROM gf_candidates + WHERE architecture = 2 AND + src IN (SELECT src FROM gf_candidates WHERE architecture > 2)), + + arch_all_without_any AS + (SELECT path, filename FROM gf_candidates + WHERE architecture = 2 AND + source NOT IN (SELECT DISTINCT source FROM gf_candidates WHERE architecture > 2)), + + filelist AS + (SELECT * FROM arch_any + UNION + SELECT * FROM arch_all_with_any + UNION + SELECT * FROM arch_all_without_any) + + SELECT * FROM filelist ORDER BY filename """ args = { 'suite': suite.suite_id, 'component': component.component_id, @@ -75,10 +110,12 @@ def writeSourceList(suite, component, session): file.write(filename + '\n') file.close() -def writeBinaryList(suite, component, architecture, type, session): +def writeBinaryList(suite, component, architecture, type): file = listPath(suite, component, architecture, type) + session = DBConn().session() for filename in getBinaries(suite, component, architecture, type, session): file.write(filename + '\n') + session.close() file.close() def usage(): @@ -133,12 +170,12 @@ def main(): if architecture_name == 'source': writeSourceList(suite, component, session) elif architecture_name != 'all': - writeBinaryList(suite, component, architecture, 'deb', session) - writeBinaryList(suite, component, architecture, 'udeb', session) + writeBinaryList(suite, component, architecture, 'deb') + writeBinaryList(suite, component, architecture, 'udeb') except: pass # this script doesn't change the database - session.rollback() + session.close() if __name__ == '__main__': main()