]> git.decadent.org.uk Git - dak.git/blob - dak/dakdb/update108.py
Add codename to package_list view
[dak.git] / dak / dakdb / update108.py
1 #!/usr/bin/env python
2 # coding=utf8
3
4 """
5 Add codename to package_list view
6
7 @contact: Debian FTP Master <ftpmaster@debian.org>
8 @copyright: 2015, 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 statements = [
33 """DROP VIEW IF EXISTS package_list""",
34 """
35 CREATE OR REPLACE VIEW package_list AS
36 SELECT
37   tmp.package,
38   tmp.version,
39   tmp.source,
40   tmp.source_version,
41   suite.suite_name AS suite,
42   suite.codename AS codename,
43   archive.name AS archive,
44   component.name AS component,
45   CASE component.name
46     WHEN 'main' THEN suite.suite_name
47     ELSE CONCAT(suite.suite_name, '/', component.name)
48     END AS display_suite,
49   tmp.architecture_is_source,
50   tmp.architecture,
51   tmp.type
52 FROM
53   (SELECT
54     s.source AS package,
55     s.version AS version,
56     s.source AS source,
57     s.version AS source_version,
58     sa.suite AS suite_id,
59     TRUE AS architecture_is_source,
60     'source' AS architecture,
61     'dsc' AS type,
62     sc.component_id
63     FROM source s
64     JOIN src_associations sa ON s.id = sa.source
65     JOIN source_component sc ON s.id = sc.source_id AND sa.suite = sc.suite_id
66    UNION
67    SELECT
68     b.package AS package,
69     b.version AS version,
70     s.source AS source,
71     s.version AS source_version,
72     ba.suite AS suite_id,
73     FALSE AS architecture_is_source,
74     a.arch_string AS architecture,
75     b.type AS type,
76     bc.component_id
77     FROM binaries b
78     JOIN source s ON b.source = s.id
79     JOIN architecture a ON b.architecture = a.id
80     JOIN bin_associations ba ON b.id = ba.bin
81     JOIN binary_component bc ON b.id = bc.binary_id AND ba.suite = bc.suite_id) AS tmp
82   JOIN suite ON tmp.suite_id = suite.id
83   JOIN archive ON suite.archive_id = archive.id
84   JOIN component ON tmp.component_id = component.id
85 """,
86 ]
87
88 ################################################################################
89 def do_update(self):
90     print __doc__
91     try:
92         cnf = Config()
93
94         c = self.db.cursor()
95
96         for stmt in statements:
97             c.execute(stmt)
98
99         c.execute("UPDATE config SET value = '108' WHERE name = 'db_revision'")
100         self.db.commit()
101
102     except psycopg2.ProgrammingError as msg:
103         self.db.rollback()
104         raise DBUpdateError('Unable to apply sick update 108, rollback issued. Error message: {0}'.format(msg))