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.
--- a/mercurial/config.py Fri May 08 14:13:12 2015 -0700
+++ b/mercurial/config.py Fri May 15 09:04:32 2015 -0400
@@ -10,10 +10,11 @@
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 @@
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)")