else:
Logger = daklog.Logger("check-overrides", 1)
- for osuite in cnf.SubTree("Check-Overrides::OverrideSuites").List():
- if "1" != cnf["Check-Overrides::OverrideSuites::%s::Process" % osuite]:
- continue
-
- osuite = osuite.lower()
-
+ for suite in session.query(Suite).filter(Suite.overrideprocess==True):
originosuite = None
- originremark = ""
- try:
- originosuite = cnf["Check-Overrides::OverrideSuites::%s::OriginSuite" % osuite]
- originosuite = originosuite.lower()
+ originremark = ''
+
+ if suite.overrideorigin is not None:
+ originosuite = get_suite(suite.overrideorigin, session)
+ if originosuite is None:
+ utils.fubar("%s has an override origin suite of %s but it doesn't exist!" % (suite.suite_name, suite.overrideorigin))
+ originosuite = originosuite.suite_name
originremark = " taking missing from %s" % originosuite
- except KeyError:
- pass
- print "Processing %s%s..." % (osuite, originremark)
- suiteobj = get_suite(osuite)
- # Get a list of all suites that use the override file of 'osuite'
- ocodename = suiteobj.codename
+ print "Processing %s%s..." % (suite.suite_name, originremark)
+
+ # Get a list of all suites that use the override file of 'suite.suite_name' as
+ # well as the suite
+ ocodename = suite.codename
suiteids = [x.suite_id for x in session.query(Suite).filter(Suite.overridecodename == ocodename).all()]
+ if suite.suite_id not in suiteids:
+ suiteids.append(suite.suite_id)
if len(suiteids) < 1:
utils.fubar("Couldn't find id's of all suites: %s" % suiteids)
for otype in otypes:
print "Processing %s [%s - %s]" \
- % (osuite, component_name, otype)
+ % (suite.suite_name, component_name, otype)
sys.stdout.flush()
- process(osuite, suiteids, originosuite, component_name, otype, session)
+ process(suite.suite_name, suiteids, originosuite, component_name, otype, session)
Logger.close()
utils.fubar("Can only perform one action at a time.")
action = i
+ # Safety/Sanity check
+ if action == "set" and (not suite.allowcsset):
+ if force:
+ utils.warn("Would not normally allow setting suite %s (allowsetcs is FALSE), but --force used" % (suite_name))
+ else:
+ utils.fubar("Will not reset suite %s due to its database configuration (allowsetcs is FALSE)" % (suite_name))
+
# Need an action...
if action == None:
utils.fubar("No action specified.")
- # Safety/Sanity check
- # XXX: This should be stored in the database
- if action == "set" and suite_name not in ["testing", "squeeze-updates"]:
- utils.fubar("Will not reset suite %s" % (suite_name))
-
britney = False
if action == "set" and cnf["Control-Suite::Options::Britney"]:
britney = True
--- /dev/null
+#!/usr/bin/env python
+# coding=utf8
+
+"""
+Add suite options for overrides and control-suite to DB
+
+@contact: Debian FTP Master <ftpmaster@debian.org>
+@copyright: 2011 Mark Hymers <mhy@debian.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
+
+################################################################################
+
+import psycopg2
+from daklib.dak_exceptions import DBUpdateError
+from daklib.config import Config
+
+################################################################################
+def do_update(self):
+ """
+ Add suite options for overrides and control-suite to DB
+ """
+ print __doc__
+ try:
+ cnf = Config()
+
+ c = self.db.cursor()
+
+ c.execute("ALTER TABLE suite ADD COLUMN overrideprocess BOOLEAN NOT NULL DEFAULT FALSE")
+ c.execute("COMMENT ON COLUMN suite.overrideprocess IS %s", ['If true, check-overrides will process the suite by default'])
+ c.execute("ALTER TABLE suite ADD COLUMN overrideorigin TEXT DEFAULT NULL")
+ c.execute("COMMENT ON COLUMN suite.overrideprocess IS %s", ['If NOT NULL, check-overrides will take missing overrides from the named suite'])
+
+ # Migrate config file values into database
+ if cnf.has_key("Check-Overrides::OverrideSuites"):
+ for suitename in cnf.SubTree("Check-Overrides::OverrideSuites").List():
+ if cnf.get("Check-Overrides::OverrideSuites::%s::Process" % suitename, "0") == "1":
+ print "Marking %s to have overrides processed automatically" % suitename.lower()
+ c.execute("UPDATE suite SET overrideprocess = TRUE WHERE suite_name = %s", [suitename.lower()])
+
+ originsuite = cnf.get("Check-Overrides::OverrideSuites::%s::OriginSuite" % suitename, '')
+ if originsuite != '':
+ print "Setting %s to use %s as origin for overrides" % (suitename.lower(), originsuite.lower())
+ c.execute("UPDATE suite SET overrideorigin = %s WHERE suite_name = %s", [originsuite.lower(), suitename.lower()])
+
+ c.execute("ALTER TABLE suite ADD COLUMN allowcsset BOOLEAN NOT NULL DEFAULT FALSE")
+ c.execute("COMMENT ON COLUMN suite.allowcsset IS %s", ['Allow control-suite to be used with the --set option without forcing'])
+
+ # Import historical hard-coded values
+ c.execute("UPDATE suite SET allowcsset = TRUE WHERE suite_name IN ('testing', 'squeeze-updates')")
+
+ c.execute("UPDATE config SET value = '70' WHERE name = 'db_revision'")
+ self.db.commit()
+
+ except psycopg2.ProgrammingError as msg:
+ self.db.rollback()
+ raise DBUpdateError('Unable to apply sick update 70, rollback issued. Error message : %s' % (str(msg)))
d = DBConn()
session = d.session()
- for suite_name in cnf.SubTree("Check-Overrides::OverrideSuites").List():
- suite = get_suite(suite_name.lower(), session)
- if not suite:
- utils.fubar('Suite %s not found' % suite_name)
+ for suite in session.query(Suite).filter(Suite.overrideprocess==True):
if suite.untouchable:
+ print "Skipping %s as it is marked as untouchable" % suite.suite_name
continue
sys.stderr.write("Processing %s...\n" % (suite.suite_name))