################################################################################
-import psycopg2, sys
+import psycopg2, sys, fcntl, os
import apt_pkg
import time
from daklib import database
Cnf = None
projectB = None
-required_database_schema = 1
+required_database_schema = 3
################################################################################
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"
print "Please make sure you have a database backup handy. If you don't, press Ctrl-C now!"
print ""
print "Continuing in five seconds ..."
- #time.sleep(5)
+ time.sleep(5)
print ""
print "Attempting to upgrade pre-zero database to zero"
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
+ database_revision += 1
################################################################################
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()
+ try:
+ lock_fd = os.open(Cnf["Dinstall::LockFile"], os.O_RDWR | os.O_CREAT)
+ fcntl.lockf(lock_fd, fcntl.LOCK_EX | fcntl.LOCK_NB)
+ except IOError, e:
+ if errno.errorcode[e.errno] == 'EACCES' or errno.errorcode[e.errno] == 'EAGAIN':
+ utils.fubar("Couldn't obtain lock; assuming another 'dak process-unchecked' is already running.")
+
+
################################################################################
if __name__ == '__main__':