##// END OF EJS Templates
config: add parse interface
Matt Mackall -
r8265:52c5be55 default
parent child Browse files
Show More
@@ -69,7 +69,7 b' class config(object):'
69 self._data[section][item] = value
69 self._data[section][item] = value
70 self._source[(section, item)] = source
70 self._source[(section, item)] = source
71
71
72 def read(self, path, fp=None, sections=None):
72 def parse(self, src, data, sections=None, remap=None, include=None):
73 sectionre = re.compile(r'\[([^\[]+)\]')
73 sectionre = re.compile(r'\[([^\[]+)\]')
74 itemre = re.compile(r'([^=\s][^=]*?)\s*=\s*(.*\S|)')
74 itemre = re.compile(r'([^=\s][^=]*?)\s*=\s*(.*\S|)')
75 contre = re.compile(r'\s+(\S.*\S)')
75 contre = re.compile(r'\s+(\S.*\S)')
@@ -81,10 +81,7 b' class config(object):'
81 line = 0
81 line = 0
82 cont = 0
82 cont = 0
83
83
84 if not fp:
84 for l in data.splitlines(1):
85 fp = open(path)
86
87 for l in fp:
88 line += 1
85 line += 1
89 if cont:
86 if cont:
90 m = contre.match(l)
87 m = contre.match(l)
@@ -92,16 +89,16 b' class config(object):'
92 if sections and section not in sections:
89 if sections and section not in sections:
93 continue
90 continue
94 v = self.get(section, item) + "\n" + m.group(1)
91 v = self.get(section, item) + "\n" + m.group(1)
95 self.set(section, item, v, "%s:%d" % (path, line))
92 self.set(section, item, v, "%s:%d" % (src, line))
96 continue
93 continue
97 item = None
94 item = None
98 m = includere.match(l)
95 m = includere.match(l)
99 if m:
96 if m:
100 inc = m.group(1)
97 inc = m.group(1)
101 base = os.path.dirname(path)
98 base = os.path.dirname(src)
102 inc = os.path.normpath(os.path.join(base, inc))
99 inc = os.path.normpath(os.path.join(base, inc))
103 incfp = open(inc)
100 if include:
104 self.read(inc, incfp)
101 include(inc, remap=remap, sections=sections)
105 continue
102 continue
106 if emptyre.match(l):
103 if emptyre.match(l):
107 continue
104 continue
@@ -117,7 +114,7 b' class config(object):'
117 cont = 1
114 cont = 1
118 if sections and section not in sections:
115 if sections and section not in sections:
119 continue
116 continue
120 self.set(section, item, m.group(2), "%s:%d" % (path, line))
117 self.set(section, item, m.group(2), "%s:%d" % (src, line))
121 continue
118 continue
122 m = unsetre.match(l)
119 m = unsetre.match(l)
123 if m:
120 if m:
@@ -129,4 +126,9 b' class config(object):'
129 continue
126 continue
130
127
131 raise error.ConfigError(_('config error at %s:%d: \'%s\'')
128 raise error.ConfigError(_('config error at %s:%d: \'%s\'')
132 % (path, line, l.rstrip()))
129 % (src, line, l.rstrip()))
130
131 def read(self, path, fp=None, sections=None, remap=None):
132 if not fp:
133 fp = open(path)
134 self.parse(path, fp.read(), sections, remap, self.read)
General Comments 0
You need to be logged in to leave comments. Login now