]> git.decadent.org.uk Git - dak.git/blobdiff - dak/admin.py
Fix spelling of "IOError" so we indeed don't raise an exception
[dak.git] / dak / admin.py
index eb765a660cb00ac807e0daaee0305539eeaf3662..2bb1f1853187af821ccf06c317bf40cc6de8aefd 100755 (executable)
@@ -55,6 +55,10 @@ Perform administrative work on the dak database.
 
   Commands can use a long or abbreviated form:
 
+  config / c:
+     c db                   show db config
+     c db-shell             show db config in a usable form for psql
+
   architecture / a:
      a list                 show a list of architectures
      a rm ARCH              remove an architecture (will only work if
@@ -67,6 +71,10 @@ Perform administrative work on the dak database.
   suite / s:
      s list                 show a list of suites
      s show SUITE           show config details for a suite
+     s add SUITE VERSION [ label=LABEL ] [ description=DESCRIPTION ]
+                         [ origin=ORIGIN ] [ codename=CODENAME ]
+                            add suite SUITE, version VERSION. label,
+                            description, origin and codename are optional.
 
   suite-architecture / s-a:
      s-a list-suite ARCH    show the suites an ARCH is in
@@ -170,6 +178,37 @@ def __suite_show(d, args):
 
     print su.details()
 
+def __suite_add(d, args):
+    die_arglen(args, 4, "E: adding a suite requires at least a name and a version")
+    suite_name = args[2].lower()
+    version = args[3]
+    rest = args[3:]
+
+    def get_field(field):
+        for varval in args:
+            if varval.startswith(field + '='):
+                return varval.split('=')[1]
+        return None
+
+    print "Adding suite %s" % suite_name
+    if not dryrun:
+        try:
+            s = d.session()
+            suite = Suite()
+            suite.suite_name = suite_name
+            suite.version = version
+            suite.label = get_field('label')
+            suite.description = get_field('description')
+            suite.origin = get_field('origin')
+            suite.codename = get_field('codename')
+            s.add(suite)
+            s.commit()
+        except IntegrityError, e:
+            die("E: Integrity error adding suite %s (it probably already exists)" % suite_name)
+        except SQLAlchemyError, e:
+            die("E: Error adding suite %s (%s)" % (suite_name, e))
+    print "Suite %s added" % (suite_name)
+
 def suite(command):
     args = [str(x) for x in command]
     Cnf = utils.get_conf()
@@ -183,6 +222,8 @@ def suite(command):
         __suite_list(d, args)
     elif mode == 'show':
         __suite_show(d, args)
+    elif mode == 'add':
+        __suite_add(d, args)
     else:
         die("E: suite command unknown")
 
@@ -286,6 +327,46 @@ dispatch['s-a'] = suite_architecture
 
 ################################################################################
 
+def show_config(command):
+    args = [str(x) for x in command]
+    cnf = utils.get_conf()
+
+    die_arglen(args, 2, "E: config needs at least a command")
+
+    mode = args[1].lower()
+
+    if mode == 'db':
+        connstr = ""
+        if cnf["DB::Host"]:
+            # TCP/IP
+            connstr = "postgres://%s" % cnf["DB::Host"]
+            if cnf["DB::Port"] and cnf["DB::Port"] != "-1":
+                connstr += ":%s" % cnf["DB::Port"]
+            connstr += "/%s" % cnf["DB::Name"]
+        else:
+            # Unix Socket
+            connstr = "postgres:///%s" % cnf["DB::Name"]
+            if cnf["DB::Port"] and cnf["DB::Port"] != "-1":
+                connstr += "?port=%s" % cnf["DB::Port"]
+        print connstr
+    elif mode == 'db-shell':
+        e = ['PGDATABASE']
+        print "PGDATABASE=%s" % cnf["DB::Name"]
+        if cnf["DB::Host"]:
+            print "PGHOST=%s" % cnf["DB::Host"]
+            e.append('PGHOST')
+        if cnf["DB::Port"] and cnf["DB::Port"] != "-1":
+            print "PGPORT=%s" % cnf["DB::Port"]
+            e.append('PGPORT')
+        print "export " + " ".join(e)
+    else:
+        die("E: config command unknown")
+
+dispatch['config'] = show_config
+dispatch['c'] = show_config
+
+################################################################################
+
 def main():
     """Perform administrative work on the dak database"""
     global dryrun