#!/usr/bin/env python
-# Debian Archive Kit Database Update Script
+""" Database Update Main Script
+
+@contact: Debian FTP Master <ftpmaster@debian.org>
# Copyright (C) 2008 Michael Casadevall <mcasadevall@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
################################################################################
-import psycopg2, sys, fcntl, os
+import psycopg2
+import sys
+import fcntl
+import os
import apt_pkg
import time
-from daklib import database
+import errno
+
from daklib import utils
+from daklib.dak_exceptions import DBUpdateError
################################################################################
Cnf = None
-projectB = None
-required_database_schema = 1
+required_database_schema = 20
################################################################################
################################################################################
def update_db_to_zero(self):
- # This function will attempt to update a pre-zero database schema to zero
+ """ This function will attempt to update a pre-zero database schema to zero """
# First, do the sure thing, and create the configuration table
try:
name TEXT UNIQUE NOT NULL,
value TEXT
);""")
- c.execute("INSERT INTO config VALUES ( nextval('config_id_seq'), 'db_revision', '0')");
+ c.execute("INSERT INTO config VALUES ( nextval('config_id_seq'), 'db_revision', '0')")
self.db.commit()
except psycopg2.ProgrammingError:
################################################################################
def get_db_rev(self):
- global projectB
-
# We keep database revision info the config table
# Try and access it
try:
c = self.db.cursor()
- q = c.execute("SELECT value FROM config WHERE name = 'db_revision';");
+ q = c.execute("SELECT value FROM config WHERE name = 'db_revision';")
return c.fetchone()[0]
except psycopg2.ProgrammingError:
print "Determining dak database revision ..."
try:
- self.db = psycopg2.connect("dbname='" + Cnf["DB::Name"] + "' host='" + Cnf["DB::Host"] + "' port='" + str(Cnf["DB::Port"]) + "'")
+ # Build a connect string
+ connect_str = "dbname=%s"% (Cnf["DB::Name"])
+ if Cnf["DB::Host"] != '': connect_str += " host=%s" % (Cnf["DB::Host"])
+ if Cnf["DB::Port"] != '-1': connect_str += " port=%d" % (int(Cnf["DB::Port"]))
+
+ self.db = psycopg2.connect(connect_str)
except:
print "FATAL: Failed connect to database"
sys.exit(0)
for i in range (database_revision, required_database_schema):
- print "updating databse schema from " + str(database_revision) + " to " + str(i+1)
- dakdb = __import__("dakdb", globals(), locals(), ['update'+str(i+1)])
- update_module = getattr(dakdb, "update"+str(i+1))
- update_module.do_update(self)
- database_revision =+ 1
+ print "updating database schema from " + str(database_revision) + " to " + str(i+1)
+ try:
+ dakdb = __import__("dakdb", globals(), locals(), ['update'+str(i+1)])
+ update_module = getattr(dakdb, "update"+str(i+1))
+ update_module.do_update(self)
+ except DBUpdateError, e:
+ # Seems the update did not work.
+ print "Was unable to update database schema from %s to %s." % (str(database_revision), str(i+1))
+ print "The error message received was %s" % (e)
+ utils.fubar("DB Schema upgrade failed")
+ database_revision += 1
################################################################################
def init (self):
- global Cnf, projectB
+ global Cnf
Cnf = utils.get_conf()
arguments = [('h', "help", "Update-DB::Options::Help")]
options = Cnf.SubTree("Update-DB::Options")
if options["Help"]:
- usage()
+ self.usage()
elif arguments:
utils.warn("dak update-db takes no arguments.")
- usage(exit_code=1)
+ self.usage(exit_code=1)
self.update_db()