##// END OF EJS Templates
match: share code between includematcher and patternmatcher...
Arseniy Alekseyev -
r52497:32ba01b5 default
parent child Browse files
Show More
@@ -153,6 +153,33 b' pub fn status_wrapper('
153 )
153 )
154 }
154 }
155
155
156 fn collect_kindpats(
157 py: Python,
158 matcher: PyObject,
159 ) -> PyResult<Vec<IgnorePattern>> {
160 matcher
161 .getattr(py, "_kindpats")?
162 .iter(py)?
163 .map(|k| {
164 let k = k?;
165 let syntax = parse_pattern_syntax(
166 &[
167 k.get_item(py, 0)?.extract::<PyBytes>(py)?.data(py),
168 &b":"[..],
169 ]
170 .concat(),
171 )
172 .map_err(|e| handle_fallback(py, StatusError::Pattern(e)))?;
173 let pattern = k.get_item(py, 1)?.extract::<PyBytes>(py)?;
174 let pattern = pattern.data(py);
175 let source = k.get_item(py, 2)?.extract::<PyBytes>(py)?;
176 let source = get_path_from_bytes(source.data(py));
177 let new = IgnorePattern::new(syntax, pattern, source);
178 Ok(new)
179 })
180 .collect()
181 }
182
156 /// Transform a Python matcher into a Rust matcher.
183 /// Transform a Python matcher into a Rust matcher.
157 fn extract_matcher(
184 fn extract_matcher(
158 py: Python,
185 py: Python,
@@ -199,33 +226,7 b' fn extract_matcher('
199 // Get the patterns from Python even though most of them are
226 // Get the patterns from Python even though most of them are
200 // redundant with those we will parse later on, as they include
227 // redundant with those we will parse later on, as they include
201 // those passed from the command line.
228 // those passed from the command line.
202 let ignore_patterns: PyResult<Vec<_>> = matcher
229 let ignore_patterns = collect_kindpats(py, matcher)?;
203 .getattr(py, "_kindpats")?
204 .iter(py)?
205 .map(|k| {
206 let k = k?;
207 let syntax = parse_pattern_syntax(
208 &[
209 k.get_item(py, 0)?
210 .extract::<PyBytes>(py)?
211 .data(py),
212 &b":"[..],
213 ]
214 .concat(),
215 )
216 .map_err(|e| {
217 handle_fallback(py, StatusError::Pattern(e))
218 })?;
219 let pattern = k.get_item(py, 1)?.extract::<PyBytes>(py)?;
220 let pattern = pattern.data(py);
221 let source = k.get_item(py, 2)?.extract::<PyBytes>(py)?;
222 let source = get_path_from_bytes(source.data(py));
223 let new = IgnorePattern::new(syntax, pattern, source);
224 Ok(new)
225 })
226 .collect();
227
228 let ignore_patterns = ignore_patterns?;
229
230
230 let matcher = IncludeMatcher::new(ignore_patterns)
231 let matcher = IncludeMatcher::new(ignore_patterns)
231 .map_err(|e| handle_fallback(py, e.into()))?;
232 .map_err(|e| handle_fallback(py, e.into()))?;
@@ -254,33 +255,9 b' fn extract_matcher('
254 Ok(Box::new(DifferenceMatcher::new(m1, m2)))
255 Ok(Box::new(DifferenceMatcher::new(m1, m2)))
255 }
256 }
256 "patternmatcher" => {
257 "patternmatcher" => {
257 let ignore_patterns = matcher
258 let patterns = collect_kindpats(py, matcher)?;
258 .getattr(py, "_kindpats")?
259 .iter(py)?
260 .map(|k| {
261 let k = k?;
262 let syntax = parse_pattern_syntax(
263 &[
264 k.get_item(py, 0)?
265 .extract::<PyBytes>(py)?
266 .data(py),
267 &b":"[..],
268 ]
269 .concat(),
270 )
271 .map_err(|e| {
272 handle_fallback(py, StatusError::Pattern(e))
273 })?;
274 let pattern = k.get_item(py, 1)?.extract::<PyBytes>(py)?;
275 let pattern = pattern.data(py);
276 let source = k.get_item(py, 2)?.extract::<PyBytes>(py)?;
277 let source = get_path_from_bytes(source.data(py));
278 let new = IgnorePattern::new(syntax, pattern, source);
279 Ok(new)
280 })
281 .collect::<PyResult<Vec<_>>>()?;
282
259
283 let matcher = PatternMatcher::new(ignore_patterns)
260 let matcher = PatternMatcher::new(patterns)
284 .map_err(|e| handle_fallback(py, e.into()))?;
261 .map_err(|e| handle_fallback(py, e.into()))?;
285
262
286 Ok(Box::new(matcher))
263 Ok(Box::new(matcher))
General Comments 0
You need to be logged in to leave comments. Login now