# HG changeset patch # User Rapha?l Gom?s # Date 1657100760 -7200 # Node ID 6193e846cb65300ad830a0e95ec65375a1194ff1 # Parent d8ce883ff1f4509c10ce5505313b070e68acb206 rust-status: expose DifferenceMatcher from Rust to Python diff -r d8ce883ff1f4 -r 6193e846cb65 mercurial/dirstate.py --- a/mercurial/dirstate.py Wed Jul 06 11:44:20 2022 +0200 +++ b/mercurial/dirstate.py Wed Jul 06 11:46:00 2022 +0200 @@ -1287,6 +1287,7 @@ allowed_matchers = ( matchmod.alwaysmatcher, + matchmod.differencematcher, matchmod.exactmatcher, matchmod.includematcher, matchmod.intersectionmatcher, diff -r d8ce883ff1f4 -r 6193e846cb65 rust/hg-cpython/src/dirstate/status.rs --- a/rust/hg-cpython/src/dirstate/status.rs Wed Jul 06 11:44:20 2022 +0200 +++ b/rust/hg-cpython/src/dirstate/status.rs Wed Jul 06 11:46:00 2022 +0200 @@ -15,7 +15,10 @@ PyResult, PyTuple, Python, PythonObject, ToPyObject, }; use hg::dirstate::status::StatusPath; -use hg::matchers::{IntersectionMatcher, Matcher, NeverMatcher, UnionMatcher}; +use hg::matchers::{ + DifferenceMatcher, IntersectionMatcher, Matcher, NeverMatcher, + UnionMatcher, +}; use hg::{ matchers::{AlwaysMatcher, FileMatcher, IncludeMatcher}, parse_pattern_syntax, @@ -233,6 +236,12 @@ Ok(Box::new(IntersectionMatcher::new(m1, m2))) } + "differencematcher" => { + let m1 = extract_matcher(py, matcher.getattr(py, "_m1")?)?; + let m2 = extract_matcher(py, matcher.getattr(py, "_m2")?)?; + + Ok(Box::new(DifferenceMatcher::new(m1, m2))) + } e => Err(PyErr::new::( py, format!("Unsupported matcher {}", e),