Mercurial > public > mercurial-scm > hg
annotate rust/hg-core/src/matchers.rs @ 49439:b07465adbcc8
rhg: make [rhg status -v] work when it needs no extra output
Add support for verbose [status] when no extra output is actually needed.
This makes it so that [rhg status] is actually useful when
[tweakdefaults] is true. (since tweakdefaults implies verbose status)
author | Arseniy Alekseyev <aalekseyev@janestreet.com> |
---|---|
date | Wed, 24 Aug 2022 16:38:13 +0100 |
parents | 97dcd6906e6f |
children | 90512ca6a255 |
rev | line source |
---|---|
43438
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
1 // matchers.rs |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
2 // |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
3 // Copyright 2019 Raphaël Gomès <rgomes@octobus.net> |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
4 // |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
5 // This software may be used and distributed according to the terms of the |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
6 // GNU General Public License version 2 or any later version. |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
7 |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
8 //! Structs and types for matching files and directories. |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
9 |
44519
52d40f8fb82d
rust-matchers: add function to generate a regex matcher function
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44353
diff
changeset
|
10 use crate::{ |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
11 dirstate::dirs_multiset::DirsChildrenMultiset, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
12 filepatterns::{ |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
13 build_single_regex, filter_subincludes, get_patterns_from_file, |
47379
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
14 PatternFileWarning, PatternResult, |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
15 }, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
16 utils::{ |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
17 files::find_dirs, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
18 hg_path::{HgPath, HgPathBuf}, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
19 Escaped, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
20 }, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
21 DirsMultiset, DirstateMapError, FastHashMap, IgnorePattern, PatternError, |
44520
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
22 PatternSyntax, |
44519
52d40f8fb82d
rust-matchers: add function to generate a regex matcher function
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44353
diff
changeset
|
23 }; |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
24 |
48354
2009e3c64a53
rhg: refactor to use IgnoreFnType alias more widely
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48311
diff
changeset
|
25 use crate::dirstate::status::IgnoreFnType; |
44802
e0414fcd35e0
rust-filepatterns: match exact `rootglob`s with a `HashSet`, not in the regex
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44784
diff
changeset
|
26 use crate::filepatterns::normalize_path_bytes; |
44597
e62052d0f377
rust-status: only involve ignore mechanism when needed
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44593
diff
changeset
|
27 use std::borrow::ToOwned; |
43438
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
28 use std::collections::HashSet; |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
29 use std::fmt::{Display, Error, Formatter}; |
43914
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
30 use std::iter::FromIterator; |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
31 use std::ops::Deref; |
44597
e62052d0f377
rust-status: only involve ignore mechanism when needed
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44593
diff
changeset
|
32 use std::path::{Path, PathBuf}; |
43438
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
33 |
44784
83c97c0bd319
rust-matchers: add timing tracing to regex compilation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44597
diff
changeset
|
34 use micro_timer::timed; |
83c97c0bd319
rust-matchers: add timing tracing to regex compilation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44597
diff
changeset
|
35 |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
36 #[derive(Debug, PartialEq)] |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
37 pub enum VisitChildrenSet { |
43438
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
38 /// Don't visit anything |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
39 Empty, |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
40 /// Only visit this directory |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
41 This, |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
42 /// Visit this directory and these subdirectories |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
43 /// TODO Should we implement a `NonEmptyHashSet`? |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
44 Set(HashSet<HgPathBuf>), |
43438
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
45 /// Visit this directory and all subdirectories |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
46 Recursive, |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
47 } |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
48 |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
49 pub trait Matcher { |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
50 /// Explicitly listed files |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
51 fn file_set(&self) -> Option<&HashSet<HgPathBuf>>; |
43438
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
52 /// Returns whether `filename` is in `file_set` |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44973
diff
changeset
|
53 fn exact_match(&self, filename: &HgPath) -> bool; |
43438
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
54 /// Returns whether `filename` is matched by this matcher |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44973
diff
changeset
|
55 fn matches(&self, filename: &HgPath) -> bool; |
43438
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
56 /// Decides whether a directory should be visited based on whether it |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
57 /// has potential matches in it or one of its subdirectories, and |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
58 /// potentially lists which subdirectories of that directory should be |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
59 /// visited. This is based on the match's primary, included, and excluded |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
60 /// patterns. |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
61 /// |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
62 /// # Example |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
63 /// |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
64 /// Assume matchers `['path:foo/bar', 'rootfilesin:qux']`, we would |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
65 /// return the following values (assuming the implementation of |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
66 /// visit_children_set is capable of recognizing this; some implementations |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
67 /// are not). |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
68 /// |
44006
72bced4f2936
rust-matchers: fixing cargo doc
Georges Racinet <georges.racinet@octobus.net>
parents:
43914
diff
changeset
|
69 /// ```text |
43438
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
70 /// ```ignore |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
71 /// '' -> {'foo', 'qux'} |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
72 /// 'baz' -> set() |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
73 /// 'foo' -> {'bar'} |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
74 /// // Ideally this would be `Recursive`, but since the prefix nature of |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
75 /// // matchers is applied to the entire matcher, we have to downgrade this |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
76 /// // to `This` due to the (yet to be implemented in Rust) non-prefix |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
77 /// // `RootFilesIn'-kind matcher being mixed in. |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
78 /// 'foo/bar' -> 'this' |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
79 /// 'qux' -> 'this' |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
80 /// ``` |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
81 /// # Important |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
82 /// |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
83 /// Most matchers do not know if they're representing files or |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
84 /// directories. They see `['path:dir/f']` and don't know whether `f` is a |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
85 /// file or a directory, so `visit_children_set('dir')` for most matchers |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
86 /// will return `HashSet{ HgPath { "f" } }`, but if the matcher knows it's |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
87 /// a file (like the yet to be implemented in Rust `ExactMatcher` does), |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
88 /// it may return `VisitChildrenSet::This`. |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
89 /// Do not rely on the return being a `HashSet` indicating that there are |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
90 /// no files in this dir to investigate (or equivalently that if there are |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
91 /// files to investigate in 'dir' that it will always return |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
92 /// `VisitChildrenSet::This`). |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44973
diff
changeset
|
93 fn visit_children_set(&self, directory: &HgPath) -> VisitChildrenSet; |
43438
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
94 /// Matcher will match everything and `files_set()` will be empty: |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
95 /// optimization might be possible. |
43611
27c25c0dc967
rust-matchers: remove default implementations for `Matcher` trait
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43438
diff
changeset
|
96 fn matches_everything(&self) -> bool; |
43438
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
97 /// Matcher will match exactly the files in `files_set()`: optimization |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
98 /// might be possible. |
43611
27c25c0dc967
rust-matchers: remove default implementations for `Matcher` trait
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43438
diff
changeset
|
99 fn is_exact(&self) -> bool; |
43438
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
100 } |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
101 |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
102 /// Matches everything. |
43834
542c8b277261
rust-matchers: add doctests for `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43832
diff
changeset
|
103 ///``` |
542c8b277261
rust-matchers: add doctests for `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43832
diff
changeset
|
104 /// use hg::{ matchers::{Matcher, AlwaysMatcher}, utils::hg_path::HgPath }; |
542c8b277261
rust-matchers: add doctests for `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43832
diff
changeset
|
105 /// |
542c8b277261
rust-matchers: add doctests for `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43832
diff
changeset
|
106 /// let matcher = AlwaysMatcher; |
542c8b277261
rust-matchers: add doctests for `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43832
diff
changeset
|
107 /// |
43914
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
108 /// assert_eq!(matcher.matches(HgPath::new(b"whatever")), true); |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
109 /// assert_eq!(matcher.matches(HgPath::new(b"b.txt")), true); |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
110 /// assert_eq!(matcher.matches(HgPath::new(b"main.c")), true); |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
111 /// assert_eq!(matcher.matches(HgPath::new(br"re:.*\.c$")), true); |
43834
542c8b277261
rust-matchers: add doctests for `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43832
diff
changeset
|
112 /// ``` |
43438
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
113 #[derive(Debug)] |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
114 pub struct AlwaysMatcher; |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
115 |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
116 impl Matcher for AlwaysMatcher { |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
117 fn file_set(&self) -> Option<&HashSet<HgPathBuf>> { |
43832
1bb4e9b02984
rust-matchers: improve `Matcher` trait ergonomics
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43611
diff
changeset
|
118 None |
43438
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
119 } |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44973
diff
changeset
|
120 fn exact_match(&self, _filename: &HgPath) -> bool { |
43611
27c25c0dc967
rust-matchers: remove default implementations for `Matcher` trait
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43438
diff
changeset
|
121 false |
27c25c0dc967
rust-matchers: remove default implementations for `Matcher` trait
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43438
diff
changeset
|
122 } |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44973
diff
changeset
|
123 fn matches(&self, _filename: &HgPath) -> bool { |
43611
27c25c0dc967
rust-matchers: remove default implementations for `Matcher` trait
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43438
diff
changeset
|
124 true |
27c25c0dc967
rust-matchers: remove default implementations for `Matcher` trait
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43438
diff
changeset
|
125 } |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44973
diff
changeset
|
126 fn visit_children_set(&self, _directory: &HgPath) -> VisitChildrenSet { |
43438
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
127 VisitChildrenSet::Recursive |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
128 } |
43611
27c25c0dc967
rust-matchers: remove default implementations for `Matcher` trait
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43438
diff
changeset
|
129 fn matches_everything(&self) -> bool { |
27c25c0dc967
rust-matchers: remove default implementations for `Matcher` trait
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43438
diff
changeset
|
130 true |
27c25c0dc967
rust-matchers: remove default implementations for `Matcher` trait
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43438
diff
changeset
|
131 } |
27c25c0dc967
rust-matchers: remove default implementations for `Matcher` trait
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43438
diff
changeset
|
132 fn is_exact(&self) -> bool { |
27c25c0dc967
rust-matchers: remove default implementations for `Matcher` trait
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43438
diff
changeset
|
133 false |
27c25c0dc967
rust-matchers: remove default implementations for `Matcher` trait
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43438
diff
changeset
|
134 } |
43438
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
135 } |
43914
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
136 |
49351
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49349
diff
changeset
|
137 /// Matches nothing. |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49349
diff
changeset
|
138 #[derive(Debug)] |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49349
diff
changeset
|
139 pub struct NeverMatcher; |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49349
diff
changeset
|
140 |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49349
diff
changeset
|
141 impl Matcher for NeverMatcher { |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49349
diff
changeset
|
142 fn file_set(&self) -> Option<&HashSet<HgPathBuf>> { |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49349
diff
changeset
|
143 None |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49349
diff
changeset
|
144 } |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49349
diff
changeset
|
145 fn exact_match(&self, _filename: &HgPath) -> bool { |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49349
diff
changeset
|
146 false |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49349
diff
changeset
|
147 } |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49349
diff
changeset
|
148 fn matches(&self, _filename: &HgPath) -> bool { |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49349
diff
changeset
|
149 false |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49349
diff
changeset
|
150 } |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49349
diff
changeset
|
151 fn visit_children_set(&self, _directory: &HgPath) -> VisitChildrenSet { |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49349
diff
changeset
|
152 VisitChildrenSet::Empty |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49349
diff
changeset
|
153 } |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49349
diff
changeset
|
154 fn matches_everything(&self) -> bool { |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49349
diff
changeset
|
155 false |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49349
diff
changeset
|
156 } |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49349
diff
changeset
|
157 fn is_exact(&self) -> bool { |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49349
diff
changeset
|
158 true |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49349
diff
changeset
|
159 } |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49349
diff
changeset
|
160 } |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49349
diff
changeset
|
161 |
43914
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
162 /// Matches the input files exactly. They are interpreted as paths, not |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
163 /// patterns. |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
164 /// |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
165 ///``` |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44973
diff
changeset
|
166 /// use hg::{ matchers::{Matcher, FileMatcher}, utils::hg_path::{HgPath, HgPathBuf} }; |
43914
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
167 /// |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
168 /// let files = vec![HgPathBuf::from_bytes(b"a.txt"), HgPathBuf::from_bytes(br"re:.*\.c$")]; |
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
169 /// let matcher = FileMatcher::new(files).unwrap(); |
43914
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
170 /// |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
171 /// assert_eq!(matcher.matches(HgPath::new(b"a.txt")), true); |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
172 /// assert_eq!(matcher.matches(HgPath::new(b"b.txt")), false); |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
173 /// assert_eq!(matcher.matches(HgPath::new(b"main.c")), false); |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
174 /// assert_eq!(matcher.matches(HgPath::new(br"re:.*\.c$")), true); |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
175 /// ``` |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
176 #[derive(Debug)] |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
177 pub struct FileMatcher { |
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
178 files: HashSet<HgPathBuf>, |
43914
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
179 dirs: DirsMultiset, |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
180 } |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
181 |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
182 impl FileMatcher { |
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
183 pub fn new(files: Vec<HgPathBuf>) -> Result<Self, DirstateMapError> { |
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
184 let dirs = DirsMultiset::from_manifest(&files)?; |
43914
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
185 Ok(Self { |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
186 files: HashSet::from_iter(files.into_iter()), |
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
187 dirs, |
43914
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
188 }) |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
189 } |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44973
diff
changeset
|
190 fn inner_matches(&self, filename: &HgPath) -> bool { |
43914
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
191 self.files.contains(filename.as_ref()) |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
192 } |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
193 } |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
194 |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
195 impl Matcher for FileMatcher { |
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
196 fn file_set(&self) -> Option<&HashSet<HgPathBuf>> { |
43914
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
197 Some(&self.files) |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
198 } |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44973
diff
changeset
|
199 fn exact_match(&self, filename: &HgPath) -> bool { |
43914
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
200 self.inner_matches(filename) |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
201 } |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44973
diff
changeset
|
202 fn matches(&self, filename: &HgPath) -> bool { |
43914
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
203 self.inner_matches(filename) |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
204 } |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44973
diff
changeset
|
205 fn visit_children_set(&self, directory: &HgPath) -> VisitChildrenSet { |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
206 if self.files.is_empty() || !self.dirs.contains(&directory) { |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
207 return VisitChildrenSet::Empty; |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
208 } |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
209 let mut candidates: HashSet<HgPathBuf> = |
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
210 self.dirs.iter().cloned().collect(); |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
211 |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
212 candidates.extend(self.files.iter().cloned()); |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
213 candidates.remove(HgPath::new(b"")); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
214 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
215 if !directory.as_ref().is_empty() { |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
216 let directory = [directory.as_ref().as_bytes(), b"/"].concat(); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
217 candidates = candidates |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
218 .iter() |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
219 .filter_map(|c| { |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
220 if c.as_bytes().starts_with(&directory) { |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
221 Some(HgPathBuf::from_bytes( |
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
222 &c.as_bytes()[directory.len()..], |
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
223 )) |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
224 } else { |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
225 None |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
226 } |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
227 }) |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
228 .collect(); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
229 } |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
230 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
231 // `self.dirs` includes all of the directories, recursively, so if |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
232 // we're attempting to match 'foo/bar/baz.txt', it'll have '', 'foo', |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
233 // 'foo/bar' in it. Thus we can safely ignore a candidate that has a |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
234 // '/' in it, indicating it's for a subdir-of-a-subdir; the immediate |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
235 // subdir will be in there without a slash. |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
236 VisitChildrenSet::Set( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
237 candidates |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
238 .into_iter() |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
239 .filter_map(|c| { |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
240 if c.bytes().all(|b| *b != b'/') { |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
241 Some(c) |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
242 } else { |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
243 None |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
244 } |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
245 }) |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
246 .collect(), |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
247 ) |
43914
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
248 } |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
249 fn matches_everything(&self) -> bool { |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
250 false |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
251 } |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
252 fn is_exact(&self) -> bool { |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
253 true |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
254 } |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
255 } |
44519
52d40f8fb82d
rust-matchers: add function to generate a regex matcher function
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44353
diff
changeset
|
256 |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
257 /// Matches files that are included in the ignore rules. |
44870
9f96beb9bafe
rust: remove support for `re2`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44852
diff
changeset
|
258 /// ``` |
9f96beb9bafe
rust: remove support for `re2`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44852
diff
changeset
|
259 /// use hg::{ |
9f96beb9bafe
rust: remove support for `re2`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44852
diff
changeset
|
260 /// matchers::{IncludeMatcher, Matcher}, |
9f96beb9bafe
rust: remove support for `re2`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44852
diff
changeset
|
261 /// IgnorePattern, |
9f96beb9bafe
rust: remove support for `re2`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44852
diff
changeset
|
262 /// PatternSyntax, |
9f96beb9bafe
rust: remove support for `re2`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44852
diff
changeset
|
263 /// utils::hg_path::HgPath |
9f96beb9bafe
rust: remove support for `re2`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44852
diff
changeset
|
264 /// }; |
9f96beb9bafe
rust: remove support for `re2`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44852
diff
changeset
|
265 /// use std::path::Path; |
9f96beb9bafe
rust: remove support for `re2`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44852
diff
changeset
|
266 /// /// |
9f96beb9bafe
rust: remove support for `re2`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44852
diff
changeset
|
267 /// let ignore_patterns = |
9f96beb9bafe
rust: remove support for `re2`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44852
diff
changeset
|
268 /// vec![IgnorePattern::new(PatternSyntax::RootGlob, b"this*", Path::new(""))]; |
47379
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
269 /// let matcher = IncludeMatcher::new(ignore_patterns).unwrap(); |
44870
9f96beb9bafe
rust: remove support for `re2`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44852
diff
changeset
|
270 /// /// |
9f96beb9bafe
rust: remove support for `re2`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44852
diff
changeset
|
271 /// assert_eq!(matcher.matches(HgPath::new(b"testing")), false); |
9f96beb9bafe
rust: remove support for `re2`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44852
diff
changeset
|
272 /// assert_eq!(matcher.matches(HgPath::new(b"this should work")), true); |
9f96beb9bafe
rust: remove support for `re2`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44852
diff
changeset
|
273 /// assert_eq!(matcher.matches(HgPath::new(b"this also")), true); |
9f96beb9bafe
rust: remove support for `re2`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44852
diff
changeset
|
274 /// assert_eq!(matcher.matches(HgPath::new(b"but not this")), false); |
9f96beb9bafe
rust: remove support for `re2`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44852
diff
changeset
|
275 /// ``` |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
276 pub struct IncludeMatcher<'a> { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
277 patterns: Vec<u8>, |
48354
2009e3c64a53
rhg: refactor to use IgnoreFnType alias more widely
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48311
diff
changeset
|
278 match_fn: IgnoreFnType<'a>, |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
279 /// Whether all the patterns match a prefix (i.e. recursively) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
280 prefix: bool, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
281 roots: HashSet<HgPathBuf>, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
282 dirs: HashSet<HgPathBuf>, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
283 parents: HashSet<HgPathBuf>, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
284 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
285 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
286 impl<'a> Matcher for IncludeMatcher<'a> { |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
287 fn file_set(&self) -> Option<&HashSet<HgPathBuf>> { |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
288 None |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
289 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
290 |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44973
diff
changeset
|
291 fn exact_match(&self, _filename: &HgPath) -> bool { |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
292 false |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
293 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
294 |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44973
diff
changeset
|
295 fn matches(&self, filename: &HgPath) -> bool { |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
296 (self.match_fn)(filename.as_ref()) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
297 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
298 |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44973
diff
changeset
|
299 fn visit_children_set(&self, directory: &HgPath) -> VisitChildrenSet { |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
300 let dir = directory.as_ref(); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
301 if self.prefix && self.roots.contains(dir) { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
302 return VisitChildrenSet::Recursive; |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
303 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
304 if self.roots.contains(HgPath::new(b"")) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
305 || self.roots.contains(dir) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
306 || self.dirs.contains(dir) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
307 || find_dirs(dir).any(|parent_dir| self.roots.contains(parent_dir)) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
308 { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
309 return VisitChildrenSet::This; |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
310 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
311 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
312 if self.parents.contains(directory.as_ref()) { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
313 let multiset = self.get_all_parents_children(); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
314 if let Some(children) = multiset.get(dir) { |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
315 return VisitChildrenSet::Set( |
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
316 children.into_iter().map(HgPathBuf::from).collect(), |
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
317 ); |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
318 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
319 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
320 VisitChildrenSet::Empty |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
321 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
322 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
323 fn matches_everything(&self) -> bool { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
324 false |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
325 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
326 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
327 fn is_exact(&self) -> bool { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
328 false |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
329 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
330 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
331 |
49347
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
332 /// The union of multiple matchers. Will match if any of the matchers match. |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
333 pub struct UnionMatcher { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
334 matchers: Vec<Box<dyn Matcher + Sync>>, |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
335 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
336 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
337 impl Matcher for UnionMatcher { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
338 fn file_set(&self) -> Option<&HashSet<HgPathBuf>> { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
339 None |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
340 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
341 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
342 fn exact_match(&self, _filename: &HgPath) -> bool { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
343 false |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
344 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
345 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
346 fn matches(&self, filename: &HgPath) -> bool { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
347 self.matchers.iter().any(|m| m.matches(filename)) |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
348 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
349 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
350 fn visit_children_set(&self, directory: &HgPath) -> VisitChildrenSet { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
351 let mut result = HashSet::new(); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
352 let mut this = false; |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
353 for matcher in self.matchers.iter() { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
354 let visit = matcher.visit_children_set(directory); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
355 match visit { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
356 VisitChildrenSet::Empty => continue, |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
357 VisitChildrenSet::This => { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
358 this = true; |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
359 // Don't break, we might have an 'all' in here. |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
360 continue; |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
361 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
362 VisitChildrenSet::Set(set) => { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
363 result.extend(set); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
364 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
365 VisitChildrenSet::Recursive => { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
366 return visit; |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
367 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
368 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
369 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
370 if this { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
371 return VisitChildrenSet::This; |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
372 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
373 if result.is_empty() { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
374 VisitChildrenSet::Empty |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
375 } else { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
376 VisitChildrenSet::Set(result) |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
377 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
378 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
379 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
380 fn matches_everything(&self) -> bool { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
381 // TODO Maybe if all are AlwaysMatcher? |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
382 false |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
383 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
384 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
385 fn is_exact(&self) -> bool { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
386 false |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
387 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
388 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
389 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
390 impl UnionMatcher { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
391 pub fn new(matchers: Vec<Box<dyn Matcher + Sync>>) -> Self { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
392 Self { matchers } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
393 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
394 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
395 |
49349
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
396 pub struct IntersectionMatcher { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
397 m1: Box<dyn Matcher + Sync>, |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
398 m2: Box<dyn Matcher + Sync>, |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
399 files: Option<HashSet<HgPathBuf>>, |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
400 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
401 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
402 impl Matcher for IntersectionMatcher { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
403 fn file_set(&self) -> Option<&HashSet<HgPathBuf>> { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
404 self.files.as_ref() |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
405 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
406 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
407 fn exact_match(&self, filename: &HgPath) -> bool { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
408 self.files.as_ref().map_or(false, |f| f.contains(filename)) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
409 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
410 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
411 fn matches(&self, filename: &HgPath) -> bool { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
412 self.m1.matches(filename) && self.m2.matches(filename) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
413 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
414 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
415 fn visit_children_set(&self, directory: &HgPath) -> VisitChildrenSet { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
416 let m1_set = self.m1.visit_children_set(directory); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
417 if m1_set == VisitChildrenSet::Empty { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
418 return VisitChildrenSet::Empty; |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
419 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
420 let m2_set = self.m2.visit_children_set(directory); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
421 if m2_set == VisitChildrenSet::Empty { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
422 return VisitChildrenSet::Empty; |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
423 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
424 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
425 if m1_set == VisitChildrenSet::Recursive { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
426 return m2_set; |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
427 } else if m2_set == VisitChildrenSet::Recursive { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
428 return m1_set; |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
429 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
430 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
431 match (&m1_set, &m2_set) { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
432 (VisitChildrenSet::Recursive, _) => m2_set, |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
433 (_, VisitChildrenSet::Recursive) => m1_set, |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
434 (VisitChildrenSet::This, _) | (_, VisitChildrenSet::This) => { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
435 VisitChildrenSet::This |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
436 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
437 (VisitChildrenSet::Set(m1), VisitChildrenSet::Set(m2)) => { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
438 let set: HashSet<_> = m1.intersection(&m2).cloned().collect(); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
439 if set.is_empty() { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
440 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
441 } else { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
442 VisitChildrenSet::Set(set) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
443 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
444 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
445 _ => unreachable!(), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
446 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
447 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
448 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
449 fn matches_everything(&self) -> bool { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
450 self.m1.matches_everything() && self.m2.matches_everything() |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
451 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
452 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
453 fn is_exact(&self) -> bool { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
454 self.m1.is_exact() || self.m2.is_exact() |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
455 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
456 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
457 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
458 impl IntersectionMatcher { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
459 pub fn new( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
460 mut m1: Box<dyn Matcher + Sync>, |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
461 mut m2: Box<dyn Matcher + Sync>, |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
462 ) -> Self { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
463 let files = if m1.is_exact() || m2.is_exact() { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
464 if !m1.is_exact() { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
465 std::mem::swap(&mut m1, &mut m2); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
466 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
467 m1.file_set().map(|m1_files| { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
468 m1_files.iter().cloned().filter(|f| m2.matches(f)).collect() |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
469 }) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
470 } else { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
471 None |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
472 }; |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
473 Self { m1, m2, files } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
474 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
475 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
476 |
44593
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
477 /// Returns a function that matches an `HgPath` against the given regex |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
478 /// pattern. |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
479 /// |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
480 /// This can fail when the pattern is invalid or not supported by the |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
481 /// underlying engine (the `regex` crate), for instance anything with |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
482 /// back-references. |
44784
83c97c0bd319
rust-matchers: add timing tracing to regex compilation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44597
diff
changeset
|
483 #[timed] |
44593
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
484 fn re_matcher( |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
485 pattern: &[u8], |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
486 ) -> PatternResult<impl Fn(&HgPath) -> bool + Sync> { |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
487 use std::io::Write; |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
488 |
44832
ad1ec40975aa
rust-regex: fix issues with regex anchoring and performance
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44803
diff
changeset
|
489 // The `regex` crate adds `.*` to the start and end of expressions if there |
ad1ec40975aa
rust-regex: fix issues with regex anchoring and performance
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44803
diff
changeset
|
490 // are no anchors, so add the start anchor. |
ad1ec40975aa
rust-regex: fix issues with regex anchoring and performance
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44803
diff
changeset
|
491 let mut escaped_bytes = vec![b'^', b'(', b'?', b':']; |
44593
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
492 for byte in pattern { |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
493 if *byte > 127 { |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
494 write!(escaped_bytes, "\\x{:x}", *byte).unwrap(); |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
495 } else { |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
496 escaped_bytes.push(*byte); |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
497 } |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
498 } |
44832
ad1ec40975aa
rust-regex: fix issues with regex anchoring and performance
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44803
diff
changeset
|
499 escaped_bytes.push(b')'); |
44593
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
500 |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
501 // Avoid the cost of UTF8 checking |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
502 // |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
503 // # Safety |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
504 // This is safe because we escaped all non-ASCII bytes. |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
505 let pattern_string = unsafe { String::from_utf8_unchecked(escaped_bytes) }; |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
506 let re = regex::bytes::RegexBuilder::new(&pattern_string) |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
507 .unicode(false) |
44779
b15a37d85dbe
rust-regex: increase the DFA size limit for the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44597
diff
changeset
|
508 // Big repos with big `.hgignore` will hit the default limit and |
b15a37d85dbe
rust-regex: increase the DFA size limit for the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44597
diff
changeset
|
509 // incur a significant performance hit. One repo's `hg status` hit |
b15a37d85dbe
rust-regex: increase the DFA size limit for the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44597
diff
changeset
|
510 // multiple *minutes*. |
b15a37d85dbe
rust-regex: increase the DFA size limit for the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44597
diff
changeset
|
511 .dfa_size_limit(50 * (1 << 20)) |
44593
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
512 .build() |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
513 .map_err(|e| PatternError::UnsupportedSyntax(e.to_string()))?; |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
514 |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
515 Ok(move |path: &HgPath| re.is_match(path.as_bytes())) |
44519
52d40f8fb82d
rust-matchers: add function to generate a regex matcher function
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44353
diff
changeset
|
516 } |
52d40f8fb82d
rust-matchers: add function to generate a regex matcher function
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44353
diff
changeset
|
517 |
44521
a21881b40942
rust-matchers: add `build_regex_match` function
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44520
diff
changeset
|
518 /// Returns the regex pattern and a function that matches an `HgPath` against |
a21881b40942
rust-matchers: add `build_regex_match` function
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44520
diff
changeset
|
519 /// said regex formed by the given ignore patterns. |
48354
2009e3c64a53
rhg: refactor to use IgnoreFnType alias more widely
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48311
diff
changeset
|
520 fn build_regex_match<'a, 'b>( |
2009e3c64a53
rhg: refactor to use IgnoreFnType alias more widely
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48311
diff
changeset
|
521 ignore_patterns: &'a [IgnorePattern], |
2009e3c64a53
rhg: refactor to use IgnoreFnType alias more widely
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48311
diff
changeset
|
522 ) -> PatternResult<(Vec<u8>, IgnoreFnType<'b>)> { |
44802
e0414fcd35e0
rust-filepatterns: match exact `rootglob`s with a `HashSet`, not in the regex
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44784
diff
changeset
|
523 let mut regexps = vec![]; |
e0414fcd35e0
rust-filepatterns: match exact `rootglob`s with a `HashSet`, not in the regex
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44784
diff
changeset
|
524 let mut exact_set = HashSet::new(); |
e0414fcd35e0
rust-filepatterns: match exact `rootglob`s with a `HashSet`, not in the regex
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44784
diff
changeset
|
525 |
e0414fcd35e0
rust-filepatterns: match exact `rootglob`s with a `HashSet`, not in the regex
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44784
diff
changeset
|
526 for pattern in ignore_patterns { |
e0414fcd35e0
rust-filepatterns: match exact `rootglob`s with a `HashSet`, not in the regex
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44784
diff
changeset
|
527 if let Some(re) = build_single_regex(pattern)? { |
e0414fcd35e0
rust-filepatterns: match exact `rootglob`s with a `HashSet`, not in the regex
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44784
diff
changeset
|
528 regexps.push(re); |
e0414fcd35e0
rust-filepatterns: match exact `rootglob`s with a `HashSet`, not in the regex
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44784
diff
changeset
|
529 } else { |
e0414fcd35e0
rust-filepatterns: match exact `rootglob`s with a `HashSet`, not in the regex
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44784
diff
changeset
|
530 let exact = normalize_path_bytes(&pattern.pattern); |
e0414fcd35e0
rust-filepatterns: match exact `rootglob`s with a `HashSet`, not in the regex
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44784
diff
changeset
|
531 exact_set.insert(HgPathBuf::from_bytes(&exact)); |
e0414fcd35e0
rust-filepatterns: match exact `rootglob`s with a `HashSet`, not in the regex
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44784
diff
changeset
|
532 } |
e0414fcd35e0
rust-filepatterns: match exact `rootglob`s with a `HashSet`, not in the regex
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44784
diff
changeset
|
533 } |
e0414fcd35e0
rust-filepatterns: match exact `rootglob`s with a `HashSet`, not in the regex
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44784
diff
changeset
|
534 |
44521
a21881b40942
rust-matchers: add `build_regex_match` function
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44520
diff
changeset
|
535 let full_regex = regexps.join(&b'|'); |
a21881b40942
rust-matchers: add `build_regex_match` function
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44520
diff
changeset
|
536 |
44802
e0414fcd35e0
rust-filepatterns: match exact `rootglob`s with a `HashSet`, not in the regex
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44784
diff
changeset
|
537 // An empty pattern would cause the regex engine to incorrectly match the |
e0414fcd35e0
rust-filepatterns: match exact `rootglob`s with a `HashSet`, not in the regex
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44784
diff
changeset
|
538 // (empty) root directory |
e0414fcd35e0
rust-filepatterns: match exact `rootglob`s with a `HashSet`, not in the regex
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44784
diff
changeset
|
539 let func = if !(regexps.is_empty()) { |
e0414fcd35e0
rust-filepatterns: match exact `rootglob`s with a `HashSet`, not in the regex
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44784
diff
changeset
|
540 let matcher = re_matcher(&full_regex)?; |
e0414fcd35e0
rust-filepatterns: match exact `rootglob`s with a `HashSet`, not in the regex
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44784
diff
changeset
|
541 let func = move |filename: &HgPath| { |
e0414fcd35e0
rust-filepatterns: match exact `rootglob`s with a `HashSet`, not in the regex
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44784
diff
changeset
|
542 exact_set.contains(filename) || matcher(filename) |
e0414fcd35e0
rust-filepatterns: match exact `rootglob`s with a `HashSet`, not in the regex
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44784
diff
changeset
|
543 }; |
48354
2009e3c64a53
rhg: refactor to use IgnoreFnType alias more widely
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48311
diff
changeset
|
544 Box::new(func) as IgnoreFnType |
44802
e0414fcd35e0
rust-filepatterns: match exact `rootglob`s with a `HashSet`, not in the regex
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44784
diff
changeset
|
545 } else { |
e0414fcd35e0
rust-filepatterns: match exact `rootglob`s with a `HashSet`, not in the regex
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44784
diff
changeset
|
546 let func = move |filename: &HgPath| exact_set.contains(filename); |
48354
2009e3c64a53
rhg: refactor to use IgnoreFnType alias more widely
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48311
diff
changeset
|
547 Box::new(func) as IgnoreFnType |
44802
e0414fcd35e0
rust-filepatterns: match exact `rootglob`s with a `HashSet`, not in the regex
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44784
diff
changeset
|
548 }; |
44521
a21881b40942
rust-matchers: add `build_regex_match` function
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44520
diff
changeset
|
549 |
a21881b40942
rust-matchers: add `build_regex_match` function
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44520
diff
changeset
|
550 Ok((full_regex, func)) |
a21881b40942
rust-matchers: add `build_regex_match` function
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44520
diff
changeset
|
551 } |
a21881b40942
rust-matchers: add `build_regex_match` function
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44520
diff
changeset
|
552 |
44520
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
553 /// Returns roots and directories corresponding to each pattern. |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
554 /// |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
555 /// This calculates the roots and directories exactly matching the patterns and |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
556 /// returns a tuple of (roots, dirs). It does not return other directories |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
557 /// which may also need to be considered, like the parent directories. |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
558 fn roots_and_dirs( |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
559 ignore_patterns: &[IgnorePattern], |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
560 ) -> (Vec<HgPathBuf>, Vec<HgPathBuf>) { |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
561 let mut roots = Vec::new(); |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
562 let mut dirs = Vec::new(); |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
563 |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
564 for ignore_pattern in ignore_patterns { |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
565 let IgnorePattern { |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
566 syntax, pattern, .. |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
567 } = ignore_pattern; |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
568 match syntax { |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
569 PatternSyntax::RootGlob | PatternSyntax::Glob => { |
48311
6d69e83e6b6e
rhg: more efficient `HgPath::join`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
47409
diff
changeset
|
570 let mut root = HgPathBuf::new(); |
44520
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
571 for p in pattern.split(|c| *c == b'/') { |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
572 if p.iter().any(|c| match *c { |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
573 b'[' | b'{' | b'*' | b'?' => true, |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
574 _ => false, |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
575 }) { |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
576 break; |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
577 } |
48311
6d69e83e6b6e
rhg: more efficient `HgPath::join`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
47409
diff
changeset
|
578 root.push(HgPathBuf::from_bytes(p).as_ref()); |
44520
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
579 } |
48311
6d69e83e6b6e
rhg: more efficient `HgPath::join`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
47409
diff
changeset
|
580 roots.push(root); |
44520
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
581 } |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
582 PatternSyntax::Path | PatternSyntax::RelPath => { |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
583 let pat = HgPath::new(if pattern == b"." { |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
584 &[] as &[u8] |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
585 } else { |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
586 pattern |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
587 }); |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
588 roots.push(pat.to_owned()); |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
589 } |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
590 PatternSyntax::RootFiles => { |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
591 let pat = if pattern == b"." { |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
592 &[] as &[u8] |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
593 } else { |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
594 pattern |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
595 }; |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
596 dirs.push(HgPathBuf::from_bytes(pat)); |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
597 } |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
598 _ => { |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
599 roots.push(HgPathBuf::new()); |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
600 } |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
601 } |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
602 } |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
603 (roots, dirs) |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
604 } |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
605 |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
606 /// Paths extracted from patterns |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
607 #[derive(Debug, PartialEq)] |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
608 struct RootsDirsAndParents { |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
609 /// Directories to match recursively |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
610 pub roots: HashSet<HgPathBuf>, |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
611 /// Directories to match non-recursively |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
612 pub dirs: HashSet<HgPathBuf>, |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
613 /// Implicitly required directories to go to items in either roots or dirs |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
614 pub parents: HashSet<HgPathBuf>, |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
615 } |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
616 |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
617 /// Extract roots, dirs and parents from patterns. |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
618 fn roots_dirs_and_parents( |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
619 ignore_patterns: &[IgnorePattern], |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
620 ) -> PatternResult<RootsDirsAndParents> { |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
621 let (roots, dirs) = roots_and_dirs(ignore_patterns); |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
622 |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
623 let mut parents = HashSet::new(); |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
624 |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
625 parents.extend( |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
626 DirsMultiset::from_manifest(&dirs) |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
627 .map_err(|e| match e { |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
628 DirstateMapError::InvalidPath(e) => e, |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
629 _ => unreachable!(), |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
630 })? |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
631 .iter() |
44973
26114bd6ec60
rust: do a clippy pass
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44870
diff
changeset
|
632 .map(ToOwned::to_owned), |
44520
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
633 ); |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
634 parents.extend( |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
635 DirsMultiset::from_manifest(&roots) |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
636 .map_err(|e| match e { |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
637 DirstateMapError::InvalidPath(e) => e, |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
638 _ => unreachable!(), |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
639 })? |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
640 .iter() |
44973
26114bd6ec60
rust: do a clippy pass
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44870
diff
changeset
|
641 .map(ToOwned::to_owned), |
44520
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
642 ); |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
643 |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
644 Ok(RootsDirsAndParents { |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
645 roots: HashSet::from_iter(roots), |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
646 dirs: HashSet::from_iter(dirs), |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
647 parents, |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
648 }) |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
649 } |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
650 |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
651 /// Returns a function that checks whether a given file (in the general sense) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
652 /// should be matched. |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
653 fn build_match<'a, 'b>( |
47379
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
654 ignore_patterns: Vec<IgnorePattern>, |
48354
2009e3c64a53
rhg: refactor to use IgnoreFnType alias more widely
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48311
diff
changeset
|
655 ) -> PatternResult<(Vec<u8>, IgnoreFnType<'b>)> { |
2009e3c64a53
rhg: refactor to use IgnoreFnType alias more widely
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48311
diff
changeset
|
656 let mut match_funcs: Vec<IgnoreFnType<'b>> = vec![]; |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
657 // For debugging and printing |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
658 let mut patterns = vec![]; |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
659 |
47379
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
660 let (subincludes, ignore_patterns) = filter_subincludes(ignore_patterns)?; |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
661 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
662 if !subincludes.is_empty() { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
663 // Build prefix-based matcher functions for subincludes |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
664 let mut submatchers = FastHashMap::default(); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
665 let mut prefixes = vec![]; |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
666 |
47379
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
667 for sub_include in subincludes { |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
668 let matcher = IncludeMatcher::new(sub_include.included_patterns)?; |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
669 let match_fn = |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
670 Box::new(move |path: &HgPath| matcher.matches(path)); |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
671 prefixes.push(sub_include.prefix.clone()); |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
672 submatchers.insert(sub_include.prefix.clone(), match_fn); |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
673 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
674 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
675 let match_subinclude = move |filename: &HgPath| { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
676 for prefix in prefixes.iter() { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
677 if let Some(rel) = filename.relative_to(prefix) { |
44973
26114bd6ec60
rust: do a clippy pass
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44870
diff
changeset
|
678 if (submatchers[prefix])(rel) { |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
679 return true; |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
680 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
681 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
682 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
683 false |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
684 }; |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
685 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
686 match_funcs.push(Box::new(match_subinclude)); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
687 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
688 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
689 if !ignore_patterns.is_empty() { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
690 // Either do dumb matching if all patterns are rootfiles, or match |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
691 // with a regex. |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
692 if ignore_patterns |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
693 .iter() |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
694 .all(|k| k.syntax == PatternSyntax::RootFiles) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
695 { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
696 let dirs: HashSet<_> = ignore_patterns |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
697 .iter() |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
698 .map(|k| k.pattern.to_owned()) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
699 .collect(); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
700 let mut dirs_vec: Vec<_> = dirs.iter().cloned().collect(); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
701 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
702 let match_func = move |path: &HgPath| -> bool { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
703 let path = path.as_bytes(); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
704 let i = path.iter().rfind(|a| **a == b'/'); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
705 let dir = if let Some(i) = i { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
706 &path[..*i as usize] |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
707 } else { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
708 b"." |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
709 }; |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
710 dirs.contains(dir.deref()) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
711 }; |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
712 match_funcs.push(Box::new(match_func)); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
713 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
714 patterns.extend(b"rootfilesin: "); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
715 dirs_vec.sort(); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
716 patterns.extend(dirs_vec.escaped_bytes()); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
717 } else { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
718 let (new_re, match_func) = build_regex_match(&ignore_patterns)?; |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
719 patterns = new_re; |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
720 match_funcs.push(match_func) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
721 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
722 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
723 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
724 Ok(if match_funcs.len() == 1 { |
47379
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
725 (patterns, match_funcs.remove(0)) |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
726 } else { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
727 ( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
728 patterns, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
729 Box::new(move |f: &HgPath| -> bool { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
730 match_funcs.iter().any(|match_func| match_func(f)) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
731 }), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
732 ) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
733 }) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
734 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
735 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
736 /// Parses all "ignore" files with their recursive includes and returns a |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
737 /// function that checks whether a given file (in the general sense) should be |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
738 /// ignored. |
48355
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
739 pub fn get_ignore_matcher<'a>( |
47409
0ef8231e413f
dirstate-v2: Store a hash of ignore patterns (.hgignore)
Simon Sapin <simon.sapin@octobus.net>
parents:
47379
diff
changeset
|
740 mut all_pattern_files: Vec<PathBuf>, |
47378
777c3d231913
rust: Make some file path parameters less generic
Simon Sapin <simon.sapin@octobus.net>
parents:
45607
diff
changeset
|
741 root_dir: &Path, |
47409
0ef8231e413f
dirstate-v2: Store a hash of ignore patterns (.hgignore)
Simon Sapin <simon.sapin@octobus.net>
parents:
47379
diff
changeset
|
742 inspect_pattern_bytes: &mut impl FnMut(&[u8]), |
48355
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
743 ) -> PatternResult<(IncludeMatcher<'a>, Vec<PatternFileWarning>)> { |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
744 let mut all_patterns = vec![]; |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
745 let mut all_warnings = vec![]; |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
746 |
47409
0ef8231e413f
dirstate-v2: Store a hash of ignore patterns (.hgignore)
Simon Sapin <simon.sapin@octobus.net>
parents:
47379
diff
changeset
|
747 // Sort to make the ordering of calls to `inspect_pattern_bytes` |
0ef8231e413f
dirstate-v2: Store a hash of ignore patterns (.hgignore)
Simon Sapin <simon.sapin@octobus.net>
parents:
47379
diff
changeset
|
748 // deterministic even if the ordering of `all_pattern_files` is not (such |
0ef8231e413f
dirstate-v2: Store a hash of ignore patterns (.hgignore)
Simon Sapin <simon.sapin@octobus.net>
parents:
47379
diff
changeset
|
749 // as when a iteration order of a Python dict or Rust HashMap is involved). |
0ef8231e413f
dirstate-v2: Store a hash of ignore patterns (.hgignore)
Simon Sapin <simon.sapin@octobus.net>
parents:
47379
diff
changeset
|
750 // Sort by "string" representation instead of the default by component |
0ef8231e413f
dirstate-v2: Store a hash of ignore patterns (.hgignore)
Simon Sapin <simon.sapin@octobus.net>
parents:
47379
diff
changeset
|
751 // (with a Rust-specific definition of a component) |
0ef8231e413f
dirstate-v2: Store a hash of ignore patterns (.hgignore)
Simon Sapin <simon.sapin@octobus.net>
parents:
47379
diff
changeset
|
752 all_pattern_files |
0ef8231e413f
dirstate-v2: Store a hash of ignore patterns (.hgignore)
Simon Sapin <simon.sapin@octobus.net>
parents:
47379
diff
changeset
|
753 .sort_unstable_by(|a, b| a.as_os_str().cmp(b.as_os_str())); |
0ef8231e413f
dirstate-v2: Store a hash of ignore patterns (.hgignore)
Simon Sapin <simon.sapin@octobus.net>
parents:
47379
diff
changeset
|
754 |
47378
777c3d231913
rust: Make some file path parameters less generic
Simon Sapin <simon.sapin@octobus.net>
parents:
45607
diff
changeset
|
755 for pattern_file in &all_pattern_files { |
47409
0ef8231e413f
dirstate-v2: Store a hash of ignore patterns (.hgignore)
Simon Sapin <simon.sapin@octobus.net>
parents:
47379
diff
changeset
|
756 let (patterns, warnings) = get_patterns_from_file( |
0ef8231e413f
dirstate-v2: Store a hash of ignore patterns (.hgignore)
Simon Sapin <simon.sapin@octobus.net>
parents:
47379
diff
changeset
|
757 pattern_file, |
0ef8231e413f
dirstate-v2: Store a hash of ignore patterns (.hgignore)
Simon Sapin <simon.sapin@octobus.net>
parents:
47379
diff
changeset
|
758 root_dir, |
0ef8231e413f
dirstate-v2: Store a hash of ignore patterns (.hgignore)
Simon Sapin <simon.sapin@octobus.net>
parents:
47379
diff
changeset
|
759 inspect_pattern_bytes, |
0ef8231e413f
dirstate-v2: Store a hash of ignore patterns (.hgignore)
Simon Sapin <simon.sapin@octobus.net>
parents:
47379
diff
changeset
|
760 )?; |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
761 |
44597
e62052d0f377
rust-status: only involve ignore mechanism when needed
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44593
diff
changeset
|
762 all_patterns.extend(patterns.to_owned()); |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
763 all_warnings.extend(warnings); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
764 } |
47379
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
765 let matcher = IncludeMatcher::new(all_patterns)?; |
48355
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
766 Ok((matcher, all_warnings)) |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
767 } |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
768 |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
769 /// Parses all "ignore" files with their recursive includes and returns a |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
770 /// function that checks whether a given file (in the general sense) should be |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
771 /// ignored. |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
772 pub fn get_ignore_function<'a>( |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
773 all_pattern_files: Vec<PathBuf>, |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
774 root_dir: &Path, |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
775 inspect_pattern_bytes: &mut impl FnMut(&[u8]), |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
776 ) -> PatternResult<(IgnoreFnType<'a>, Vec<PatternFileWarning>)> { |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
777 let res = |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
778 get_ignore_matcher(all_pattern_files, root_dir, inspect_pattern_bytes); |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
779 res.map(|(matcher, all_warnings)| { |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
780 let res: IgnoreFnType<'a> = |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
781 Box::new(move |path: &HgPath| matcher.matches(path)); |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
782 |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
783 (res, all_warnings) |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
784 }) |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
785 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
786 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
787 impl<'a> IncludeMatcher<'a> { |
47379
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
788 pub fn new(ignore_patterns: Vec<IgnorePattern>) -> PatternResult<Self> { |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
789 let RootsDirsAndParents { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
790 roots, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
791 dirs, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
792 parents, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
793 } = roots_dirs_and_parents(&ignore_patterns)?; |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
794 let prefix = ignore_patterns.iter().any(|k| match k.syntax { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
795 PatternSyntax::Path | PatternSyntax::RelPath => true, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
796 _ => false, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
797 }); |
47379
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
798 let (patterns, match_fn) = build_match(ignore_patterns)?; |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
799 |
47379
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
800 Ok(Self { |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
801 patterns, |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
802 match_fn, |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
803 prefix, |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
804 roots, |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
805 dirs, |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
806 parents, |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
807 }) |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
808 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
809 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
810 fn get_all_parents_children(&self) -> DirsChildrenMultiset { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
811 // TODO cache |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
812 let thing = self |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
813 .dirs |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
814 .iter() |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
815 .chain(self.roots.iter()) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
816 .chain(self.parents.iter()); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
817 DirsChildrenMultiset::new(thing, Some(&self.parents)) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
818 } |
48355
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
819 |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
820 pub fn debug_get_patterns(&self) -> &[u8] { |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
821 self.patterns.as_ref() |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
822 } |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
823 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
824 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
825 impl<'a> Display for IncludeMatcher<'a> { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
826 fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error> { |
44803
de0fb4463a3d
rust-matchers: add TODO about incomplete `Display` for `IncludeMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44802
diff
changeset
|
827 // XXX What about exact matches? |
de0fb4463a3d
rust-matchers: add TODO about incomplete `Display` for `IncludeMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44802
diff
changeset
|
828 // I'm not sure it's worth it to clone the HashSet and keep it |
de0fb4463a3d
rust-matchers: add TODO about incomplete `Display` for `IncludeMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44802
diff
changeset
|
829 // around just in case someone wants to display the matcher, plus |
de0fb4463a3d
rust-matchers: add TODO about incomplete `Display` for `IncludeMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44802
diff
changeset
|
830 // it's going to be unreadable after a few entries, but we need to |
de0fb4463a3d
rust-matchers: add TODO about incomplete `Display` for `IncludeMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44802
diff
changeset
|
831 // inform in this display that exact matches are being used and are |
de0fb4463a3d
rust-matchers: add TODO about incomplete `Display` for `IncludeMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44802
diff
changeset
|
832 // (on purpose) missing from the `includes`. |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
833 write!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
834 f, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
835 "IncludeMatcher(includes='{}')", |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
836 String::from_utf8_lossy(&self.patterns.escaped_bytes()) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
837 ) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
838 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
839 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
840 |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
841 #[cfg(test)] |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
842 mod tests { |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
843 use super::*; |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
844 use pretty_assertions::assert_eq; |
44520
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
845 use std::path::Path; |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
846 |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
847 #[test] |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
848 fn test_roots_and_dirs() { |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
849 let pats = vec![ |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
850 IgnorePattern::new(PatternSyntax::Glob, b"g/h/*", Path::new("")), |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
851 IgnorePattern::new(PatternSyntax::Glob, b"g/h", Path::new("")), |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
852 IgnorePattern::new(PatternSyntax::Glob, b"g*", Path::new("")), |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
853 ]; |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
854 let (roots, dirs) = roots_and_dirs(&pats); |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
855 |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
856 assert_eq!( |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
857 roots, |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
858 vec!( |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
859 HgPathBuf::from_bytes(b"g/h"), |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
860 HgPathBuf::from_bytes(b"g/h"), |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
861 HgPathBuf::new() |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
862 ), |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
863 ); |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
864 assert_eq!(dirs, vec!()); |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
865 } |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
866 |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
867 #[test] |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
868 fn test_roots_dirs_and_parents() { |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
869 let pats = vec![ |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
870 IgnorePattern::new(PatternSyntax::Glob, b"g/h/*", Path::new("")), |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
871 IgnorePattern::new(PatternSyntax::Glob, b"g/h", Path::new("")), |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
872 IgnorePattern::new(PatternSyntax::Glob, b"g*", Path::new("")), |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
873 ]; |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
874 |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
875 let mut roots = HashSet::new(); |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
876 roots.insert(HgPathBuf::from_bytes(b"g/h")); |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
877 roots.insert(HgPathBuf::new()); |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
878 |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
879 let dirs = HashSet::new(); |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
880 |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
881 let mut parents = HashSet::new(); |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
882 parents.insert(HgPathBuf::new()); |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
883 parents.insert(HgPathBuf::from_bytes(b"g")); |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
884 |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
885 assert_eq!( |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
886 roots_dirs_and_parents(&pats).unwrap(), |
44524
483fce658e43
rust-status: refactor options into a `StatusOptions` struct
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44522
diff
changeset
|
887 RootsDirsAndParents { |
483fce658e43
rust-status: refactor options into a `StatusOptions` struct
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44522
diff
changeset
|
888 roots, |
483fce658e43
rust-status: refactor options into a `StatusOptions` struct
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44522
diff
changeset
|
889 dirs, |
483fce658e43
rust-status: refactor options into a `StatusOptions` struct
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44522
diff
changeset
|
890 parents |
483fce658e43
rust-status: refactor options into a `StatusOptions` struct
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44522
diff
changeset
|
891 } |
44520
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
892 ); |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
893 } |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
894 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
895 #[test] |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
896 fn test_filematcher_visit_children_set() { |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
897 // Visitchildrenset |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44973
diff
changeset
|
898 let files = vec![HgPathBuf::from_bytes(b"dir/subdir/foo.txt")]; |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
899 let matcher = FileMatcher::new(files).unwrap(); |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
900 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
901 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
902 set.insert(HgPathBuf::from_bytes(b"dir")); |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
903 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
904 matcher.visit_children_set(HgPath::new(b"")), |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
905 VisitChildrenSet::Set(set) |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
906 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
907 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
908 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
909 set.insert(HgPathBuf::from_bytes(b"subdir")); |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
910 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
911 matcher.visit_children_set(HgPath::new(b"dir")), |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
912 VisitChildrenSet::Set(set) |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
913 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
914 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
915 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
916 set.insert(HgPathBuf::from_bytes(b"foo.txt")); |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
917 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
918 matcher.visit_children_set(HgPath::new(b"dir/subdir")), |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
919 VisitChildrenSet::Set(set) |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
920 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
921 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
922 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
923 matcher.visit_children_set(HgPath::new(b"dir/subdir/x")), |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
924 VisitChildrenSet::Empty |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
925 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
926 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
927 matcher.visit_children_set(HgPath::new(b"dir/subdir/foo.txt")), |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
928 VisitChildrenSet::Empty |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
929 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
930 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
931 matcher.visit_children_set(HgPath::new(b"folder")), |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
932 VisitChildrenSet::Empty |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
933 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
934 } |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
935 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
936 #[test] |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
937 fn test_filematcher_visit_children_set_files_and_dirs() { |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
938 let files = vec![ |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44973
diff
changeset
|
939 HgPathBuf::from_bytes(b"rootfile.txt"), |
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44973
diff
changeset
|
940 HgPathBuf::from_bytes(b"a/file1.txt"), |
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44973
diff
changeset
|
941 HgPathBuf::from_bytes(b"a/b/file2.txt"), |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
942 // No file in a/b/c |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44973
diff
changeset
|
943 HgPathBuf::from_bytes(b"a/b/c/d/file4.txt"), |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
944 ]; |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
945 let matcher = FileMatcher::new(files).unwrap(); |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
946 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
947 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
948 set.insert(HgPathBuf::from_bytes(b"a")); |
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
949 set.insert(HgPathBuf::from_bytes(b"rootfile.txt")); |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
950 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
951 matcher.visit_children_set(HgPath::new(b"")), |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
952 VisitChildrenSet::Set(set) |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
953 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
954 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
955 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
956 set.insert(HgPathBuf::from_bytes(b"b")); |
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
957 set.insert(HgPathBuf::from_bytes(b"file1.txt")); |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
958 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
959 matcher.visit_children_set(HgPath::new(b"a")), |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
960 VisitChildrenSet::Set(set) |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
961 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
962 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
963 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
964 set.insert(HgPathBuf::from_bytes(b"c")); |
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
965 set.insert(HgPathBuf::from_bytes(b"file2.txt")); |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
966 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
967 matcher.visit_children_set(HgPath::new(b"a/b")), |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
968 VisitChildrenSet::Set(set) |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
969 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
970 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
971 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
972 set.insert(HgPathBuf::from_bytes(b"d")); |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
973 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
974 matcher.visit_children_set(HgPath::new(b"a/b/c")), |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
975 VisitChildrenSet::Set(set) |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
976 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
977 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
978 set.insert(HgPathBuf::from_bytes(b"file4.txt")); |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
979 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
980 matcher.visit_children_set(HgPath::new(b"a/b/c/d")), |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
981 VisitChildrenSet::Set(set) |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
982 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
983 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
984 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
985 matcher.visit_children_set(HgPath::new(b"a/b/c/d/e")), |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
986 VisitChildrenSet::Empty |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
987 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
988 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
989 matcher.visit_children_set(HgPath::new(b"folder")), |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
990 VisitChildrenSet::Empty |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
991 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
992 } |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
993 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
994 #[test] |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
995 fn test_includematcher() { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
996 // VisitchildrensetPrefix |
47379
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
997 let matcher = IncludeMatcher::new(vec![IgnorePattern::new( |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
998 PatternSyntax::RelPath, |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
999 b"dir/subdir", |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1000 Path::new(""), |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1001 )]) |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1002 .unwrap(); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1003 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1004 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
1005 set.insert(HgPathBuf::from_bytes(b"dir")); |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1006 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1007 matcher.visit_children_set(HgPath::new(b"")), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1008 VisitChildrenSet::Set(set) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1009 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1010 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1011 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
1012 set.insert(HgPathBuf::from_bytes(b"subdir")); |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1013 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1014 matcher.visit_children_set(HgPath::new(b"dir")), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1015 VisitChildrenSet::Set(set) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1016 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1017 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1018 matcher.visit_children_set(HgPath::new(b"dir/subdir")), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1019 VisitChildrenSet::Recursive |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1020 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1021 // OPT: This should probably be 'all' if its parent is? |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1022 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1023 matcher.visit_children_set(HgPath::new(b"dir/subdir/x")), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1024 VisitChildrenSet::This |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1025 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1026 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1027 matcher.visit_children_set(HgPath::new(b"folder")), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1028 VisitChildrenSet::Empty |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1029 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1030 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1031 // VisitchildrensetRootfilesin |
47379
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1032 let matcher = IncludeMatcher::new(vec![IgnorePattern::new( |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1033 PatternSyntax::RootFiles, |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1034 b"dir/subdir", |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1035 Path::new(""), |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1036 )]) |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1037 .unwrap(); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1038 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1039 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
1040 set.insert(HgPathBuf::from_bytes(b"dir")); |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1041 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1042 matcher.visit_children_set(HgPath::new(b"")), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1043 VisitChildrenSet::Set(set) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1044 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1045 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1046 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
1047 set.insert(HgPathBuf::from_bytes(b"subdir")); |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1048 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1049 matcher.visit_children_set(HgPath::new(b"dir")), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1050 VisitChildrenSet::Set(set) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1051 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1052 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1053 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1054 matcher.visit_children_set(HgPath::new(b"dir/subdir")), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1055 VisitChildrenSet::This |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1056 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1057 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1058 matcher.visit_children_set(HgPath::new(b"dir/subdir/x")), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1059 VisitChildrenSet::Empty |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1060 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1061 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1062 matcher.visit_children_set(HgPath::new(b"folder")), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1063 VisitChildrenSet::Empty |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1064 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1065 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1066 // VisitchildrensetGlob |
47379
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1067 let matcher = IncludeMatcher::new(vec![IgnorePattern::new( |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1068 PatternSyntax::Glob, |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1069 b"dir/z*", |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1070 Path::new(""), |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1071 )]) |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1072 .unwrap(); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1073 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1074 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
1075 set.insert(HgPathBuf::from_bytes(b"dir")); |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1076 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1077 matcher.visit_children_set(HgPath::new(b"")), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1078 VisitChildrenSet::Set(set) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1079 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1080 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1081 matcher.visit_children_set(HgPath::new(b"folder")), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1082 VisitChildrenSet::Empty |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1083 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1084 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1085 matcher.visit_children_set(HgPath::new(b"dir")), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1086 VisitChildrenSet::This |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1087 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1088 // OPT: these should probably be set(). |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1089 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1090 matcher.visit_children_set(HgPath::new(b"dir/subdir")), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1091 VisitChildrenSet::This |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1092 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1093 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1094 matcher.visit_children_set(HgPath::new(b"dir/subdir/x")), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1095 VisitChildrenSet::This |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1096 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1097 } |
49347
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1098 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1099 #[test] |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1100 fn test_unionmatcher() { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1101 // Path + Rootfiles |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1102 let m1 = IncludeMatcher::new(vec![IgnorePattern::new( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1103 PatternSyntax::RelPath, |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1104 b"dir/subdir", |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1105 Path::new(""), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1106 )]) |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1107 .unwrap(); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1108 let m2 = IncludeMatcher::new(vec![IgnorePattern::new( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1109 PatternSyntax::RootFiles, |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1110 b"dir", |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1111 Path::new(""), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1112 )]) |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1113 .unwrap(); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1114 let matcher = UnionMatcher::new(vec![Box::new(m1), Box::new(m2)]); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1115 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1116 let mut set = HashSet::new(); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1117 set.insert(HgPathBuf::from_bytes(b"dir")); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1118 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1119 matcher.visit_children_set(HgPath::new(b"")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1120 VisitChildrenSet::Set(set) |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1121 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1122 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1123 matcher.visit_children_set(HgPath::new(b"dir")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1124 VisitChildrenSet::This |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1125 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1126 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1127 matcher.visit_children_set(HgPath::new(b"dir/subdir")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1128 VisitChildrenSet::Recursive |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1129 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1130 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1131 matcher.visit_children_set(HgPath::new(b"dir/foo")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1132 VisitChildrenSet::Empty |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1133 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1134 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1135 matcher.visit_children_set(HgPath::new(b"folder")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1136 VisitChildrenSet::Empty |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1137 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1138 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1139 matcher.visit_children_set(HgPath::new(b"folder")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1140 VisitChildrenSet::Empty |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1141 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1142 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1143 // OPT: These next two could be 'all' instead of 'this'. |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1144 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1145 matcher.visit_children_set(HgPath::new(b"dir/subdir/z")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1146 VisitChildrenSet::This |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1147 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1148 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1149 matcher.visit_children_set(HgPath::new(b"dir/subdir/x")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1150 VisitChildrenSet::This |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1151 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1152 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1153 // Path + unrelated Path |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1154 let m1 = IncludeMatcher::new(vec![IgnorePattern::new( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1155 PatternSyntax::RelPath, |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1156 b"dir/subdir", |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1157 Path::new(""), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1158 )]) |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1159 .unwrap(); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1160 let m2 = IncludeMatcher::new(vec![IgnorePattern::new( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1161 PatternSyntax::RelPath, |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1162 b"folder", |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1163 Path::new(""), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1164 )]) |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1165 .unwrap(); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1166 let matcher = UnionMatcher::new(vec![Box::new(m1), Box::new(m2)]); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1167 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1168 let mut set = HashSet::new(); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1169 set.insert(HgPathBuf::from_bytes(b"folder")); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1170 set.insert(HgPathBuf::from_bytes(b"dir")); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1171 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1172 matcher.visit_children_set(HgPath::new(b"")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1173 VisitChildrenSet::Set(set) |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1174 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1175 let mut set = HashSet::new(); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1176 set.insert(HgPathBuf::from_bytes(b"subdir")); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1177 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1178 matcher.visit_children_set(HgPath::new(b"dir")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1179 VisitChildrenSet::Set(set) |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1180 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1181 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1182 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1183 matcher.visit_children_set(HgPath::new(b"dir/subdir")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1184 VisitChildrenSet::Recursive |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1185 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1186 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1187 matcher.visit_children_set(HgPath::new(b"dir/foo")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1188 VisitChildrenSet::Empty |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1189 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1190 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1191 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1192 matcher.visit_children_set(HgPath::new(b"folder")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1193 VisitChildrenSet::Recursive |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1194 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1195 // OPT: These next two could be 'all' instead of 'this'. |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1196 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1197 matcher.visit_children_set(HgPath::new(b"dir/subdir/z")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1198 VisitChildrenSet::This |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1199 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1200 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1201 matcher.visit_children_set(HgPath::new(b"dir/subdir/x")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1202 VisitChildrenSet::This |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1203 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1204 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1205 // Path + subpath |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1206 let m1 = IncludeMatcher::new(vec![IgnorePattern::new( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1207 PatternSyntax::RelPath, |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1208 b"dir/subdir/x", |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1209 Path::new(""), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1210 )]) |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1211 .unwrap(); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1212 let m2 = IncludeMatcher::new(vec![IgnorePattern::new( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1213 PatternSyntax::RelPath, |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1214 b"dir/subdir", |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1215 Path::new(""), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1216 )]) |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1217 .unwrap(); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1218 let matcher = UnionMatcher::new(vec![Box::new(m1), Box::new(m2)]); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1219 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1220 let mut set = HashSet::new(); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1221 set.insert(HgPathBuf::from_bytes(b"dir")); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1222 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1223 matcher.visit_children_set(HgPath::new(b"")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1224 VisitChildrenSet::Set(set) |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1225 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1226 let mut set = HashSet::new(); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1227 set.insert(HgPathBuf::from_bytes(b"subdir")); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1228 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1229 matcher.visit_children_set(HgPath::new(b"dir")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1230 VisitChildrenSet::Set(set) |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1231 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1232 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1233 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1234 matcher.visit_children_set(HgPath::new(b"dir/subdir")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1235 VisitChildrenSet::Recursive |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1236 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1237 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1238 matcher.visit_children_set(HgPath::new(b"dir/foo")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1239 VisitChildrenSet::Empty |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1240 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1241 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1242 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1243 matcher.visit_children_set(HgPath::new(b"folder")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1244 VisitChildrenSet::Empty |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1245 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1246 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1247 matcher.visit_children_set(HgPath::new(b"dir/subdir/x")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1248 VisitChildrenSet::Recursive |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1249 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1250 // OPT: this should probably be 'all' not 'this'. |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1251 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1252 matcher.visit_children_set(HgPath::new(b"dir/subdir/z")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1253 VisitChildrenSet::This |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1254 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1255 } |
49349
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1256 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1257 #[test] |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1258 fn test_intersectionmatcher() { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1259 // Include path + Include rootfiles |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1260 let m1 = Box::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1261 IncludeMatcher::new(vec![IgnorePattern::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1262 PatternSyntax::RelPath, |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1263 b"dir/subdir", |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1264 Path::new(""), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1265 )]) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1266 .unwrap(), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1267 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1268 let m2 = Box::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1269 IncludeMatcher::new(vec![IgnorePattern::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1270 PatternSyntax::RootFiles, |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1271 b"dir", |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1272 Path::new(""), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1273 )]) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1274 .unwrap(), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1275 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1276 let matcher = IntersectionMatcher::new(m1, m2); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1277 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1278 let mut set = HashSet::new(); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1279 set.insert(HgPathBuf::from_bytes(b"dir")); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1280 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1281 matcher.visit_children_set(HgPath::new(b"")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1282 VisitChildrenSet::Set(set) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1283 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1284 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1285 matcher.visit_children_set(HgPath::new(b"dir")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1286 VisitChildrenSet::This |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1287 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1288 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1289 matcher.visit_children_set(HgPath::new(b"dir/subdir")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1290 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1291 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1292 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1293 matcher.visit_children_set(HgPath::new(b"dir/foo")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1294 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1295 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1296 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1297 matcher.visit_children_set(HgPath::new(b"folder")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1298 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1299 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1300 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1301 matcher.visit_children_set(HgPath::new(b"dir/subdir/z")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1302 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1303 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1304 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1305 matcher.visit_children_set(HgPath::new(b"dir/subdir/x")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1306 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1307 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1308 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1309 // Non intersecting paths |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1310 let m1 = Box::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1311 IncludeMatcher::new(vec![IgnorePattern::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1312 PatternSyntax::RelPath, |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1313 b"dir/subdir", |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1314 Path::new(""), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1315 )]) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1316 .unwrap(), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1317 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1318 let m2 = Box::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1319 IncludeMatcher::new(vec![IgnorePattern::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1320 PatternSyntax::RelPath, |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1321 b"folder", |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1322 Path::new(""), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1323 )]) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1324 .unwrap(), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1325 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1326 let matcher = IntersectionMatcher::new(m1, m2); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1327 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1328 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1329 matcher.visit_children_set(HgPath::new(b"")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1330 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1331 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1332 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1333 matcher.visit_children_set(HgPath::new(b"dir")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1334 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1335 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1336 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1337 matcher.visit_children_set(HgPath::new(b"dir/subdir")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1338 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1339 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1340 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1341 matcher.visit_children_set(HgPath::new(b"dir/foo")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1342 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1343 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1344 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1345 matcher.visit_children_set(HgPath::new(b"folder")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1346 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1347 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1348 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1349 matcher.visit_children_set(HgPath::new(b"dir/subdir/z")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1350 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1351 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1352 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1353 matcher.visit_children_set(HgPath::new(b"dir/subdir/x")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1354 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1355 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1356 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1357 // Nested paths |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1358 let m1 = Box::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1359 IncludeMatcher::new(vec![IgnorePattern::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1360 PatternSyntax::RelPath, |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1361 b"dir/subdir/x", |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1362 Path::new(""), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1363 )]) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1364 .unwrap(), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1365 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1366 let m2 = Box::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1367 IncludeMatcher::new(vec![IgnorePattern::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1368 PatternSyntax::RelPath, |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1369 b"dir/subdir", |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1370 Path::new(""), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1371 )]) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1372 .unwrap(), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1373 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1374 let matcher = IntersectionMatcher::new(m1, m2); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1375 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1376 let mut set = HashSet::new(); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1377 set.insert(HgPathBuf::from_bytes(b"dir")); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1378 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1379 matcher.visit_children_set(HgPath::new(b"")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1380 VisitChildrenSet::Set(set) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1381 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1382 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1383 let mut set = HashSet::new(); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1384 set.insert(HgPathBuf::from_bytes(b"subdir")); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1385 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1386 matcher.visit_children_set(HgPath::new(b"dir")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1387 VisitChildrenSet::Set(set) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1388 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1389 let mut set = HashSet::new(); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1390 set.insert(HgPathBuf::from_bytes(b"x")); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1391 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1392 matcher.visit_children_set(HgPath::new(b"dir/subdir")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1393 VisitChildrenSet::Set(set) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1394 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1395 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1396 matcher.visit_children_set(HgPath::new(b"dir/foo")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1397 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1398 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1399 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1400 matcher.visit_children_set(HgPath::new(b"folder")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1401 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1402 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1403 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1404 matcher.visit_children_set(HgPath::new(b"dir/subdir/z")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1405 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1406 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1407 // OPT: this should probably be 'all' not 'this'. |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1408 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1409 matcher.visit_children_set(HgPath::new(b"dir/subdir/x")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1410 VisitChildrenSet::This |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1411 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1412 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1413 // Diverging paths |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1414 let m1 = Box::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1415 IncludeMatcher::new(vec![IgnorePattern::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1416 PatternSyntax::RelPath, |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1417 b"dir/subdir/x", |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1418 Path::new(""), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1419 )]) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1420 .unwrap(), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1421 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1422 let m2 = Box::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1423 IncludeMatcher::new(vec![IgnorePattern::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1424 PatternSyntax::RelPath, |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1425 b"dir/subdir/z", |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1426 Path::new(""), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1427 )]) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1428 .unwrap(), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1429 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1430 let matcher = IntersectionMatcher::new(m1, m2); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1431 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1432 // OPT: these next two could probably be Empty as well. |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1433 let mut set = HashSet::new(); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1434 set.insert(HgPathBuf::from_bytes(b"dir")); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1435 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1436 matcher.visit_children_set(HgPath::new(b"")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1437 VisitChildrenSet::Set(set) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1438 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1439 // OPT: these next two could probably be Empty as well. |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1440 let mut set = HashSet::new(); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1441 set.insert(HgPathBuf::from_bytes(b"subdir")); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1442 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1443 matcher.visit_children_set(HgPath::new(b"dir")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1444 VisitChildrenSet::Set(set) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1445 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1446 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1447 matcher.visit_children_set(HgPath::new(b"dir/subdir")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1448 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1449 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1450 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1451 matcher.visit_children_set(HgPath::new(b"dir/foo")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1452 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1453 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1454 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1455 matcher.visit_children_set(HgPath::new(b"folder")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1456 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1457 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1458 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1459 matcher.visit_children_set(HgPath::new(b"dir/subdir/z")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1460 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1461 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1462 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1463 matcher.visit_children_set(HgPath::new(b"dir/subdir/x")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1464 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1465 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1466 } |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1467 } |