config: unify 'confdirs' and 'roots' semantics
authorTimo Savola <tsavola@movial.fi>
Tue, 10 Jun 2008 11:31:15 +0000 (14:31 +0300)
committerTimo Savola <tsavola@movial.fi>
Tue, 10 Jun 2008 11:34:25 +0000 (14:34 +0300)
both lists are ordered from generic to specific - appending does The Right
Thing in normal situations:

    * confdirs specified on the command-line are in a separate list, and
      they are always handled as "more specific" locations than the normal
      confdirs.

    * since roots are now in "most generic first" order, they can simply be
      appended in config files (which are parsed in "most generic first"
      order).

matrix/config.py
matrix/matrix.py
matrix/repositories.py

index df4f21d..c6792c9 100644 (file)
@@ -69,7 +69,8 @@ def parse(pattern, require=True):
        if isabs(pattern):
                dirs = [None]
        else:
-               dirs = [join(config.top_dir, dir) for dir in config.confdirs]
+               all_confdirs = config.confdirs + config.initial_confdirs
+               dirs = [join(config.top_dir, dir) for dir in all_confdirs]
                dirs.append(config.top_dir)
 
        found = False
@@ -95,6 +96,7 @@ def parse(pattern, require=True):
 
 class Config(object):
        def __init__(self):
+               self.initial_confdirs = []
                self.confdirs = []
 
                self.top_dir = getenv('MATRIX_TOPDIR', '')
index 7e9a2fe..84cbd4b 100644 (file)
@@ -21,13 +21,13 @@ Error = RuntimeError
 
 def merge_config(name, value):
        if isinstance(value, list):
-               value = value + getattr(config, name, [])
+               value = getattr(config, name, []) + value
        setattr(config, name, value)
 
 def main():
        command, targets, options = parse_args()
 
-       for name in ('debug', 'confdirs'):
+       for name in ('debug', 'initial_confdirs'):
                if name in options:
                        merge_config(name, options[name])
 
@@ -101,11 +101,11 @@ def parse_args():
                                (opt, value))
                options[option.dest] = value
 
-       def prepend(option, opt, value, parser):
+       def append(option, opt, value, parser):
                l = options.get(option.dest, [])
                if not l:
                        options[option.dest] = l
-               l.insert(0, value)
+               l.append(value)
 
        parser = optparse.OptionParser(
                usage='%prog [<options>] <command> [<components>]',
@@ -130,14 +130,14 @@ def parse_args():
                '-c', '--confdir', metavar='DIR',
                help='add a directory for finding config files (may be set ' \
                     'multiple times; last is searched first)',
-               dest='confdirs', action='callback', callback=prepend,
+               dest='initial_confdirs', action='callback', callback=append,
                type='string')
 
        parser.add_option(
                '-r', '--root', metavar='URL',
                help='add a location for finding git repos when cloning ' \
                     '(may be set multiple times; last is searched first)',
-               dest='roots', action='callback', callback=prepend,
+               dest='roots', action='callback', callback=append,
                type='string')
 
        parser.add_option(
index e037d3f..5fb2200 100644 (file)
@@ -40,7 +40,10 @@ class Repository(object):
                return self.__url_branch
 
        def __new_url_branch(self):
-               for root, branch in config.roots:
+               rev_roots = config.roots[:]
+               rev_roots.reverse()
+
+               for root, branch in rev_roots:
                        for suffix in ('.git', ''):
                                url = '%s/%s%s' % (root, self.name, suffix)