Package dak :: Module make_overrides
[hide private]
[frames] | no frames]

Source Code for Module dak.make_overrides

  1  #! /usr/bin/env python3 
  2   
  3  """ 
  4  Output override files for apt-ftparchive and indices/ 
  5  @contact: Debian FTP Master <ftpmaster@debian.org> 
  6  @copyright: 2000, 2001, 2002, 2004, 2006  James Troup <james@nocrew.org> 
  7  @license: GNU General Public License version 2 or later 
  8  """ 
  9   
 10  # This program is free software; you can redistribute it and/or modify 
 11  # it under the terms of the GNU General Public License as published by 
 12  # the Free Software Foundation; either version 2 of the License, or 
 13  # (at your option) any later version. 
 14   
 15  # This program is distributed in the hope that it will be useful, 
 16  # but WITHOUT ANY WARRANTY; without even the implied warranty of 
 17  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 18  # GNU General Public License for more details. 
 19   
 20  # You should have received a copy of the GNU General Public License 
 21  # along with this program; if not, write to the Free Software 
 22  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
 23   
 24  ################################################################################ 
 25   
 26  # This is separate because it's horribly Debian specific and I don't 
 27  # want that kind of horribleness in the otherwise generic 'dak 
 28  # make-overrides'.  It does duplicate code tho. 
 29   
 30  ################################################################################ 
 31   
 32  import os 
 33  import sys 
 34  import apt_pkg 
 35   
 36  from daklib.dbconn import * 
 37  from daklib.config import Config 
 38  from daklib import utils 
 39   
 40  ################################################################################ 
 41   
 42   
43 -def usage(exit_code=0):
44 print("""Usage: dak make-overrides 45 Outputs the override tables to text files. 46 47 -h, --help show this help and exit.""") 48 sys.exit(exit_code)
49 50 ################################################################################ 51 52
53 -def do_list(output_file, suite, component, otype, session):
54 """ 55 Fetch override data for suite from the database and dump it. 56 57 @type output_file: fileobject 58 @param output_file: where to write the overrides to 59 60 @type suite: Suite object 61 @param suite: A suite object describing the Suite 62 63 @type component: Component object 64 @param component: The name of the component 65 66 @type otype: OverrideType object 67 @param otype: object of type of override. deb/udeb/dsc 68 69 @type session: SQLA Session 70 @param session: the database session in use 71 72 """ 73 # Here's a nice example of why the object API isn't always the 74 # right answer. On my laptop, the object version of the code 75 # takes 1:45, the 'dumb' tuple-based one takes 0:16 - mhy 76 77 if otype.overridetype == "dsc": 78 q = session.execute("SELECT o.package, s.section, o.maintainer FROM override o, section s WHERE o.suite = :suite AND o.component = :component AND o.type = :otype AND o.section = s.id ORDER BY s.section, o.package", 79 {'suite': suite.suite_id, 'component': component.component_id, 'otype': otype.overridetype_id}) 80 for i in q.fetchall(): 81 output_file.write(utils.result_join(i) + '\n') 82 83 else: 84 q = session.execute("SELECT o.package, p.priority, s.section, o.maintainer FROM override o, priority p, section s WHERE o.suite = :suite AND o.component = :component AND o.type = :otype AND o.priority = p.id AND o.section = s.id ORDER BY s.section, p.level, o.package", 85 {'suite': suite.suite_id, 'component': component.component_id, 'otype': otype.overridetype_id}) 86 for i in q.fetchall(): 87 output_file.write(utils.result_join(i) + '\n')
88 89 ################################################################################ 90 91
92 -def main():
93 cnf = Config() 94 Arguments = [('h', "help", "Make-Overrides::Options::Help")] 95 for i in ["help"]: 96 key = "Make-Overrides::Options::%s" % i 97 if key not in cnf: 98 cnf[key] = "" 99 apt_pkg.parse_commandline(cnf.Cnf, Arguments, sys.argv) 100 Options = cnf.subtree("Make-Overrides::Options") 101 if Options["Help"]: 102 usage() 103 104 d = DBConn() 105 session = d.session() 106 107 for suite in session.query(Suite).filter(Suite.overrideprocess == True): # noqa:E712 108 if suite.untouchable: 109 print("Skipping %s as it is marked as untouchable" % suite.suite_name) 110 continue 111 112 print("Processing %s..." % (suite.suite_name), file=sys.stderr) 113 override_suite = suite.overridecodename or suite.codename 114 115 for component in session.query(Component).all(): 116 for otype in session.query(OverrideType).all(): 117 otype_name = otype.overridetype 118 cname = component.component_name 119 120 # TODO: Stick suffix info in database (or get rid of it) 121 if otype_name == "deb": 122 suffix = "" 123 elif otype_name == "udeb": 124 if cname == "contrib": 125 continue # Ick2 126 suffix = ".debian-installer" 127 elif otype_name == "dsc": 128 suffix = ".src" 129 else: 130 utils.fubar("Don't understand OverrideType %s" % otype.overridetype) 131 132 cname = cname.replace('/', '_') 133 filename = os.path.join(cnf["Dir::Override"], "override.%s.%s%s" % (override_suite, cname, suffix)) 134 135 with open(filename, 'w') as output_file: 136 do_list(output_file, suite, component, otype, session)
137 138 ################################################################################ 139 140 141 if __name__ == '__main__': 142 main() 143