X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Fgenerate_filelist.py;h=dcf6864ff72412e98b3797b908eb49213e70de74;hb=3342185a1c804f3fe03822c21bad57ce9db009ed;hp=d90338a59d6913c016caf7fdbee8b1b50e0d6a5d;hpb=66fa53ec4bc5b812493197f55940c60280db364f;p=dak.git diff --git a/dak/generate_filelist.py b/dak/generate_filelist.py index d90338a5..dcf6864f 100755 --- a/dak/generate_filelist.py +++ b/dak/generate_filelist.py @@ -41,90 +41,7 @@ from daklib.threadpool import ThreadPool from daklib import utils import apt_pkg, os, stat, sys -def fetch(query, args, session): - return [path + filename for (path, filename) in \ - session.execute(query, args).fetchall()] - -def getSources(suite, component, session, timestamp): - extra_cond = "" - if timestamp: - extra_cond = "AND extract(epoch from sa.created) > %d" % timestamp - query = """ - SELECT l.path, f.filename - FROM source s - JOIN src_associations sa - ON s.id = sa.source AND sa.suite = :suite %s - JOIN files f - ON s.file = f.id - JOIN location l - ON f.location = l.id AND l.component = :component - ORDER BY filename - """ % extra_cond - args = { 'suite': suite.suite_id, - 'component': component.component_id } - return fetch(query, args, session) - -def getBinaries(suite, component, architecture, type, session, timestamp): - extra_cond = "" - if timestamp: - extra_cond = "AND extract(epoch from ba.created) > %d" % timestamp - query = """ -CREATE TEMP TABLE b_candidates ( - source integer, - file integer, - architecture integer); - -INSERT INTO b_candidates (source, file, architecture) - SELECT b.source, b.file, b.architecture - FROM binaries b - JOIN bin_associations ba ON b.id = ba.bin - WHERE b.type = :type AND ba.suite = :suite AND - b.architecture IN (2, :architecture) %s; - -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, bc.architecture, bc.source as src, s.source - FROM b_candidates bc - JOIN source s ON bc.source = s.id - JOIN files f ON bc.file = f.id - JOIN location l ON f.location = l.id - WHERE l.component = :component; - -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 - """ % extra_cond - args = { 'suite': suite.suite_id, - 'component': component.component_id, - 'architecture': architecture.arch_id, - 'type': type } - return fetch(query, args, session) +from daklib.lists import getSources, getBinaries def listPath(suite, component, architecture = None, type = None, incremental_mode = False): @@ -152,7 +69,7 @@ def writeSourceList(args): (file, timestamp) = listPath(suite, component, incremental_mode = incremental_mode) session = DBConn().session() - for filename in getSources(suite, component, session, timestamp): + for _, filename in getSources(suite, component, session, timestamp): file.write(filename + '\n') session.close() file.close() @@ -162,7 +79,7 @@ def writeBinaryList(args): (file, timestamp) = listPath(suite, component, architecture, type, incremental_mode) session = DBConn().session() - for filename in getBinaries(suite, component, architecture, type, + for _, filename in getBinaries(suite, component, architecture, type, session, timestamp): file.write(filename + '\n') session.close() @@ -213,20 +130,21 @@ def main(): if Options['Help']: usage() threadpool = ThreadPool() - for suite_name in utils.split_args(Options['Suite']): - suite = query_suites.filter_by(suite_name = suite_name).one() - for component_name in utils.split_args(Options['Component']): - component = session.query(Component).\ - filter_by(component_name = component_name).one() - for arch_string in utils.split_args(Options['Architecture']): - architecture = query_architectures.\ - filter_by(arch_string = arch_string).one() + query_suites = query_suites. \ + filter(Suite.suite_name.in_(utils.split_args(Options['Suite']))) + query_components = query_components. \ + filter(Component.component_name.in_(utils.split_args(Options['Component']))) + query_architectures = query_architectures. \ + filter(Architecture.arch_string.in_(utils.split_args(Options['Architecture']))) + for suite in query_suites: + for component in query_components: + for architecture in query_architectures: if architecture not in suite.architectures: pass - elif arch_string == 'source': + elif architecture.arch_string == 'source': threadpool.queueTask(writeSourceList, (suite, component, Options['Incremental'])) - elif arch_string != 'all': + elif architecture.arch_string != 'all': threadpool.queueTask(writeBinaryList, (suite, component, architecture, 'deb', Options['Incremental']))