# HG changeset patch # User Raphaël Gomès # Date 1654695554 -7200 # Node ID 0043c7aa3250af867b40d0d2f515f07672fbacb7 # Parent b508cffd3c04fdd5d493a73548eaf60053a51872 rust-dirstate: add `unionmatcher` to the allowed matchers `UnionMatcher` is now implemented in Rust. diff -r b508cffd3c04 -r 0043c7aa3250 mercurial/dirstate.py --- a/mercurial/dirstate.py Wed Jun 08 11:55:40 2022 +0200 +++ b/mercurial/dirstate.py Wed Jun 08 15:39:14 2022 +0200 @@ -1247,6 +1247,7 @@ matchmod.alwaysmatcher, matchmod.exactmatcher, matchmod.includematcher, + matchmod.unionmatcher, ) if rustmod is None: diff -r b508cffd3c04 -r 0043c7aa3250 rust/hg-cpython/src/dirstate/status.rs --- a/rust/hg-cpython/src/dirstate/status.rs Wed Jun 08 11:55:40 2022 +0200 +++ b/rust/hg-cpython/src/dirstate/status.rs Wed Jun 08 15:39:14 2022 +0200 @@ -15,7 +15,7 @@ PyResult, PyTuple, Python, PythonObject, ToPyObject, }; use hg::dirstate::status::StatusPath; -use hg::matchers::Matcher; +use hg::matchers::{Matcher, UnionMatcher}; use hg::{ matchers::{AlwaysMatcher, FileMatcher, IncludeMatcher}, parse_pattern_syntax, @@ -217,6 +217,15 @@ Ok(Box::new(matcher)) } + "unionmatcher" => { + let matchers: PyResult> = matcher + .getattr(py, "_matchers")? + .iter(py)? + .map(|py_matcher| extract_matcher(py, py_matcher?)) + .collect(); + + Ok(Box::new(UnionMatcher::new(matchers?))) + } e => Err(PyErr::new::( py, format!("Unsupported matcher {}", e),