3 Create all the contents files
5 @contact: Debian FTPMaster <ftpmaster@debian.org>
6 @copyright: 2008, 2009 Michael Casadevall <mcasadevall@debian.org>
7 @copyright: 2009 Mike O'Connor <stew@debian.org>
8 @copyright: 2011 Torsten Werner <twerner@debian.org>
9 @license: GNU General Public License version 2 or later
12 ################################################################################
14 # This program is free software; you can redistribute it and/or modify
15 # it under the terms of the GNU General Public License as published by
16 # the Free Software Foundation; either version 2 of the License, or
17 # (at your option) any later version.
19 # This program is distributed in the hope that it will be useful,
20 # but WITHOUT ANY WARRANTY; without even the implied warranty of
21 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 # GNU General Public License for more details.
24 # You should have received a copy of the GNU General Public License
25 # along with this program; if not, write to the Free Software
26 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
28 ################################################################################
30 # <Ganneff> there is the idea to slowly replace contents files
31 # <Ganneff> with a new generation of such files.
32 # <Ganneff> having more info.
34 # <Ganneff> of course that wont help for now where we need to generate them :)
36 ################################################################################
41 from daklib.config import Config
42 from daklib.dbconn import *
43 from daklib.contents import BinaryContentsScanner, ContentsWriter, \
45 from daklib import daklog
46 from daklib import utils
48 ################################################################################
50 def usage (exit_code=0):
51 print """Usage: dak contents [options] subcommand
55 generate Contents-$arch.gz files
58 scan the source packages in the existing pool and load contents into
59 the src_contents table
62 scan the (u)debs in the existing pool and load contents into the
67 show this help and exit
71 only operate on suites in the specified archive
73 -s, --suite={stable,testing,unstable,...}
74 only operate on specified suite names
76 -c, --component={main,contrib,non-free}
77 only operate on specified components
80 write Contents files for suites marked as untouchable, too
82 OPTIONS for scan-source and scan-binary
84 maximum number of packages to scan
88 ################################################################################
90 def write_all(cnf, archive_names = [], suite_names = [], component_names = [], force = None):
91 Logger = daklog.Logger('contents generate')
92 ContentsWriter.write_all(Logger, archive_names, suite_names, component_names, force)
95 ################################################################################
97 def binary_scan_all(cnf, limit):
98 Logger = daklog.Logger('contents scan-binary')
99 result = BinaryContentsScanner.scan_all(limit)
100 processed = '%(processed)d packages processed' % result
101 remaining = '%(remaining)d packages remaining' % result
102 Logger.log([processed, remaining])
105 ################################################################################
107 def source_scan_all(cnf, limit):
108 Logger = daklog.Logger('contents scan-source')
109 result = SourceContentsScanner.scan_all(limit)
110 processed = '%(processed)d packages processed' % result
111 remaining = '%(remaining)d packages remaining' % result
112 Logger.log([processed, remaining])
115 ################################################################################
119 cnf['Contents::Options::Help'] = ''
120 cnf['Contents::Options::Suite'] = ''
121 cnf['Contents::Options::Component'] = ''
122 cnf['Contents::Options::Limit'] = ''
123 cnf['Contents::Options::Force'] = ''
124 arguments = [('h', "help", 'Contents::Options::Help'),
125 ('a', 'archive', 'Contents::Options::Archive', 'HasArg'),
126 ('s', "suite", 'Contents::Options::Suite', "HasArg"),
127 ('c', "component", 'Contents::Options::Component', "HasArg"),
128 ('l', "limit", 'Contents::Options::Limit', "HasArg"),
129 ('f', "force", 'Contents::Options::Force'),
131 args = apt_pkg.parse_commandline(cnf.Cnf, arguments, sys.argv)
132 options = cnf.subtree('Contents::Options')
134 if (len(args) != 1) or options['Help']:
138 if len(options['Limit']) > 0:
139 limit = int(options['Limit'])
141 if args[0] == 'scan-source':
142 source_scan_all(cnf, limit)
145 if args[0] == 'scan-binary':
146 binary_scan_all(cnf, limit)
149 archive_names = utils.split_args(options['Archive'])
150 suite_names = utils.split_args(options['Suite'])
151 component_names = utils.split_args(options['Component'])
153 force = bool(options['Force'])
155 if args[0] == 'generate':
156 write_all(cnf, archive_names, suite_names, component_names, force)
162 if __name__ == '__main__':