4 Modify external overrides.
6 @contact: Debian FTP Master <ftpmaster@debian.org>
7 @copyright: 2011 Ansgar Burchardt <ansgar@debian.org>
8 @license: GNU General Public License version 2 or later
11 # This program is free software; you can redistribute it and/or modify
12 # it under the terms of the GNU General Public License as published by
13 # the Free Software Foundation; either version 2 of the License, or
14 # (at your option) any later version.
16 # This program is distributed in the hope that it will be useful,
17 # but WITHOUT ANY WARRANTY; without even the implied warranty of
18 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 # GNU General Public License for more details.
21 # You should have received a copy of the GNU General Public License
22 # along with this program; if not, write to the Free Software
23 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25 from daklib.dbconn import *
26 from daklib.config import Config
27 from daklib import utils, daklog
33 print """Usage: dak external-overrides COMMAND
34 Modify external overrides.
36 -h, --help show this help and exit.
37 -f, --force allow processing of untouchable suites.
39 Commands can use a long or abbreviated form:
41 import SUITE COMPONENT KEY import external overrides for KEY
42 i SUITE COMPONENT KEY NOTE: This will replace existing overrides.
44 copy FROM TO copy external overrides from suite FROM to TO
45 NOTE: Needs --force for untouchable TO
47 For the 'import' command, external overrides are read from standard input and
48 should be given as lines of the form 'PACKAGE KEY VALUE'.
52 #############################################################################
54 def external_overrides_copy(from_suite_name, to_suite_name, force = False):
55 session = DBConn().session()
57 from_suite = get_suite(from_suite_name, session)
58 to_suite = get_suite(to_suite_name, session)
60 if from_suite is None:
61 print "E: source %s not found." % from_suite_name
65 print "E: target %s not found." % to_suite_name
69 if not force and to_suite.untouchable:
70 print "E: refusing to touch untouchable suite %s (not forced)." % to_suite_name
74 session.query(ExternalOverride).filter_by(suite=to_suite).delete()
76 INSERT INTO external_overrides (suite, component, package, key, value)
77 SELECT :to_suite, component, package, key, value FROM external_overrides WHERE suite = :from_suite
78 """, { 'from_suite': from_suite.suite_id, 'to_suite': to_suite.suite_id })
82 def external_overrides_import(suite_name, component_name, key, file, force = False):
83 session = DBConn().session()
85 suite = get_suite(suite_name, session)
86 component = get_component(component_name, session)
88 if not force and suite.untouchable:
89 print "E: refusing to touch untouchable suite %s (not forced)." % suite_name
93 session.query(ExternalOverride).filter_by(suite=suite,component=component,key=key).delete()
96 (package, key, value) = line.strip().split(None, 2)
97 eo = ExternalOverride()
99 eo.component = component
107 #############################################################################
112 Arguments = [('h',"help","External-Overrides::Options::Help"),
113 ('f','force','External-Overrides::Options::Force')]
115 args = apt_pkg.ParseCommandLine(cnf.Cnf, Arguments, sys.argv)
117 Options = cnf.SubTree("External-Overrides::Options")
121 if Options.has_key("Help"):
125 if Options.has_key("Force") and Options["Force"]:
128 logger = daklog.Logger('external-overrides')
131 if command in ('import', 'i'):
132 external_overrides_import(args[1], args[2], args[3], sys.stdin, force)
133 elif command in ('copy', 'c'):
134 external_overrides_copy(args[1], args[2], force)
136 print "E: Unknown commands."
138 if __name__ == '__main__':