X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Ftransitions.py;h=1082fa7c9821fb00864242053e3199e5ccba8211;hb=7e39b05c00218a950c6de69a8e8ce0c95e7d2bb4;hp=530ef0c87d99b4677ae87b2c38287d2ffee27c2e;hpb=e8f6c03c237c57f401cd2810d9ad5e6d578f454e;p=dak.git diff --git a/dak/transitions.py b/dak/transitions.py index 530ef0c8..1082fa7c 100755 --- a/dak/transitions.py +++ b/dak/transitions.py @@ -23,7 +23,7 @@ ################################################################################ -import os, pg, sys, time, errno, fcntl, tempfile, pwd +import os, pg, sys, time, errno, fcntl, tempfile, pwd, re import apt_pkg import daklib.database import daklib.utils @@ -34,6 +34,8 @@ Cnf = None Options = None projectB = None +re_broken_package = re.compile(r"[a-zA-Z]\w+\s+\-.*") + ################################################################################ ##################################### @@ -110,6 +112,16 @@ def load_transitions(trans_file): # lets do further validation here checkkeys = ["source", "reason", "packages", "new", "rm"] + + # If we get an empty definition - we just have nothing to check, no transitions defined + if type(trans) != dict: + # This can be anything. We could have no transitions defined. Or someone totally fucked up the + # file, adding stuff in a way we dont know or want. Then we set it empty - and simply have no + # transitions anymore. User will see it in the information display after he quit the editor and + # could fix it + trans = "" + return trans + for test in trans: t = trans[test] @@ -125,12 +137,16 @@ def load_transitions(trans_file): if type(t[key]) != list: print "ERROR: Unknown type %s for packages in transition %s." % (type(t[key]), test) failure = True - try: for package in t["packages"]: if type(package) != str: print "ERROR: Packages list contains invalid type %s (as %s) in transition %s" % (type(package), package, test) failure = True + if re_broken_package.match(package): + # Someone had a space too much (or not enough), we have something looking like + # "package1 - package2" now. + print "ERROR: Invalid indentation of package list in transition %s, around package(s): %s" % (test, package) + failure = True except TypeError: # In case someone has an empty packages list print "ERROR: No packages defined in transition %s" % (test) @@ -138,8 +154,11 @@ def load_transitions(trans_file): continue elif type(t[key]) != str: - print "ERROR: Unknown type %s for key %s in transition %s" % (type(t[key]), key, test) - failure = True + if t[key] == "new" and type(t[key]) == int: + # Ok, debian native version + else: + print "ERROR: Unknown type %s for key %s in transition %s" % (type(t[key]), key, test) + failure = True # And now the other way round - are all our keys defined? for key in checkkeys: