conf: Add a format-options --nosort option to keep order of sections as defined
authorMartin Willi <martin@revosec.ch>
Tue, 29 Apr 2014 10:13:33 +0000 (12:13 +0200)
committerMartin Willi <martin@revosec.ch>
Wed, 7 May 2014 13:48:17 +0000 (15:48 +0200)
conf/format-options.py

index e591f37..7d67c98 100755 (executable)
@@ -92,8 +92,9 @@ class ConfigOption:
 
 class Parser:
        """Parses one or more files of configuration options"""
-       def __init__(self):
+       def __init__(self, sort = True):
                self.options = []
+               self.sort = sort
 
        def parse(self, file):
                """Parses the given file and adds all options to the internal store"""
@@ -145,7 +146,8 @@ class Parser:
                        found.adopt(option)
                else:
                        parent.options.append(option)
-                       parent.options.sort()
+                       if self.sort:
+                               parent.options.sort()
 
        def __get_option(self, parts, create = False):
                """Searches/Creates the option (section) based on a list of section names"""
@@ -160,7 +162,8 @@ class Parser:
                                        break
                                option = ConfigOption(fullname, section = True)
                                options.append(option)
-                               options.sort()
+                               if self.sort:
+                                       options.sort()
                        options = option.options
                return option
 
@@ -310,9 +313,12 @@ options.add_option("-f", "--format", dest="format", type="choice", choices=["con
 options.add_option("-r", "--root", dest="root", metavar="NAME",
                                   help="root section of which options are printed, "
                                   "if not found everything is printed")
+options.add_option("-n", "--nosort", action="store_false", dest="sort",
+                                  default=True, help="do not sort sections alphabetically")
+
 (opts, args) = options.parse_args()
 
-parser = Parser()
+parser = Parser(opts.sort)
 if len(args):
        for filename in args:
                try: