diff -r 5fd8e60a935d -r 94246e90081e mercurial/config.py --- a/mercurial/config.py Sun Apr 26 16:50:43 2009 -0500 +++ b/mercurial/config.py Sun Apr 26 16:50:43 2009 -0500 @@ -42,17 +42,12 @@ def __iter__(self): for d in self.sections(): yield d - def update(self, src, sections=None): - if not sections: - sections = src.sections() - for s in sections: - if s not in src: - continue + def update(self, src): + for s in src: if s not in self: self._data[s] = sortdict() - for k in src._data[s]: - self._data[s][k] = src._data[s][k] - self._source[(s, k)] = src._source[(s, k)] + self._data[s].update(src._data[s]) + self._source.update(src._source) def get(self, section, item, default=None): return self._data.get(section, {}).get(item, default) def getsource(self, section, item): @@ -67,7 +62,7 @@ self._data[section][item] = value self._source[(section, item)] = source - def read(self, path, fp=None): + def read(self, path, fp=None, sections=None): sectionre = re.compile(r'\[([^\[]+)\]') itemre = re.compile(r'([^=\s]+)\s*=\s*(.*\S|)') contre = re.compile(r'\s+(\S.*\S)') @@ -87,6 +82,8 @@ if cont: m = contre.match(l) if m: + 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)) continue @@ -110,12 +107,16 @@ m = itemre.match(l) if m: item = m.group(1) + cont = 1 + if sections and section not in sections: + continue self.set(section, item, m.group(2), "%s:%d" % (path, line)) - cont = 1 continue m = unsetre.match(l) if m: name = m.group(1) + if sections and section not in sections: + continue if self.get(section, name) != None: del self._data[section][name] continue