##// END OF EJS Templates
config: add section filter to read...
Matt Mackall -
r8193:94246e90 default
parent child Browse files
Show More
@@ -42,17 +42,12 b' class config(object):'
42 def __iter__(self):
42 def __iter__(self):
43 for d in self.sections():
43 for d in self.sections():
44 yield d
44 yield d
45 def update(self, src, sections=None):
45 def update(self, src):
46 if not sections:
46 for s in src:
47 sections = src.sections()
48 for s in sections:
49 if s not in src:
50 continue
51 if s not in self:
47 if s not in self:
52 self._data[s] = sortdict()
48 self._data[s] = sortdict()
53 for k in src._data[s]:
49 self._data[s].update(src._data[s])
54 self._data[s][k] = src._data[s][k]
50 self._source.update(src._source)
55 self._source[(s, k)] = src._source[(s, k)]
56 def get(self, section, item, default=None):
51 def get(self, section, item, default=None):
57 return self._data.get(section, {}).get(item, default)
52 return self._data.get(section, {}).get(item, default)
58 def getsource(self, section, item):
53 def getsource(self, section, item):
@@ -67,7 +62,7 b' class config(object):'
67 self._data[section][item] = value
62 self._data[section][item] = value
68 self._source[(section, item)] = source
63 self._source[(section, item)] = source
69
64
70 def read(self, path, fp=None):
65 def read(self, path, fp=None, sections=None):
71 sectionre = re.compile(r'\[([^\[]+)\]')
66 sectionre = re.compile(r'\[([^\[]+)\]')
72 itemre = re.compile(r'([^=\s]+)\s*=\s*(.*\S|)')
67 itemre = re.compile(r'([^=\s]+)\s*=\s*(.*\S|)')
73 contre = re.compile(r'\s+(\S.*\S)')
68 contre = re.compile(r'\s+(\S.*\S)')
@@ -87,6 +82,8 b' class config(object):'
87 if cont:
82 if cont:
88 m = contre.match(l)
83 m = contre.match(l)
89 if m:
84 if m:
85 if sections and section not in sections:
86 continue
90 v = self.get(section, item) + "\n" + m.group(1)
87 v = self.get(section, item) + "\n" + m.group(1)
91 self.set(section, item, v, "%s:%d" % (path, line))
88 self.set(section, item, v, "%s:%d" % (path, line))
92 continue
89 continue
@@ -110,12 +107,16 b' class config(object):'
110 m = itemre.match(l)
107 m = itemre.match(l)
111 if m:
108 if m:
112 item = m.group(1)
109 item = m.group(1)
110 cont = 1
111 if sections and section not in sections:
112 continue
113 self.set(section, item, m.group(2), "%s:%d" % (path, line))
113 self.set(section, item, m.group(2), "%s:%d" % (path, line))
114 cont = 1
115 continue
114 continue
116 m = unsetre.match(l)
115 m = unsetre.match(l)
117 if m:
116 if m:
118 name = m.group(1)
117 name = m.group(1)
118 if sections and section not in sections:
119 continue
119 if self.get(section, name) != None:
120 if self.get(section, name) != None:
120 del self._data[section][name]
121 del self._data[section][name]
121 continue
122 continue
@@ -82,17 +82,17 b' class ui(object):'
82 trusted = sections or assumetrusted or self._is_trusted(fp, filename)
82 trusted = sections or assumetrusted or self._is_trusted(fp, filename)
83
83
84 try:
84 try:
85 cdata.read(filename, fp)
85 cdata.read(filename, fp, sections=sections)
86 except error.ConfigError, inst:
86 except error.ConfigError, inst:
87 if trusted:
87 if trusted:
88 raise
88 raise
89 self.warn(_("Ignored: %s\n") % str(inst))
89 self.warn(_("Ignored: %s\n") % str(inst))
90
90
91 if trusted:
91 if trusted:
92 self.cdata.update(cdata, sections)
92 self.cdata.update(cdata)
93 self.cdata.update(self.overlay, sections)
93 self.cdata.update(self.overlay)
94 self.ucdata.update(cdata, sections)
94 self.ucdata.update(cdata)
95 self.ucdata.update(self.overlay, sections)
95 self.ucdata.update(self.overlay)
96
96
97 if root is None:
97 if root is None:
98 root = os.path.expanduser('~')
98 root = os.path.expanduser('~')
General Comments 0
You need to be logged in to leave comments. Login now