1""" 

2Reference archive table from suite and add path to archive root 

3 

4@contact: Debian FTP Master <ftpmaster@debian.org> 

5@copyright: 2012 Ansgar Burchardt <ansgar@debian.org> 

6@license: GNU General Public License version 2 or later 

7""" 

8 

9# This program is free software; you can redistribute it and/or modify 

10# it under the terms of the GNU General Public License as published by 

11# the Free Software Foundation; either version 2 of the License, or 

12# (at your option) any later version. 

13 

14# This program is distributed in the hope that it will be useful, 

15# but WITHOUT ANY WARRANTY; without even the implied warranty of 

16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 

17# GNU General Public License for more details. 

18 

19# You should have received a copy of the GNU General Public License 

20# along with this program; if not, write to the Free Software 

21# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 

22 

23################################################################################ 

24 

25import psycopg2 

26from daklib.dak_exceptions import DBUpdateError 

27from daklib.config import Config 

28 

29################################################################################ 

30 

31 

32def do_update(self): 

33 print(__doc__) 

34 try: 

35 cnf = Config() 

36 

37 c = self.db.cursor() 

38 

39 archive_root = cnf["Dir::Root"] 

40 c.execute("ALTER TABLE archive ADD COLUMN path TEXT NOT NULL DEFAULT %s", (archive_root,)) 

41 c.execute("ALTER TABLE archive ALTER COLUMN path DROP DEFAULT") 

42 

43 c.execute("ALTER TABLE archive ADD COLUMN mode CHAR(4) NOT NULL DEFAULT '0644' CHECK (mode SIMILAR TO '[0-7]{4}')") 

44 c.execute("ALTER TABLE archive ADD COLUMN tainted BOOLEAN NOT NULL DEFAULT 'f'") 

45 c.execute("ALTER TABLE archive ADD COLUMN use_morgue BOOLEAN NOT NULL DEFAULT 't'") 

46 

47 c.execute("SELECT id FROM archive") 

48 (archive_id,) = c.fetchone() 

49 

50 if c.fetchone() is not None: 50 ↛ 51line 50 didn't jump to line 51, because the condition on line 50 was never true

51 raise DBUpdateError("Cannot automatically upgrade form installation with multiple archives.") 

52 

53 c.execute("ALTER TABLE suite ADD COLUMN archive_id INT REFERENCES archive(id) NOT NULL DEFAULT %s", (archive_id,)) 

54 c.execute("ALTER TABLE suite ALTER COLUMN archive_id DROP DEFAULT") 

55 

56 c.execute("UPDATE config SET value = '73' WHERE name = 'db_revision'") 

57 self.db.commit() 

58 

59 except psycopg2.ProgrammingError as msg: 

60 self.db.rollback() 

61 raise DBUpdateError('Unable to apply sick update 73, rollback issued. Error message : %s' % (str(msg)))