Source code for dak.make_pkg_file_mapping
#! /usr/bin/env python3
"""
Prints out, for every file in the pool, which source package and version it
belongs to and for binary packages additionally which arch, binary package
and binary package version it has in a standard rfc2822-like format.
@contact: Debian FTP Master <ftpmaster@debian.org>
@copyright: 2009 Peter Palfrader <peter@palfrader.org>
@license: GNU General Public License version 2 or later
"""
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
################################################################################
# <arma> it's crypto -- think of it like magic if you like.
################################################################################
import sys
from daklib.dbconn import *
################################################################################
[docs]def build_mapping(archive, session):
# The ORDER BY is in the queries so that compression of the output works
# better. It's the difference between a 9 megabyte bzip2 and a 2.5 mb
# bzip2 file.
query_sources = """
SELECT
source.source,
source.version,
'./pool/' || component.name || '/' || files.filename AS path
FROM source
JOIN dsc_files ON source.id=dsc_files.source
JOIN files ON files.id=dsc_files.file
JOIN files_archive_map ON files.id = files_archive_map.file_id
JOIN component ON files_archive_map.component_id = component.id
JOIN files_archive_map fam_dsc ON fam_dsc.file_id=source.file AND fam_dsc.component_id=component.id AND fam_dsc.archive_id=files_archive_map.archive_id
WHERE files_archive_map.archive_id = :archive_id
ORDER BY source, version, component.id, files.filename
"""
query_binaries = """
SELECT
source.source,
source.version,
architecture.arch_string AS arch,
'./pool/' || component.name || '/' || files.filename AS path,
binaries.package,
binaries.version AS bin_version
FROM source
JOIN binaries ON source.id=binaries.source
JOIN files ON binaries.file=files.id
JOIN files_archive_map ON files.id = files_archive_map.file_id
JOIN component ON files_archive_map.component_id = component.id
JOIN architecture ON architecture.id=binaries.architecture
WHERE files_archive_map.archive_id = :archive_id
ORDER BY source, version, package, bin_version
"""
for row in session.execute(query_sources, {'archive_id': archive.archive_id}).fetchall():
(source, version, path) = row
print("Path: %s" % path)
print("Source: %s" % source)
print("Source-Version: %s" % version)
print()
for row in session.execute(query_binaries, {'archive_id': archive.archive_id}).fetchall():
(source, version, arch, path, bin, binv) = row
print("Path: %s" % path)
print("Source: %s" % source)
print("Source-Version: %s" % version)
print("Architecture: %s" % arch)
print("Binary: %s" % bin)
print("Binary-Version: %s" % binv)
print()
################################################################################
[docs]def usage(status=0):
print("usage: dak make-pkg-file-mapping <archive>")
sys.exit(status)
################################################################################
[docs]def main():
if len(sys.argv) != 2:
usage(1)
elif sys.argv[1] in ('-h', '--help'):
usage(0)
archive_name = sys.argv[1]
session = DBConn().session()
archive = session.query(Archive).filter_by(archive_name=archive_name).one()
build_mapping(archive, session)
#########################################################################################
if __name__ == '__main__':
main()
# vim:set et:
# vim:set ts=4:
# vim:set shiftwidth=4: