1#! /usr/bin/env python3
3"""
4Prints out, for every file in the pool, which source package and version it
5belongs to and for binary packages additionally which arch, binary package
6and binary package version it has in a standard rfc2822-like format.
8@contact: Debian FTP Master <ftpmaster@debian.org>
9@copyright: 2009 Peter Palfrader <peter@palfrader.org>
10@license: GNU General Public License version 2 or later
11"""
13# This program is free software; you can redistribute it and/or modify
14# it under the terms of the GNU General Public License as published by
15# the Free Software Foundation; either version 2 of the License, or
16# (at your option) any later version.
17#
18# This program is distributed in the hope that it will be useful,
19# but WITHOUT ANY WARRANTY; without even the implied warranty of
20# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21# GNU General Public License for more details.
22#
23# You should have received a copy of the GNU General Public License
24# along with this program; if not, write to the Free Software
25# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
28################################################################################
30# <arma> it's crypto -- think of it like magic if you like.
32################################################################################
34import sys
36from daklib.dbconn import *
38################################################################################
41def build_mapping(archive, session):
42 # The ORDER BY is in the queries so that compression of the output works
43 # better. It's the difference between a 9 megabyte bzip2 and a 2.5 mb
44 # bzip2 file.
46 query_sources = """
47 SELECT
48 source.source,
49 source.version,
50 './pool/' || component.name || '/' || files.filename AS path
51 FROM source
52 JOIN dsc_files ON source.id=dsc_files.source
53 JOIN files ON files.id=dsc_files.file
54 JOIN files_archive_map ON files.id = files_archive_map.file_id
55 JOIN component ON files_archive_map.component_id = component.id
56 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
57 WHERE files_archive_map.archive_id = :archive_id
58 ORDER BY source, version, component.id, files.filename
59 """
61 query_binaries = """
62 SELECT
63 source.source,
64 source.version,
65 architecture.arch_string AS arch,
66 './pool/' || component.name || '/' || files.filename AS path,
67 binaries.package,
68 binaries.version AS bin_version
69 FROM source
70 JOIN binaries ON source.id=binaries.source
71 JOIN files ON binaries.file=files.id
72 JOIN files_archive_map ON files.id = files_archive_map.file_id
73 JOIN component ON files_archive_map.component_id = component.id
74 JOIN architecture ON architecture.id=binaries.architecture
75 WHERE files_archive_map.archive_id = :archive_id
76 ORDER BY source, version, package, bin_version
77 """
79 for row in session.execute(query_sources, {'archive_id': archive.archive_id}).fetchall():
80 (source, version, path) = row
81 print("Path: %s" % path)
82 print("Source: %s" % source)
83 print("Source-Version: %s" % version)
84 print()
86 for row in session.execute(query_binaries, {'archive_id': archive.archive_id}).fetchall():
87 (source, version, arch, path, bin, binv) = row
88 print("Path: %s" % path)
89 print("Source: %s" % source)
90 print("Source-Version: %s" % version)
91 print("Architecture: %s" % arch)
92 print("Binary: %s" % bin)
93 print("Binary-Version: %s" % binv)
94 print()
96################################################################################
99def usage(status=0):
100 print("usage: dak make-pkg-file-mapping <archive>")
101 sys.exit(status)
103################################################################################
106def main():
107 if len(sys.argv) != 2: 107 ↛ 108line 107 didn't jump to line 108, because the condition on line 107 was never true
108 usage(1)
109 elif sys.argv[1] in ('-h', '--help'):
110 usage(0)
112 archive_name = sys.argv[1]
114 session = DBConn().session()
115 archive = session.query(Archive).filter_by(archive_name=archive_name).one()
116 build_mapping(archive, session)
118#########################################################################################
121if __name__ == '__main__':
122 main()
125# vim:set et:
126# vim:set ts=4:
127# vim:set shiftwidth=4: