+def import_dump(log, transaction, suite, component, fh,
+ keyrings=None, require_signature=True, add_overrides=False):
+ session = transaction.session
+ for line in fh:
+ path, size, md5, sha1, sha256, fpr, changed_by = line.strip().split(':', 6)
+
+ if not changed_by:
+ changed_by = None
+ fingerprint = None
+ if fpr:
+ fingerprint = session.query(Fingerprint).filter_by(fingerprint=fpr).first()
+ if fingerprint is None:
+ print 'W: {0}: unknown fingerprint {1}'.format(filename, fpr)
+
+ directory, filename = os.path.split(os.path.abspath(path))
+ hashed_file = daklib.upload.HashedFile(filename, long(size), md5, sha1, sha256)
+ hashed_file.check(directory)
+
+ import_file(log, transaction, suite, component, directory, hashed_file,
+ fingerprint=fingerprint, changed_by=changed_by,
+ keyrings=keyrings, require_signature=require_signature, add_overrides=add_overrides)
+
+ transaction.commit()
+
+_export_query = r"""
+WITH
+tmp AS
+ (SELECT 1 AS order, s.file AS file_id, s.sig_fpr AS fingerprint_id, s.changedby AS changed_by, sa.suite AS suite_id
+ FROM source s
+ JOIN src_associations sa ON sa.source = s.id
+ UNION
+ SELECT 2 AS order, b.file AS file_id, b.sig_fpr AS fingerprint_id, NULL, ba.suite AS suite_id
+ FROM binaries b
+ JOIN bin_associations ba ON ba.bin = b.id
+ )
+
+SELECT
+ f.filename, f.size::TEXT, f.md5sum, f.sha1sum, f.sha256sum, COALESCE(fpr.fingerprint, ''), COALESCE(m.name, '')
+FROM files f
+JOIN tmp ON f.id = tmp.file_id
+JOIN suite ON suite.id = tmp.suite_id
+JOIN files_archive_map fam ON fam.file_id = f.id AND fam.archive_id = suite.archive_id
+LEFT JOIN fingerprint fpr ON fpr.id = tmp.fingerprint_id
+LEFT JOIN maintainer m ON m.id = tmp.changed_by
+
+WHERE
+ suite.id = :suite_id
+ AND fam.component_id = :component_id
+
+ORDER BY tmp.order, f.filename;
+"""
+
+def export_dump(transaction, suite, component):
+ session = transaction.session
+ query = session.execute(_export_query,
+ {'suite_id': suite.suite_id,
+ 'component_id': component.component_id})
+ for row in query:
+ print ":".join(row)
+