Show More
@@ -644,6 +644,11 b' class patternmatcher(basematcher):' | |||||
644 | super(patternmatcher, self).__init__(badfn) |
|
644 | super(patternmatcher, self).__init__(badfn) | |
645 | kindpats.sort() |
|
645 | kindpats.sort() | |
646 |
|
646 | |||
|
647 | if rustmod is not None: | |||
|
648 | # We need to pass the patterns to Rust because they can contain | |||
|
649 | # patterns from the user interface | |||
|
650 | self._kindpats = kindpats | |||
|
651 | ||||
647 | roots, dirs, parents = _rootsdirsandparents(kindpats) |
|
652 | roots, dirs, parents = _rootsdirsandparents(kindpats) | |
648 | self._files = _explicitfiles(kindpats) |
|
653 | self._files = _explicitfiles(kindpats) | |
649 | self._dirs_explicit = set(dirs) |
|
654 | self._dirs_explicit = set(dirs) |
@@ -17,7 +17,7 b' use cpython::{' | |||||
17 | use hg::dirstate::status::StatusPath; |
|
17 | use hg::dirstate::status::StatusPath; | |
18 | use hg::matchers::{ |
|
18 | use hg::matchers::{ | |
19 | DifferenceMatcher, IntersectionMatcher, Matcher, NeverMatcher, |
|
19 | DifferenceMatcher, IntersectionMatcher, Matcher, NeverMatcher, | |
20 | UnionMatcher, |
|
20 | PatternMatcher, UnionMatcher, | |
21 | }; |
|
21 | }; | |
22 | use hg::{ |
|
22 | use hg::{ | |
23 | matchers::{AlwaysMatcher, FileMatcher, IncludeMatcher}, |
|
23 | matchers::{AlwaysMatcher, FileMatcher, IncludeMatcher}, | |
@@ -253,6 +253,38 b' fn extract_matcher(' | |||||
253 |
|
253 | |||
254 | Ok(Box::new(DifferenceMatcher::new(m1, m2))) |
|
254 | Ok(Box::new(DifferenceMatcher::new(m1, m2))) | |
255 | } |
|
255 | } | |
|
256 | "patternmatcher" => { | |||
|
257 | let ignore_patterns = 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 | ||||
|
283 | let matcher = PatternMatcher::new(ignore_patterns) | |||
|
284 | .map_err(|e| handle_fallback(py, e.into()))?; | |||
|
285 | ||||
|
286 | Ok(Box::new(matcher)) | |||
|
287 | } | |||
256 | e => Err(PyErr::new::<FallbackError, _>( |
|
288 | e => Err(PyErr::new::<FallbackError, _>( | |
257 | py, |
|
289 | py, | |
258 | format!("Unsupported matcher {}", e), |
|
290 | format!("Unsupported matcher {}", e), |
General Comments 0
You need to be logged in to leave comments.
Login now