]> git.decadent.org.uk Git - dak.git/blobdiff - dak/admin.py
Port bts_categorize to python-debianbts
[dak.git] / dak / admin.py
index 1cf80f2855a414d858fb1a7777a2101c9d5a2ccf..2bb1f1853187af821ccf06c317bf40cc6de8aefd 100755 (executable)
@@ -25,7 +25,6 @@ import apt_pkg
 
 from daklib import utils
 from daklib.dbconn import *
 
 from daklib import utils
 from daklib.dbconn import *
-from daklib.config import Config
 
 ################################################################################
 
 
 ################################################################################
 
@@ -56,6 +55,10 @@ Perform administrative work on the dak database.
 
   Commands can use a long or abbreviated form:
 
 
   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
   architecture / a:
      a list                 show a list of architectures
      a rm ARCH              remove an architecture (will only work if
@@ -65,6 +68,14 @@ Perform administrative work on the dak database.
                             If SUITELIST is given, add to each of the
                             suites at the same time
 
                             If SUITELIST is given, add to each of the
                             suites at the same time
 
+  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
      s-a list-arch SUITE    show the architectures in a SUITE
   suite-architecture / s-a:
      s-a list-suite ARCH    show the suites an ARCH is in
      s-a list-arch SUITE    show the architectures in a SUITE
@@ -151,6 +162,82 @@ dispatch['a'] = architecture
 
 ################################################################################
 
 
 ################################################################################
 
+def __suite_list(d, args):
+    s = d.session()
+    for j in s.query(Suite).order_by('suite_name').all():
+        print j.suite_name
+
+def __suite_show(d, args):
+    if len(args) < 2:
+        die("E: showing an suite entry requires a suite")
+
+    s = d.session()
+    su = get_suite(args[2].lower())
+    if su is None:
+        die("E: can't find suite entry for %s" % (args[2].lower()))
+
+    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()
+    d = DBConn()
+
+    die_arglen(args, 2, "E: suite needs at least a command")
+
+    mode = args[1].lower()
+
+    if mode == 'list':
+        __suite_list(d, args)
+    elif mode == 'show':
+        __suite_show(d, args)
+    elif mode == 'add':
+        __suite_add(d, args)
+    else:
+        die("E: suite command unknown")
+
+dispatch['suite'] = suite
+dispatch['s'] = suite
+
+################################################################################
+
+def __suite_architecture_list(d, args):
+    s = d.session()
+    for j in s.query(Suite).order_by('suite_name').all():
+        print j.suite_name + ' ' + \
+              ','.join([a.architecture.arch_string for a in j.suitearchitectures])
+
 def __suite_architecture_listarch(d, args):
     die_arglen(args, 3, "E: suite-architecture list-arch requires a suite")
     a = get_suite_architectures(args[2].lower())
 def __suite_architecture_listarch(d, args):
     die_arglen(args, 3, "E: suite-architecture list-arch requires a suite")
     a = get_suite_architectures(args[2].lower())
@@ -210,7 +297,7 @@ def __suite_architecture_rm(d, args):
         except SQLAlchemyError, e:
             die("E: Can't remove suite-architecture entry (%s, %s) - %s" % (args[2].lower(), args[3].lower(), e))
 
         except SQLAlchemyError, e:
             die("E: Can't remove suite-architecture entry (%s, %s) - %s" % (args[2].lower(), args[3].lower(), e))
 
-    print "Removed suite-architecture entry for %s, %s" % (args[2].lower(), args[3].lower()) 
+    print "Removed suite-architecture entry for %s, %s" % (args[2].lower(), args[3].lower())
 
 
 def suite_architecture(command):
 
 
 def suite_architecture(command):
@@ -222,7 +309,9 @@ def suite_architecture(command):
 
     mode = args[1].lower()
 
 
     mode = args[1].lower()
 
-    if mode == 'list-arch':
+    if mode == 'list':
+        __suite_architecture_list(d, args)
+    elif mode == 'list-arch':
         __suite_architecture_listarch(d, args)
     elif mode == 'list-suite':
         __suite_architecture_listsuite(d, args)
         __suite_architecture_listarch(d, args)
     elif mode == 'list-suite':
         __suite_architecture_listsuite(d, args)
@@ -238,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
 def main():
     """Perform administrative work on the dak database"""
     global dryrun