# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+################################################################################
+
+# Ganneff> Please go and try to lock mhy now. After than try to lock NEW.
+# twerner> !lock mhy
+# dak> twerner: You suck, this is already locked by Ganneff
+# Ganneff> now try with NEW
+# twerner> !lock NEW
+# dak> twerner: also locked NEW
+# mhy> Ganneff: oy, stop using me for locks and highlighting me you tall muppet
+# Ganneff> hehe :)
+
+################################################################################
+
from daklib.dbconn import *
from daklib.config import Config
+from daklib.threadpool import ThreadPool
from daklib import utils
import apt_pkg, os, sys
SELECT path, filename
FROM srcfiles_suite_component
WHERE suite = :suite AND component = :component
+ ORDER BY filename
"""
args = { 'suite': suite.suite_id,
'component': component.component_id }
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)
+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,
pathname = os.path.join(Config()["Dir::Lists"], filename)
return utils.open_file(pathname, "w")
-def writeSourceList(suite, component, session):
+def writeSourceList(args):
+ (suite, component) = args
file = listPath(suite, component)
+ session = DBConn().session()
for filename in getSources(suite, component, session):
file.write(filename + '\n')
+ session.close()
file.close()
-def writeBinaryList(suite, component, architecture, type, session):
+def writeBinaryList(args):
+ (suite, component, architecture, type) = args
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():
print """Usage: dak generate_filelist [OPTIONS]
Create filename lists for apt-ftparchive.
- -s, --suite=SUITE act on this suite
+ -s, --suite=SUITE act on this suite
-c, --component=COMPONENT act on this component
- -a, --architecture=ARCH act on this architecture
- -h, --help show this help and exit
+ -a, --architecture=ARCH act on this architecture
+ -h, --help show this help and exit
ARCH, COMPONENT and SUITE can be comma (or space) separated list, e.g.
--suite=testing,unstable"""
usage()
session = DBConn().session()
suite_arch = session.query(SuiteArchitecture)
+ threadpool = ThreadPool()
for suite_name in utils.split_args(Options['Suite']):
suite = query_suites.filter_by(suite_name = suite_name).one()
join = suite_arch.filter_by(suite_id = suite.suite_id)
try:
join.filter_by(arch_id = architecture.arch_id).one()
if architecture_name == 'source':
- writeSourceList(suite, component, session)
+ threadpool.queueTask(writeSourceList, (suite, component))
elif architecture_name != 'all':
- writeBinaryList(suite, component, architecture, 'deb', session)
- writeBinaryList(suite, component, architecture, 'udeb', session)
+ threadpool.queueTask(writeBinaryList,
+ (suite, component, architecture, 'deb'))
+ threadpool.queueTask(writeBinaryList,
+ (suite, component, architecture, 'udeb'))
except:
pass
+ threadpool.joinAll()
# this script doesn't change the database
- session.rollback()
+ session.close()
if __name__ == '__main__':
main()