config: give it an includepaths option for looking for config files

It is desirable to "derive" templates from the provided templates. A
simple way to do this is e.g.

    %include map-cmdline.default

in your own mapfile. Then you only have to redefine a few templates
instead of copying over the whole thing. This %include mechanism
already works for the built-in templates because by default it *only*
looks for files that are in the same directory as the including
mapfile.

With this changeset, config grows an option to add more include paths
for config files.
This commit is contained in:
Jordi Gutiérrez Hermoso 2015-05-15 09:04:32 -04:00
parent 832b375a47
commit cdc5a09f13

View File

@ -10,10 +10,11 @@ import error, util
import os, errno
class config(object):
def __init__(self, data=None):
def __init__(self, data=None, includepaths=[]):
self._data = {}
self._source = {}
self._unset = []
self._includepaths = includepaths
if data:
for k in data._data:
self._data[k] = data[k].copy()
@ -110,13 +111,17 @@ class config(object):
item = None
cont = False
m = includere.match(l)
if m:
inc = util.expandpath(m.group(1))
base = os.path.dirname(src)
inc = os.path.normpath(os.path.join(base, inc))
if include:
if m and include:
expanded = util.expandpath(m.group(1))
includepaths = [os.path.dirname(src)] + self._includepaths
for base in includepaths:
inc = os.path.normpath(os.path.join(base, expanded))
try:
include(inc, remap=remap, sections=sections)
break
except IOError, inst:
if inst.errno != errno.ENOENT:
raise error.ParseError(_("cannot include %s (%s)")