Mercurial > hg
changeset 8265:52c5be55af82
config: add parse interface
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Thu, 30 Apr 2009 19:22:06 -0500 |
parents | 63ea850b3312 |
children | bb9f13974d8e |
files | mercurial/config.py |
diffstat | 1 files changed, 13 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/config.py Mon Apr 27 21:33:39 2009 +0300 +++ b/mercurial/config.py Thu Apr 30 19:22:06 2009 -0500 @@ -69,7 +69,7 @@ self._data[section][item] = value self._source[(section, item)] = source - def read(self, path, fp=None, sections=None): + def parse(self, src, data, sections=None, remap=None, include=None): sectionre = re.compile(r'\[([^\[]+)\]') itemre = re.compile(r'([^=\s][^=]*?)\s*=\s*(.*\S|)') contre = re.compile(r'\s+(\S.*\S)') @@ -81,10 +81,7 @@ line = 0 cont = 0 - if not fp: - fp = open(path) - - for l in fp: + for l in data.splitlines(1): line += 1 if cont: m = contre.match(l) @@ -92,16 +89,16 @@ if sections and section not in sections: continue v = self.get(section, item) + "\n" + m.group(1) - self.set(section, item, v, "%s:%d" % (path, line)) + self.set(section, item, v, "%s:%d" % (src, line)) continue item = None m = includere.match(l) if m: inc = m.group(1) - base = os.path.dirname(path) + base = os.path.dirname(src) inc = os.path.normpath(os.path.join(base, inc)) - incfp = open(inc) - self.read(inc, incfp) + if include: + include(inc, remap=remap, sections=sections) continue if emptyre.match(l): continue @@ -117,7 +114,7 @@ cont = 1 if sections and section not in sections: continue - self.set(section, item, m.group(2), "%s:%d" % (path, line)) + self.set(section, item, m.group(2), "%s:%d" % (src, line)) continue m = unsetre.match(l) if m: @@ -129,4 +126,9 @@ continue raise error.ConfigError(_('config error at %s:%d: \'%s\'') - % (path, line, l.rstrip())) + % (src, line, l.rstrip())) + + def read(self, path, fp=None, sections=None, remap=None): + if not fp: + fp = open(path) + self.parse(path, fp.read(), sections, remap, self.read)