]> git.decadent.org.uk Git - dak.git/blob - update52.py
d38ee26f91267763085b1be91f5e83214974fa84
[dak.git] / update52.py
1 #!/usr/bin/env python
2 # coding=utf8
3
4 """
5 Add table for version checks.
6
7 @contact: Debian FTP Master <ftpmaster@debian.org>
8 @copyright: 2011 Ansgar Burchardt <ansgar@debian.org>
9 @license: GNU General Public License version 2 or later
10 """
11
12 # This program is free software; you can redistribute it and/or modify
13 # it under the terms of the GNU General Public License as published by
14 # the Free Software Foundation; either version 2 of the License, or
15 # (at your option) any later version.
16
17 # This program is distributed in the hope that it will be useful,
18 # but WITHOUT ANY WARRANTY; without even the implied warranty of
19 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20 # GNU General Public License for more details.
21
22 # You should have received a copy of the GNU General Public License
23 # along with this program; if not, write to the Free Software
24 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
25
26 ################################################################################
27
28 import psycopg2
29 from daklib.dak_exceptions import DBUpdateError
30 from daklib.config import Config
31
32 ################################################################################
33 def do_update(self):
34     """
35     Add table for version checks.
36     """
37     print __doc__
38     try:
39         cnf = Config()
40         c = self.db.cursor()
41
42         c.execute("""
43             CREATE TABLE version_check (
44                 suite INTEGER NOT NULL REFERENCES suite(id),
45                 "check" TEXT NOT NULL CHECK ("check" IN ('Enhances', 'MustBeNewerThan', 'MustBeOlderThan')),
46                 reference INTEGER NOT NULL REFERENCES suite(id),
47                 PRIMARY KEY(suite, "check", reference)
48             )""")
49
50         c.execute("SELECT suite_name, id FROM suite")
51         suites = c.fetchall()
52         suite_id_map = {}
53         for suite_name, suite_id in suites:
54             suite_id_map[suite_name] = suite_id
55
56         for check in ["Enhances", "MustBeNewerThan", "MustBeOlderThan"]:
57            for suite_name in suite_id_map.keys():
58                for reference_name in [ s.lower() for s in cnf.ValueList("Suite::%s::VersionChecks::%s" % (suite_name, check)) ]:
59                    c.execute("""INSERT INTO version_check (suite, "check", reference) VALUES (%s, %s, %s)""", (suite_id_map[suite_name], check, suite_id_map[reference_name]))
60
61         c.execute("UPDATE config SET value = '52' WHERE name = 'db_revision'")
62         self.db.commit()
63
64     except psycopg2.ProgrammingError, msg:
65         self.db.rollback()
66         raise DBUpdateError, 'Unable to apply sick update 52, rollback issued. Error message : %s' % (str(msg))