mirror of
https://github.com/facebook/sapling.git
synced 2024-10-07 07:17:55 +03:00
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:
parent
832b375a47
commit
cdc5a09f13
@ -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)")
|
||||
|
Loading…
Reference in New Issue
Block a user