Mercurial > public > mercurial-scm > hg
annotate rust/hg-core/src/matchers.rs @ 52160:e01e84e5e426
rust-revlog: add a Rust-only `InnerRevlog`
This mirrors the Python `InnerRevlog` and will be used in a future patch
to replace said Python implementation. This allows us to start doing more
things in pure Rust, in particular reading and writing operations.
A lot of changes have to be introduced all at once, it wouldn't be very
useful to separate this patch IMO since all of them are either interlocked
or only useful with the rest.
author | Rapha?l Gom?s <rgomes@octobus.net> |
---|---|
date | Thu, 10 Oct 2024 10:34:51 +0200 |
parents | b2e90465daf6 |
children | 04b9a56c2d25 |
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 |
51106
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50862
diff
changeset
|
10 use format_bytes::format_bytes; |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50862
diff
changeset
|
11 use once_cell::sync::OnceCell; |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50862
diff
changeset
|
12 |
44519
52d40f8fb82d
rust-matchers: add function to generate a regex matcher function
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44353
diff
changeset
|
13 use crate::{ |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
14 dirstate::dirs_multiset::DirsChildrenMultiset, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
15 filepatterns::{ |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
16 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
|
17 PatternFileWarning, PatternResult, |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
18 }, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
19 utils::{ |
51563
529a655874fb
matchers: fix the bug in rust PatternMatcher that made it cut off early
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51561
diff
changeset
|
20 files::{dir_ancestors, find_dirs}, |
50857
f50e71fdfcb4
rust: improve the type on DirsMultiset::from_manifest
Spencer Baugh <sbaugh@janestreet.com>
parents:
50853
diff
changeset
|
21 hg_path::{HgPath, HgPathBuf, HgPathError}, |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
22 Escaped, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
23 }, |
50857
f50e71fdfcb4
rust: improve the type on DirsMultiset::from_manifest
Spencer Baugh <sbaugh@janestreet.com>
parents:
50853
diff
changeset
|
24 DirsMultiset, FastHashMap, IgnorePattern, PatternError, PatternSyntax, |
44519
52d40f8fb82d
rust-matchers: add function to generate a regex matcher function
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44353
diff
changeset
|
25 }; |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
26 |
48354
2009e3c64a53
rhg: refactor to use IgnoreFnType alias more widely
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48311
diff
changeset
|
27 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
|
28 use crate::filepatterns::normalize_path_bytes; |
43438
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
29 use std::collections::HashSet; |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
30 use std::fmt::{Display, Error, Formatter}; |
44597
e62052d0f377
rust-status: only involve ignore mechanism when needed
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44593
diff
changeset
|
31 use std::path::{Path, PathBuf}; |
51106
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50862
diff
changeset
|
32 use std::{borrow::ToOwned, collections::BTreeSet}; |
43438
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
33 |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
34 #[derive(Debug, PartialEq)] |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
35 pub enum VisitChildrenSet { |
43438
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
36 /// Don't visit anything |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
37 Empty, |
51561
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
38 /// Visit this directory and probably its children |
43438
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
39 This, |
51561
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
40 /// Only visit the children (both files and directories) if they |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
41 /// are mentioned in this set. (empty set corresponds to [Empty]) |
43438
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
42 /// 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
|
43 Set(HashSet<HgPathBuf>), |
43438
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
44 /// Visit this directory and all subdirectories |
51561
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
45 /// (you can stop asking about the children set) |
43438
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 |
49487
e8481625c582
rust: add Debug constraint to Matcher trait
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49478
diff
changeset
|
49 pub trait Matcher: core::fmt::Debug { |
43438
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, |
51106
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50862
diff
changeset
|
180 sorted_visitchildrenset_candidates: OnceCell<BTreeSet<HgPathBuf>>, |
43914
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
181 } |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
182 |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
183 impl FileMatcher { |
50857
f50e71fdfcb4
rust: improve the type on DirsMultiset::from_manifest
Spencer Baugh <sbaugh@janestreet.com>
parents:
50853
diff
changeset
|
184 pub fn new(files: Vec<HgPathBuf>) -> Result<Self, HgPathError> { |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
185 let dirs = DirsMultiset::from_manifest(&files)?; |
43914
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
186 Ok(Self { |
51117
532e74ad3ff6
rust: run a clippy pass with the latest stable version
Rapha?l Gom?s <rgomes@octobus.net>
parents:
51106
diff
changeset
|
187 files: HashSet::from_iter(files), |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
188 dirs, |
51106
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50862
diff
changeset
|
189 sorted_visitchildrenset_candidates: OnceCell::new(), |
43914
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
190 }) |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
191 } |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44973
diff
changeset
|
192 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
|
193 self.files.contains(filename.as_ref()) |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
194 } |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
195 } |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
196 |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
197 impl Matcher for FileMatcher { |
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
198 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
|
199 Some(&self.files) |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
200 } |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44973
diff
changeset
|
201 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
|
202 self.inner_matches(filename) |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
203 } |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44973
diff
changeset
|
204 fn matches(&self, filename: &HgPath) -> bool { |
43914
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
205 self.inner_matches(filename) |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
206 } |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44973
diff
changeset
|
207 fn visit_children_set(&self, directory: &HgPath) -> VisitChildrenSet { |
51106
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50862
diff
changeset
|
208 if self.files.is_empty() || !self.dirs.contains(directory) { |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
209 return VisitChildrenSet::Empty; |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
210 } |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
211 |
51106
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50862
diff
changeset
|
212 let compute_candidates = || -> BTreeSet<HgPathBuf> { |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50862
diff
changeset
|
213 let mut candidates: BTreeSet<HgPathBuf> = |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50862
diff
changeset
|
214 self.dirs.iter().cloned().collect(); |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50862
diff
changeset
|
215 candidates.extend(self.files.iter().cloned()); |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50862
diff
changeset
|
216 candidates.remove(HgPath::new(b"")); |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50862
diff
changeset
|
217 candidates |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50862
diff
changeset
|
218 }; |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50862
diff
changeset
|
219 let candidates = |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50862
diff
changeset
|
220 if directory.as_ref().is_empty() { |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50862
diff
changeset
|
221 compute_candidates() |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50862
diff
changeset
|
222 } else { |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50862
diff
changeset
|
223 let sorted_candidates = self |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50862
diff
changeset
|
224 .sorted_visitchildrenset_candidates |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50862
diff
changeset
|
225 .get_or_init(compute_candidates); |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50862
diff
changeset
|
226 let directory_bytes = directory.as_ref().as_bytes(); |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50862
diff
changeset
|
227 let start: HgPathBuf = |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50862
diff
changeset
|
228 format_bytes!(b"{}/", directory_bytes).into(); |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50862
diff
changeset
|
229 let start_len = start.len(); |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50862
diff
changeset
|
230 // `0` sorts after `/` |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50862
diff
changeset
|
231 let end = format_bytes!(b"{}0", directory_bytes).into(); |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50862
diff
changeset
|
232 BTreeSet::from_iter(sorted_candidates.range(start..end).map( |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50862
diff
changeset
|
233 |c| HgPathBuf::from_bytes(&c.as_bytes()[start_len..]), |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50862
diff
changeset
|
234 )) |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50862
diff
changeset
|
235 }; |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
236 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
237 // `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
|
238 // 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
|
239 // '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
|
240 // '/' 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
|
241 // 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
|
242 VisitChildrenSet::Set( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
243 candidates |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
244 .into_iter() |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
245 .filter_map(|c| { |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
246 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
|
247 Some(c) |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
248 } else { |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
249 None |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
250 } |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
251 }) |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
252 .collect(), |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
253 ) |
43914
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 fn matches_everything(&self) -> bool { |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
256 false |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
257 } |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
258 fn is_exact(&self) -> bool { |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
259 true |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
260 } |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
43863
diff
changeset
|
261 } |
44519
52d40f8fb82d
rust-matchers: add function to generate a regex matcher function
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44353
diff
changeset
|
262 |
50862
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
263 /// Matches a set of (kind, pat, source) against a 'root' directory. |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
264 /// (Currently the 'root' directory is effectively always empty) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
265 /// ``` |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
266 /// use hg::{ |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
267 /// matchers::{PatternMatcher, Matcher}, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
268 /// IgnorePattern, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
269 /// PatternSyntax, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
270 /// utils::hg_path::{HgPath, HgPathBuf} |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
271 /// }; |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
272 /// use std::collections::HashSet; |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
273 /// use std::path::Path; |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
274 /// /// |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
275 /// let ignore_patterns : Vec<IgnorePattern> = |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
276 /// vec![IgnorePattern::new(PatternSyntax::Regexp, br".*\.c$", Path::new("")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
277 /// IgnorePattern::new(PatternSyntax::Path, b"foo/a", Path::new("")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
278 /// IgnorePattern::new(PatternSyntax::RelPath, b"b", Path::new("")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
279 /// IgnorePattern::new(PatternSyntax::Glob, b"*.h", Path::new("")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
280 /// ]; |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
281 /// let matcher = PatternMatcher::new(ignore_patterns).unwrap(); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
282 /// /// |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
283 /// assert_eq!(matcher.matches(HgPath::new(b"main.c")), true); // matches re:.*\.c$ |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
284 /// assert_eq!(matcher.matches(HgPath::new(b"b.txt")), false); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
285 /// assert_eq!(matcher.matches(HgPath::new(b"foo/a")), true); // matches path:foo/a |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
286 /// assert_eq!(matcher.matches(HgPath::new(b"a")), false); // does not match path:b, since 'root' is 'foo' |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
287 /// assert_eq!(matcher.matches(HgPath::new(b"b")), true); // matches relpath:b, since 'root' is 'foo' |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
288 /// assert_eq!(matcher.matches(HgPath::new(b"lib.h")), true); // matches glob:*.h |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
289 /// assert_eq!(matcher.file_set().unwrap(), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
290 /// &HashSet::from([HgPathBuf::from_bytes(b""), HgPathBuf::from_bytes(b"foo/a"), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
291 /// HgPathBuf::from_bytes(b""), HgPathBuf::from_bytes(b"b")])); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
292 /// assert_eq!(matcher.exact_match(HgPath::new(b"foo/a")), true); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
293 /// assert_eq!(matcher.exact_match(HgPath::new(b"b")), true); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
294 /// assert_eq!(matcher.exact_match(HgPath::new(b"lib.h")), false); // exact matches are for (rel)path kinds |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
295 /// ``` |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
296 pub struct PatternMatcher<'a> { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
297 patterns: Vec<u8>, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
298 match_fn: IgnoreFnType<'a>, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
299 /// Whether all the patterns match a prefix (i.e. recursively) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
300 prefix: bool, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
301 files: HashSet<HgPathBuf>, |
51567
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
302 dirs_explicit: HashSet<HgPathBuf>, |
50862
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
303 dirs: DirsMultiset, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
304 } |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
305 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
306 impl core::fmt::Debug for PatternMatcher<'_> { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
307 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
308 f.debug_struct("PatternMatcher") |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
309 .field("patterns", &String::from_utf8_lossy(&self.patterns)) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
310 .field("prefix", &self.prefix) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
311 .field("files", &self.files) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
312 .field("dirs", &self.dirs) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
313 .finish() |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
314 } |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
315 } |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
316 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
317 impl<'a> PatternMatcher<'a> { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
318 pub fn new(ignore_patterns: Vec<IgnorePattern>) -> PatternResult<Self> { |
51567
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
319 let RootsDirsAndParents { |
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
320 roots, |
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
321 dirs: dirs_explicit, |
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
322 parents, |
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
323 } = roots_dirs_and_parents(&ignore_patterns)?; |
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
324 let files = roots; |
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
325 let dirs = parents; |
51117
532e74ad3ff6
rust: run a clippy pass with the latest stable version
Rapha?l Gom?s <rgomes@octobus.net>
parents:
51106
diff
changeset
|
326 let files: HashSet<HgPathBuf> = HashSet::from_iter(files); |
50862
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
327 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
328 let prefix = ignore_patterns.iter().all(|k| { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
329 matches!(k.syntax, PatternSyntax::Path | PatternSyntax::RelPath) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
330 }); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
331 let (patterns, match_fn) = build_match(ignore_patterns, b"$")?; |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
332 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
333 Ok(Self { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
334 patterns, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
335 match_fn, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
336 prefix, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
337 files, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
338 dirs, |
51567
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
339 dirs_explicit, |
50862
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
340 }) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
341 } |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
342 } |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
343 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
344 impl<'a> Matcher for PatternMatcher<'a> { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
345 fn file_set(&self) -> Option<&HashSet<HgPathBuf>> { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
346 Some(&self.files) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
347 } |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
348 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
349 fn exact_match(&self, filename: &HgPath) -> bool { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
350 self.files.contains(filename) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
351 } |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
352 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
353 fn matches(&self, filename: &HgPath) -> bool { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
354 if self.files.contains(filename) { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
355 return true; |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
356 } |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
357 (self.match_fn)(filename) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
358 } |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
359 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
360 fn visit_children_set(&self, directory: &HgPath) -> VisitChildrenSet { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
361 if self.prefix && self.files.contains(directory) { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
362 return VisitChildrenSet::Recursive; |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
363 } |
51564
cae0be933434
match: small tweak to PatternMatcher.visit_children_set
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51563
diff
changeset
|
364 if self.dirs.contains(directory) { |
cae0be933434
match: small tweak to PatternMatcher.visit_children_set
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51563
diff
changeset
|
365 return VisitChildrenSet::This; |
cae0be933434
match: small tweak to PatternMatcher.visit_children_set
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51563
diff
changeset
|
366 } |
51567
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
367 if dir_ancestors(directory).any(|parent_dir| { |
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
368 self.files.contains(parent_dir) |
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
369 || self.dirs_explicit.contains(parent_dir) |
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
370 }) { |
50862
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
371 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
372 } else { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
373 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
374 } |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
375 } |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
376 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
377 fn matches_everything(&self) -> bool { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
378 false |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
379 } |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
380 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
381 fn is_exact(&self) -> bool { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
382 false |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
383 } |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
384 } |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
385 |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
386 /// 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
|
387 /// ``` |
9f96beb9bafe
rust: remove support for `re2`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44852
diff
changeset
|
388 /// use hg::{ |
9f96beb9bafe
rust: remove support for `re2`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44852
diff
changeset
|
389 /// matchers::{IncludeMatcher, Matcher}, |
9f96beb9bafe
rust: remove support for `re2`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44852
diff
changeset
|
390 /// IgnorePattern, |
9f96beb9bafe
rust: remove support for `re2`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44852
diff
changeset
|
391 /// PatternSyntax, |
9f96beb9bafe
rust: remove support for `re2`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44852
diff
changeset
|
392 /// utils::hg_path::HgPath |
9f96beb9bafe
rust: remove support for `re2`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44852
diff
changeset
|
393 /// }; |
9f96beb9bafe
rust: remove support for `re2`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44852
diff
changeset
|
394 /// use std::path::Path; |
9f96beb9bafe
rust: remove support for `re2`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44852
diff
changeset
|
395 /// /// |
9f96beb9bafe
rust: remove support for `re2`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44852
diff
changeset
|
396 /// let ignore_patterns = |
9f96beb9bafe
rust: remove support for `re2`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44852
diff
changeset
|
397 /// 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
|
398 /// 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
|
399 /// /// |
9f96beb9bafe
rust: remove support for `re2`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44852
diff
changeset
|
400 /// 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
|
401 /// 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
|
402 /// 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
|
403 /// assert_eq!(matcher.matches(HgPath::new(b"but not this")), false); |
51271
bec6e9c108fd
matchers: use correct method for finding index in vector
Martin von Zweigbergk <martinvonz@google.com>
parents:
51117
diff
changeset
|
404 /// /// |
bec6e9c108fd
matchers: use correct method for finding index in vector
Martin von Zweigbergk <martinvonz@google.com>
parents:
51117
diff
changeset
|
405 /// let ignore_patterns = |
51565
2a89d2f6336f
match: rename RootFiles to RootFilesIn for more consistency
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51564
diff
changeset
|
406 /// vec![IgnorePattern::new(PatternSyntax::RootFilesIn, b"dir/subdir", Path::new(""))]; |
51271
bec6e9c108fd
matchers: use correct method for finding index in vector
Martin von Zweigbergk <martinvonz@google.com>
parents:
51117
diff
changeset
|
407 /// let matcher = IncludeMatcher::new(ignore_patterns).unwrap(); |
bec6e9c108fd
matchers: use correct method for finding index in vector
Martin von Zweigbergk <martinvonz@google.com>
parents:
51117
diff
changeset
|
408 /// /// |
bec6e9c108fd
matchers: use correct method for finding index in vector
Martin von Zweigbergk <martinvonz@google.com>
parents:
51117
diff
changeset
|
409 /// assert!(!matcher.matches(HgPath::new(b"file"))); |
bec6e9c108fd
matchers: use correct method for finding index in vector
Martin von Zweigbergk <martinvonz@google.com>
parents:
51117
diff
changeset
|
410 /// assert!(!matcher.matches(HgPath::new(b"dir/file"))); |
bec6e9c108fd
matchers: use correct method for finding index in vector
Martin von Zweigbergk <martinvonz@google.com>
parents:
51117
diff
changeset
|
411 /// assert!(matcher.matches(HgPath::new(b"dir/subdir/file"))); |
bec6e9c108fd
matchers: use correct method for finding index in vector
Martin von Zweigbergk <martinvonz@google.com>
parents:
51117
diff
changeset
|
412 /// assert!(!matcher.matches(HgPath::new(b"dir/subdir/subsubdir/file"))); |
44870
9f96beb9bafe
rust: remove support for `re2`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44852
diff
changeset
|
413 /// ``` |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
414 pub struct IncludeMatcher<'a> { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
415 patterns: Vec<u8>, |
48354
2009e3c64a53
rhg: refactor to use IgnoreFnType alias more widely
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48311
diff
changeset
|
416 match_fn: IgnoreFnType<'a>, |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
417 /// 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
|
418 prefix: bool, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
419 roots: HashSet<HgPathBuf>, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
420 dirs: HashSet<HgPathBuf>, |
51567
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
421 parents: DirsMultiset, |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
422 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
423 |
49487
e8481625c582
rust: add Debug constraint to Matcher trait
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49478
diff
changeset
|
424 impl core::fmt::Debug for IncludeMatcher<'_> { |
e8481625c582
rust: add Debug constraint to Matcher trait
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49478
diff
changeset
|
425 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { |
e8481625c582
rust: add Debug constraint to Matcher trait
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49478
diff
changeset
|
426 f.debug_struct("IncludeMatcher") |
e8481625c582
rust: add Debug constraint to Matcher trait
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49478
diff
changeset
|
427 .field("patterns", &String::from_utf8_lossy(&self.patterns)) |
e8481625c582
rust: add Debug constraint to Matcher trait
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49478
diff
changeset
|
428 .field("prefix", &self.prefix) |
e8481625c582
rust: add Debug constraint to Matcher trait
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49478
diff
changeset
|
429 .field("roots", &self.roots) |
e8481625c582
rust: add Debug constraint to Matcher trait
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49478
diff
changeset
|
430 .field("dirs", &self.dirs) |
e8481625c582
rust: add Debug constraint to Matcher trait
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49478
diff
changeset
|
431 .field("parents", &self.parents) |
e8481625c582
rust: add Debug constraint to Matcher trait
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49478
diff
changeset
|
432 .finish() |
e8481625c582
rust: add Debug constraint to Matcher trait
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49478
diff
changeset
|
433 } |
e8481625c582
rust: add Debug constraint to Matcher trait
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49478
diff
changeset
|
434 } |
e8481625c582
rust: add Debug constraint to Matcher trait
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49478
diff
changeset
|
435 |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
436 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
|
437 fn file_set(&self) -> Option<&HashSet<HgPathBuf>> { |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
438 None |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
439 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
440 |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44973
diff
changeset
|
441 fn exact_match(&self, _filename: &HgPath) -> bool { |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
442 false |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
443 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
444 |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44973
diff
changeset
|
445 fn matches(&self, filename: &HgPath) -> bool { |
49930
e98fd81bb151
rust-clippy: fix most warnings in `hg-core`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49913
diff
changeset
|
446 (self.match_fn)(filename) |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
447 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
448 |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44973
diff
changeset
|
449 fn visit_children_set(&self, directory: &HgPath) -> VisitChildrenSet { |
49930
e98fd81bb151
rust-clippy: fix most warnings in `hg-core`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49913
diff
changeset
|
450 let dir = directory; |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
451 if self.prefix && self.roots.contains(dir) { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
452 return VisitChildrenSet::Recursive; |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
453 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
454 if self.roots.contains(HgPath::new(b"")) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
455 || self.roots.contains(dir) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
456 || self.dirs.contains(dir) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
457 || 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
|
458 { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
459 return VisitChildrenSet::This; |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
460 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
461 |
49930
e98fd81bb151
rust-clippy: fix most warnings in `hg-core`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49913
diff
changeset
|
462 if self.parents.contains(dir.as_ref()) { |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
463 let multiset = self.get_all_parents_children(); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
464 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
|
465 return VisitChildrenSet::Set( |
49930
e98fd81bb151
rust-clippy: fix most warnings in `hg-core`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49913
diff
changeset
|
466 children.iter().map(HgPathBuf::from).collect(), |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
467 ); |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
468 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
469 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
470 VisitChildrenSet::Empty |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
471 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
472 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
473 fn matches_everything(&self) -> bool { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
474 false |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
475 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
476 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
477 fn is_exact(&self) -> bool { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
478 false |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
479 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
480 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
481 |
49347
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
482 /// The union of multiple matchers. Will match if any of the matchers match. |
49487
e8481625c582
rust: add Debug constraint to Matcher trait
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49478
diff
changeset
|
483 #[derive(Debug)] |
49347
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
484 pub struct UnionMatcher { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
485 matchers: Vec<Box<dyn Matcher + Sync>>, |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
486 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
487 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
488 impl Matcher for UnionMatcher { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
489 fn file_set(&self) -> Option<&HashSet<HgPathBuf>> { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
490 None |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
491 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
492 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
493 fn exact_match(&self, _filename: &HgPath) -> bool { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
494 false |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
495 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
496 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
497 fn matches(&self, filename: &HgPath) -> bool { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
498 self.matchers.iter().any(|m| m.matches(filename)) |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
499 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
500 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
501 fn visit_children_set(&self, directory: &HgPath) -> VisitChildrenSet { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
502 let mut result = HashSet::new(); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
503 let mut this = false; |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
504 for matcher in self.matchers.iter() { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
505 let visit = matcher.visit_children_set(directory); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
506 match visit { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
507 VisitChildrenSet::Empty => continue, |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
508 VisitChildrenSet::This => { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
509 this = true; |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
510 // 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
|
511 continue; |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
512 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
513 VisitChildrenSet::Set(set) => { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
514 result.extend(set); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
515 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
516 VisitChildrenSet::Recursive => { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
517 return visit; |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
518 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
519 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
520 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
521 if this { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
522 return VisitChildrenSet::This; |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
523 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
524 if result.is_empty() { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
525 VisitChildrenSet::Empty |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
526 } else { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
527 VisitChildrenSet::Set(result) |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
528 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
529 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
530 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
531 fn matches_everything(&self) -> bool { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
532 // TODO Maybe if all are AlwaysMatcher? |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
533 false |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
534 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
535 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
536 fn is_exact(&self) -> bool { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
537 false |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
538 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
539 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
540 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
541 impl UnionMatcher { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
542 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
|
543 Self { matchers } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
544 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
545 } |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
546 |
49487
e8481625c582
rust: add Debug constraint to Matcher trait
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49478
diff
changeset
|
547 #[derive(Debug)] |
49349
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
548 pub struct IntersectionMatcher { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
549 m1: Box<dyn Matcher + Sync>, |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
550 m2: Box<dyn Matcher + Sync>, |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
551 files: Option<HashSet<HgPathBuf>>, |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
552 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
553 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
554 impl Matcher for IntersectionMatcher { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
555 fn file_set(&self) -> Option<&HashSet<HgPathBuf>> { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
556 self.files.as_ref() |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
557 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
558 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
559 fn exact_match(&self, filename: &HgPath) -> bool { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
560 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
|
561 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
562 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
563 fn matches(&self, filename: &HgPath) -> bool { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
564 self.m1.matches(filename) && self.m2.matches(filename) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
565 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
566 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
567 fn visit_children_set(&self, directory: &HgPath) -> VisitChildrenSet { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
568 let m1_set = self.m1.visit_children_set(directory); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
569 if m1_set == VisitChildrenSet::Empty { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
570 return VisitChildrenSet::Empty; |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
571 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
572 let m2_set = self.m2.visit_children_set(directory); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
573 if m2_set == VisitChildrenSet::Empty { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
574 return VisitChildrenSet::Empty; |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
575 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
576 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
577 if m1_set == VisitChildrenSet::Recursive { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
578 return m2_set; |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
579 } else if m2_set == VisitChildrenSet::Recursive { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
580 return m1_set; |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
581 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
582 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
583 match (&m1_set, &m2_set) { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
584 (VisitChildrenSet::Recursive, _) => m2_set, |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
585 (_, VisitChildrenSet::Recursive) => m1_set, |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
586 (VisitChildrenSet::This, _) | (_, VisitChildrenSet::This) => { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
587 VisitChildrenSet::This |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
588 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
589 (VisitChildrenSet::Set(m1), VisitChildrenSet::Set(m2)) => { |
49930
e98fd81bb151
rust-clippy: fix most warnings in `hg-core`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49913
diff
changeset
|
590 let set: HashSet<_> = m1.intersection(m2).cloned().collect(); |
49349
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
591 if set.is_empty() { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
592 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
593 } else { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
594 VisitChildrenSet::Set(set) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
595 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
596 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
597 _ => unreachable!(), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
598 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
599 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
600 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
601 fn matches_everything(&self) -> bool { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
602 self.m1.matches_everything() && self.m2.matches_everything() |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
603 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
604 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
605 fn is_exact(&self) -> bool { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
606 self.m1.is_exact() || self.m2.is_exact() |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
607 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
608 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
609 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
610 impl IntersectionMatcher { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
611 pub fn new( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
612 mut m1: Box<dyn Matcher + Sync>, |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
613 mut m2: Box<dyn Matcher + Sync>, |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
614 ) -> Self { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
615 let files = if m1.is_exact() || m2.is_exact() { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
616 if !m1.is_exact() { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
617 std::mem::swap(&mut m1, &mut m2); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
618 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
619 m1.file_set().map(|m1_files| { |
51703
ec7171748350
rust: apply clippy lints
Rapha?l Gom?s <rgomes@octobus.net>
parents:
51696
diff
changeset
|
620 m1_files |
ec7171748350
rust: apply clippy lints
Rapha?l Gom?s <rgomes@octobus.net>
parents:
51696
diff
changeset
|
621 .iter() |
ec7171748350
rust: apply clippy lints
Rapha?l Gom?s <rgomes@octobus.net>
parents:
51696
diff
changeset
|
622 .filter(|&f| m2.matches(f)) |
ec7171748350
rust: apply clippy lints
Rapha?l Gom?s <rgomes@octobus.net>
parents:
51696
diff
changeset
|
623 .cloned() |
ec7171748350
rust: apply clippy lints
Rapha?l Gom?s <rgomes@octobus.net>
parents:
51696
diff
changeset
|
624 .collect() |
49349
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
625 }) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
626 } else { |
50853
e037af7de2ce
rust-matchers: better support file_set in IntersectionMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50692
diff
changeset
|
627 // without exact input file sets, we can't do an exact |
e037af7de2ce
rust-matchers: better support file_set in IntersectionMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50692
diff
changeset
|
628 // intersection, so we must over-approximate by |
e037af7de2ce
rust-matchers: better support file_set in IntersectionMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50692
diff
changeset
|
629 // unioning instead |
e037af7de2ce
rust-matchers: better support file_set in IntersectionMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50692
diff
changeset
|
630 m1.file_set().map(|m1_files| match m2.file_set() { |
e037af7de2ce
rust-matchers: better support file_set in IntersectionMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50692
diff
changeset
|
631 Some(m2_files) => m1_files.union(m2_files).cloned().collect(), |
e037af7de2ce
rust-matchers: better support file_set in IntersectionMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50692
diff
changeset
|
632 None => m1_files.iter().cloned().collect(), |
e037af7de2ce
rust-matchers: better support file_set in IntersectionMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50692
diff
changeset
|
633 }) |
49349
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
634 }; |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
635 Self { m1, m2, files } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
636 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
637 } |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
638 |
49487
e8481625c582
rust: add Debug constraint to Matcher trait
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49478
diff
changeset
|
639 #[derive(Debug)] |
49478
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
640 pub struct DifferenceMatcher { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
641 base: Box<dyn Matcher + Sync>, |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
642 excluded: Box<dyn Matcher + Sync>, |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
643 files: Option<HashSet<HgPathBuf>>, |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
644 } |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
645 |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
646 impl Matcher for DifferenceMatcher { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
647 fn file_set(&self) -> Option<&HashSet<HgPathBuf>> { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
648 self.files.as_ref() |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
649 } |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
650 |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
651 fn exact_match(&self, filename: &HgPath) -> bool { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
652 self.files.as_ref().map_or(false, |f| f.contains(filename)) |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
653 } |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
654 |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
655 fn matches(&self, filename: &HgPath) -> bool { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
656 self.base.matches(filename) && !self.excluded.matches(filename) |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
657 } |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
658 |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
659 fn visit_children_set(&self, directory: &HgPath) -> VisitChildrenSet { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
660 let excluded_set = self.excluded.visit_children_set(directory); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
661 if excluded_set == VisitChildrenSet::Recursive { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
662 return VisitChildrenSet::Empty; |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
663 } |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
664 let base_set = self.base.visit_children_set(directory); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
665 // Possible values for base: 'recursive', 'this', set(...), set() |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
666 // Possible values for excluded: 'this', set(...), set() |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
667 // If excluded has nothing under here that we care about, return base, |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
668 // even if it's 'recursive'. |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
669 if excluded_set == VisitChildrenSet::Empty { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
670 return base_set; |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
671 } |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
672 match base_set { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
673 VisitChildrenSet::This | VisitChildrenSet::Recursive => { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
674 // Never return 'recursive' here if excluded_set is any kind of |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
675 // non-empty (either 'this' or set(foo)), since excluded might |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
676 // return set() for a subdirectory. |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
677 VisitChildrenSet::This |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
678 } |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
679 set => { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
680 // Possible values for base: set(...), set() |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
681 // Possible values for excluded: 'this', set(...) |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
682 // We ignore excluded set results. They're possibly incorrect: |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
683 // base = path:dir/subdir |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
684 // excluded=rootfilesin:dir, |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
685 // visit_children_set(''): |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
686 // base returns {'dir'}, excluded returns {'dir'}, if we |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
687 // subtracted we'd return set(), which is *not* correct, we |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
688 // still need to visit 'dir'! |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
689 set |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
690 } |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
691 } |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
692 } |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
693 |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
694 fn matches_everything(&self) -> bool { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
695 false |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
696 } |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
697 |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
698 fn is_exact(&self) -> bool { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
699 self.base.is_exact() |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
700 } |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
701 } |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
702 |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
703 impl DifferenceMatcher { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
704 pub fn new( |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
705 base: Box<dyn Matcher + Sync>, |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
706 excluded: Box<dyn Matcher + Sync>, |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
707 ) -> Self { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
708 let base_is_exact = base.is_exact(); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
709 let base_files = base.file_set().map(ToOwned::to_owned); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
710 let mut new = Self { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
711 base, |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
712 excluded, |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
713 files: None, |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
714 }; |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
715 if base_is_exact { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
716 new.files = base_files.map(|files| { |
51703
ec7171748350
rust: apply clippy lints
Rapha?l Gom?s <rgomes@octobus.net>
parents:
51696
diff
changeset
|
717 files.iter().filter(|&f| new.matches(f)).cloned().collect() |
49478
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
718 }); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
719 } |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
720 new |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
721 } |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
722 } |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
723 |
49581
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
724 /// Wraps [`regex::bytes::Regex`] to improve performance in multithreaded |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
725 /// contexts. |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
726 /// |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
727 /// The `status` algorithm makes heavy use of threads, and calling `is_match` |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
728 /// from many threads at once is prone to contention, probably within the |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
729 /// scratch space needed as the regex DFA is built lazily. |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
730 /// |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
731 /// We are in the process of raising the issue upstream, but for now |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
732 /// the workaround used here is to store the `Regex` in a lazily populated |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
733 /// thread-local variable, sharing the initial read-only compilation, but |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
734 /// not the lazy dfa scratch space mentioned above. |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
735 /// |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
736 /// This reduces the contention observed with 16+ threads, but does not |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
737 /// completely remove it. Hopefully this can be addressed upstream. |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
738 struct RegexMatcher { |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
739 /// Compiled at the start of the status algorithm, used as a base for |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
740 /// cloning in each thread-local `self.local`, thus sharing the expensive |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
741 /// first compilation. |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
742 base: regex::bytes::Regex, |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
743 /// Thread-local variable that holds the `Regex` that is actually queried |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
744 /// from each thread. |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
745 local: thread_local::ThreadLocal<regex::bytes::Regex>, |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
746 } |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
747 |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
748 impl RegexMatcher { |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
749 /// Returns whether the path matches the stored `Regex`. |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
750 pub fn is_match(&self, path: &HgPath) -> bool { |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
751 self.local |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
752 .get_or(|| self.base.clone()) |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
753 .is_match(path.as_bytes()) |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
754 } |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
755 } |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
756 |
51468
5633de951d34
rust-matchers: raw regular expression builder
Georges Racinet <georges.racinet@octobus.net>
parents:
51271
diff
changeset
|
757 /// Return a `RegexBuilder` from a bytes pattern |
44593
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
758 /// |
51468
5633de951d34
rust-matchers: raw regular expression builder
Georges Racinet <georges.racinet@octobus.net>
parents:
51271
diff
changeset
|
759 /// This works around the fact that even if it works on byte haysacks, |
5633de951d34
rust-matchers: raw regular expression builder
Georges Racinet <georges.racinet@octobus.net>
parents:
51271
diff
changeset
|
760 /// [`regex::bytes::Regex`] still uses UTF-8 patterns. |
5633de951d34
rust-matchers: raw regular expression builder
Georges Racinet <georges.racinet@octobus.net>
parents:
51271
diff
changeset
|
761 pub fn re_bytes_builder(pattern: &[u8]) -> regex::bytes::RegexBuilder { |
44593
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
762 use std::io::Write; |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
763 |
44832
ad1ec40975aa
rust-regex: fix issues with regex anchoring and performance
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44803
diff
changeset
|
764 // 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
|
765 // 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
|
766 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
|
767 for byte in pattern { |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
768 if *byte > 127 { |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
769 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
|
770 } else { |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
771 escaped_bytes.push(*byte); |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
772 } |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
773 } |
44832
ad1ec40975aa
rust-regex: fix issues with regex anchoring and performance
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44803
diff
changeset
|
774 escaped_bytes.push(b')'); |
44593
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
775 |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
776 // Avoid the cost of UTF8 checking |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
777 // |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
778 // # Safety |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
779 // 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
|
780 let pattern_string = unsafe { String::from_utf8_unchecked(escaped_bytes) }; |
51468
5633de951d34
rust-matchers: raw regular expression builder
Georges Racinet <georges.racinet@octobus.net>
parents:
51271
diff
changeset
|
781 regex::bytes::RegexBuilder::new(&pattern_string) |
5633de951d34
rust-matchers: raw regular expression builder
Georges Racinet <georges.racinet@octobus.net>
parents:
51271
diff
changeset
|
782 } |
5633de951d34
rust-matchers: raw regular expression builder
Georges Racinet <georges.racinet@octobus.net>
parents:
51271
diff
changeset
|
783 |
5633de951d34
rust-matchers: raw regular expression builder
Georges Racinet <georges.racinet@octobus.net>
parents:
51271
diff
changeset
|
784 /// Returns a function that matches an `HgPath` against the given regex |
5633de951d34
rust-matchers: raw regular expression builder
Georges Racinet <georges.racinet@octobus.net>
parents:
51271
diff
changeset
|
785 /// pattern. |
5633de951d34
rust-matchers: raw regular expression builder
Georges Racinet <georges.racinet@octobus.net>
parents:
51271
diff
changeset
|
786 /// |
5633de951d34
rust-matchers: raw regular expression builder
Georges Racinet <georges.racinet@octobus.net>
parents:
51271
diff
changeset
|
787 /// This can fail when the pattern is invalid or not supported by the |
5633de951d34
rust-matchers: raw regular expression builder
Georges Racinet <georges.racinet@octobus.net>
parents:
51271
diff
changeset
|
788 /// underlying engine (the `regex` crate), for instance anything with |
5633de951d34
rust-matchers: raw regular expression builder
Georges Racinet <georges.racinet@octobus.net>
parents:
51271
diff
changeset
|
789 /// back-references. |
5633de951d34
rust-matchers: raw regular expression builder
Georges Racinet <georges.racinet@octobus.net>
parents:
51271
diff
changeset
|
790 #[logging_timer::time("trace")] |
5633de951d34
rust-matchers: raw regular expression builder
Georges Racinet <georges.racinet@octobus.net>
parents:
51271
diff
changeset
|
791 fn re_matcher(pattern: &[u8]) -> PatternResult<RegexMatcher> { |
5633de951d34
rust-matchers: raw regular expression builder
Georges Racinet <georges.racinet@octobus.net>
parents:
51271
diff
changeset
|
792 let re = re_bytes_builder(pattern) |
44593
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
793 .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
|
794 // 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
|
795 // 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
|
796 // 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
|
797 .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
|
798 .build() |
496868f1030c
rust-matchers: use the `regex` crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44541
diff
changeset
|
799 .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
|
800 |
49581
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
801 Ok(RegexMatcher { |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
802 base: re, |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
803 local: Default::default(), |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
804 }) |
44519
52d40f8fb82d
rust-matchers: add function to generate a regex matcher function
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44353
diff
changeset
|
805 } |
52d40f8fb82d
rust-matchers: add function to generate a regex matcher function
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44353
diff
changeset
|
806 |
44521
a21881b40942
rust-matchers: add `build_regex_match` function
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44520
diff
changeset
|
807 /// 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
|
808 /// said regex formed by the given ignore patterns. |
51117
532e74ad3ff6
rust: run a clippy pass with the latest stable version
Rapha?l Gom?s <rgomes@octobus.net>
parents:
51106
diff
changeset
|
809 fn build_regex_match<'a>( |
532e74ad3ff6
rust: run a clippy pass with the latest stable version
Rapha?l Gom?s <rgomes@octobus.net>
parents:
51106
diff
changeset
|
810 ignore_patterns: &[IgnorePattern], |
50858
090658724abf
rust: de-hardcode glob_suffix
Spencer Baugh <sbaugh@janestreet.com>
parents:
50857
diff
changeset
|
811 glob_suffix: &[u8], |
51117
532e74ad3ff6
rust: run a clippy pass with the latest stable version
Rapha?l Gom?s <rgomes@octobus.net>
parents:
51106
diff
changeset
|
812 ) -> PatternResult<(Vec<u8>, IgnoreFnType<'a>)> { |
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
|
813 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
|
814 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
|
815 |
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
|
816 for pattern in ignore_patterns { |
50858
090658724abf
rust: de-hardcode glob_suffix
Spencer Baugh <sbaugh@janestreet.com>
parents:
50857
diff
changeset
|
817 if let Some(re) = build_single_regex(pattern, glob_suffix)? { |
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
|
818 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
|
819 } 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
|
820 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
|
821 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
|
822 } |
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
|
823 } |
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
|
824 |
44521
a21881b40942
rust-matchers: add `build_regex_match` function
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44520
diff
changeset
|
825 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
|
826 |
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
|
827 // 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
|
828 // (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
|
829 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
|
830 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
|
831 let func = move |filename: &HgPath| { |
49581
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
832 exact_set.contains(filename) || matcher.is_match(filename) |
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
|
833 }; |
48354
2009e3c64a53
rhg: refactor to use IgnoreFnType alias more widely
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48311
diff
changeset
|
834 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
|
835 } 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
|
836 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
|
837 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
|
838 }; |
44521
a21881b40942
rust-matchers: add `build_regex_match` function
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44520
diff
changeset
|
839 |
a21881b40942
rust-matchers: add `build_regex_match` function
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44520
diff
changeset
|
840 Ok((full_regex, func)) |
a21881b40942
rust-matchers: add `build_regex_match` function
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44520
diff
changeset
|
841 } |
a21881b40942
rust-matchers: add `build_regex_match` function
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44520
diff
changeset
|
842 |
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
|
843 /// 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
|
844 /// |
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 /// 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
|
846 /// 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
|
847 /// 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
|
848 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
|
849 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
|
850 ) -> (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
|
851 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
|
852 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
|
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 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
|
855 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
|
856 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
|
857 } = 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
|
858 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
|
859 PatternSyntax::RootGlob | PatternSyntax::Glob => { |
48311
6d69e83e6b6e
rhg: more efficient `HgPath::join`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
47409
diff
changeset
|
860 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
|
861 for p in pattern.split(|c| *c == b'/') { |
49930
e98fd81bb151
rust-clippy: fix most warnings in `hg-core`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49913
diff
changeset
|
862 if p.iter() |
e98fd81bb151
rust-clippy: fix most warnings in `hg-core`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49913
diff
changeset
|
863 .any(|c| matches!(*c, b'[' | b'{' | b'*' | b'?')) |
e98fd81bb151
rust-clippy: fix most warnings in `hg-core`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49913
diff
changeset
|
864 { |
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
|
865 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
|
866 } |
48311
6d69e83e6b6e
rhg: more efficient `HgPath::join`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
47409
diff
changeset
|
867 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
|
868 } |
48311
6d69e83e6b6e
rhg: more efficient `HgPath::join`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
47409
diff
changeset
|
869 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
|
870 } |
50692
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
871 PatternSyntax::Path |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
872 | PatternSyntax::RelPath |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
873 | PatternSyntax::FilePath => { |
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
|
874 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
|
875 &[] 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
|
876 } 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
|
877 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
|
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 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
|
880 } |
51565
2a89d2f6336f
match: rename RootFiles to RootFilesIn for more consistency
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51564
diff
changeset
|
881 PatternSyntax::RootFilesIn => { |
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
|
882 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
|
883 &[] 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
|
884 } 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
|
885 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
|
886 }; |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
887 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
|
888 } |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
889 _ => { |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
890 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
|
891 } |
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 } |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
894 (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
|
895 } |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
896 |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
897 /// 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
|
898 #[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
|
899 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
|
900 /// 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
|
901 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
|
902 /// 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
|
903 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
|
904 /// Implicitly required directories to go to items in either roots or dirs |
51567
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
905 pub parents: DirsMultiset, |
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
|
906 } |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
907 |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
908 /// 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
|
909 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
|
910 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
|
911 ) -> 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
|
912 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
|
913 |
51567
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
914 let mut parents = DirsMultiset::from_manifest(&dirs)?; |
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
|
915 |
51567
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
916 for path in &roots { |
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
917 parents.add_path(path)? |
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
918 } |
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
|
919 |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
920 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
|
921 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
|
922 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
|
923 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
|
924 }) |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
925 } |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
926 |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
927 /// 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
|
928 /// should be matched. |
49930
e98fd81bb151
rust-clippy: fix most warnings in `hg-core`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49913
diff
changeset
|
929 fn build_match<'a>( |
47379
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
930 ignore_patterns: Vec<IgnorePattern>, |
50858
090658724abf
rust: de-hardcode glob_suffix
Spencer Baugh <sbaugh@janestreet.com>
parents:
50857
diff
changeset
|
931 glob_suffix: &[u8], |
49930
e98fd81bb151
rust-clippy: fix most warnings in `hg-core`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49913
diff
changeset
|
932 ) -> PatternResult<(Vec<u8>, IgnoreFnType<'a>)> { |
e98fd81bb151
rust-clippy: fix most warnings in `hg-core`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49913
diff
changeset
|
933 let mut match_funcs: Vec<IgnoreFnType<'a>> = vec![]; |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
934 // For debugging and printing |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
935 let mut patterns = vec![]; |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
936 |
47379
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
937 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
|
938 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
939 if !subincludes.is_empty() { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
940 // Build prefix-based matcher functions for subincludes |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
941 let mut submatchers = FastHashMap::default(); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
942 let mut prefixes = vec![]; |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
943 |
47379
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
944 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
|
945 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
|
946 let match_fn = |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
947 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
|
948 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
|
949 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
|
950 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
951 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
952 let match_subinclude = move |filename: &HgPath| { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
953 for prefix in prefixes.iter() { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
954 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
|
955 if (submatchers[prefix])(rel) { |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
956 return true; |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
957 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
958 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
959 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
960 false |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
961 }; |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
962 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
963 match_funcs.push(Box::new(match_subinclude)); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
964 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
965 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
966 if !ignore_patterns.is_empty() { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
967 // 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
|
968 // with a regex. |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
969 if ignore_patterns |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
970 .iter() |
51565
2a89d2f6336f
match: rename RootFiles to RootFilesIn for more consistency
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51564
diff
changeset
|
971 .all(|k| k.syntax == PatternSyntax::RootFilesIn) |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
972 { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
973 let dirs: HashSet<_> = ignore_patterns |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
974 .iter() |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
975 .map(|k| k.pattern.to_owned()) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
976 .collect(); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
977 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
|
978 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
979 let match_func = move |path: &HgPath| -> bool { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
980 let path = path.as_bytes(); |
51271
bec6e9c108fd
matchers: use correct method for finding index in vector
Martin von Zweigbergk <martinvonz@google.com>
parents:
51117
diff
changeset
|
981 let i = path.iter().rposition(|a| *a == b'/'); |
bec6e9c108fd
matchers: use correct method for finding index in vector
Martin von Zweigbergk <martinvonz@google.com>
parents:
51117
diff
changeset
|
982 let dir = if let Some(i) = i { &path[..i] } else { b"." }; |
51117
532e74ad3ff6
rust: run a clippy pass with the latest stable version
Rapha?l Gom?s <rgomes@octobus.net>
parents:
51106
diff
changeset
|
983 dirs.contains(dir) |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
984 }; |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
985 match_funcs.push(Box::new(match_func)); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
986 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
987 patterns.extend(b"rootfilesin: "); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
988 dirs_vec.sort(); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
989 patterns.extend(dirs_vec.escaped_bytes()); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
990 } else { |
50858
090658724abf
rust: de-hardcode glob_suffix
Spencer Baugh <sbaugh@janestreet.com>
parents:
50857
diff
changeset
|
991 let (new_re, match_func) = |
090658724abf
rust: de-hardcode glob_suffix
Spencer Baugh <sbaugh@janestreet.com>
parents:
50857
diff
changeset
|
992 build_regex_match(&ignore_patterns, glob_suffix)?; |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
993 patterns = new_re; |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
994 match_funcs.push(match_func) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
995 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
996 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
997 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
998 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
|
999 (patterns, match_funcs.remove(0)) |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1000 } else { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1001 ( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1002 patterns, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1003 Box::new(move |f: &HgPath| -> bool { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1004 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
|
1005 }), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1006 ) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1007 }) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1008 } |
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 /// 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
|
1011 /// 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
|
1012 /// ignored. |
48355
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1013 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
|
1014 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
|
1015 root_dir: &Path, |
49558
363923bd51cd
dirstate-v2: hash the source of the ignore patterns as well
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49487
diff
changeset
|
1016 inspect_pattern_bytes: &mut impl FnMut(&Path, &[u8]), |
48355
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1017 ) -> PatternResult<(IncludeMatcher<'a>, Vec<PatternFileWarning>)> { |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1018 let mut all_patterns = vec![]; |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1019 let mut all_warnings = vec![]; |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1020 |
47409
0ef8231e413f
dirstate-v2: Store a hash of ignore patterns (.hgignore)
Simon Sapin <simon.sapin@octobus.net>
parents:
47379
diff
changeset
|
1021 // 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
|
1022 // 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
|
1023 // 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
|
1024 // 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
|
1025 // (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
|
1026 all_pattern_files |
0ef8231e413f
dirstate-v2: Store a hash of ignore patterns (.hgignore)
Simon Sapin <simon.sapin@octobus.net>
parents:
47379
diff
changeset
|
1027 .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
|
1028 |
47378
777c3d231913
rust: Make some file path parameters less generic
Simon Sapin <simon.sapin@octobus.net>
parents:
45607
diff
changeset
|
1029 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
|
1030 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
|
1031 pattern_file, |
0ef8231e413f
dirstate-v2: Store a hash of ignore patterns (.hgignore)
Simon Sapin <simon.sapin@octobus.net>
parents:
47379
diff
changeset
|
1032 root_dir, |
0ef8231e413f
dirstate-v2: Store a hash of ignore patterns (.hgignore)
Simon Sapin <simon.sapin@octobus.net>
parents:
47379
diff
changeset
|
1033 inspect_pattern_bytes, |
0ef8231e413f
dirstate-v2: Store a hash of ignore patterns (.hgignore)
Simon Sapin <simon.sapin@octobus.net>
parents:
47379
diff
changeset
|
1034 )?; |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1035 |
44597
e62052d0f377
rust-status: only involve ignore mechanism when needed
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44593
diff
changeset
|
1036 all_patterns.extend(patterns.to_owned()); |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1037 all_warnings.extend(warnings); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1038 } |
47379
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1039 let matcher = IncludeMatcher::new(all_patterns)?; |
48355
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1040 Ok((matcher, all_warnings)) |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1041 } |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1042 |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1043 /// 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
|
1044 /// 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
|
1045 /// ignored. |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1046 pub fn get_ignore_function<'a>( |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1047 all_pattern_files: Vec<PathBuf>, |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1048 root_dir: &Path, |
49558
363923bd51cd
dirstate-v2: hash the source of the ignore patterns as well
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49487
diff
changeset
|
1049 inspect_pattern_bytes: &mut impl FnMut(&Path, &[u8]), |
48355
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1050 ) -> PatternResult<(IgnoreFnType<'a>, Vec<PatternFileWarning>)> { |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1051 let res = |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1052 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
|
1053 res.map(|(matcher, all_warnings)| { |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1054 let res: IgnoreFnType<'a> = |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1055 Box::new(move |path: &HgPath| matcher.matches(path)); |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1056 |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1057 (res, all_warnings) |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1058 }) |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1059 } |
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 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
|
1062 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
|
1063 let RootsDirsAndParents { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1064 roots, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1065 dirs, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1066 parents, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1067 } = roots_dirs_and_parents(&ignore_patterns)?; |
49930
e98fd81bb151
rust-clippy: fix most warnings in `hg-core`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49913
diff
changeset
|
1068 let prefix = ignore_patterns.iter().all(|k| { |
e98fd81bb151
rust-clippy: fix most warnings in `hg-core`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49913
diff
changeset
|
1069 matches!(k.syntax, PatternSyntax::Path | PatternSyntax::RelPath) |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1070 }); |
50858
090658724abf
rust: de-hardcode glob_suffix
Spencer Baugh <sbaugh@janestreet.com>
parents:
50857
diff
changeset
|
1071 let (patterns, match_fn) = build_match(ignore_patterns, b"(?:/|$)")?; |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1072 |
47379
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1073 Ok(Self { |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1074 patterns, |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1075 match_fn, |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1076 prefix, |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1077 roots, |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1078 dirs, |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1079 parents, |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1080 }) |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1081 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1082 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1083 fn get_all_parents_children(&self) -> DirsChildrenMultiset { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1084 // TODO cache |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1085 let thing = self |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1086 .dirs |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1087 .iter() |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1088 .chain(self.roots.iter()) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1089 .chain(self.parents.iter()); |
51567
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
1090 DirsChildrenMultiset::new(thing, Some(self.parents.iter())) |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1091 } |
48355
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1092 |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1093 pub fn debug_get_patterns(&self) -> &[u8] { |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1094 self.patterns.as_ref() |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1095 } |
44522
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 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1098 impl<'a> Display for IncludeMatcher<'a> { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1099 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
|
1100 // 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
|
1101 // 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
|
1102 // 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
|
1103 // 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
|
1104 // 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
|
1105 // (on purpose) missing from the `includes`. |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1106 write!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1107 f, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1108 "IncludeMatcher(includes='{}')", |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1109 String::from_utf8_lossy(&self.patterns.escaped_bytes()) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1110 ) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1111 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1112 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1113 |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1114 #[cfg(test)] |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1115 mod tests { |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1116 use super::*; |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1117 use pretty_assertions::assert_eq; |
51561
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
1118 use std::collections::BTreeMap; |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
1119 use std::collections::BTreeSet; |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
1120 use std::fmt::Debug; |
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
|
1121 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
|
1122 |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
1123 #[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
|
1124 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
|
1125 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
|
1126 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
|
1127 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
|
1128 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
|
1129 ]; |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
1130 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
|
1131 |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
1132 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
|
1133 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
|
1134 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
|
1135 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
|
1136 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
|
1137 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
|
1138 ), |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
1139 ); |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
1140 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
|
1141 } |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
1142 |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
1143 #[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
|
1144 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
|
1145 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
|
1146 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
|
1147 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
|
1148 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
|
1149 ]; |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
1150 |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
1151 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
|
1152 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
|
1153 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
|
1154 |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
1155 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
|
1156 |
51567
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
1157 let parents = DirsMultiset::from_manifest(&[ |
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
1158 HgPathBuf::from_bytes(b"x"), |
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
1159 HgPathBuf::from_bytes(b"g/x"), |
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
1160 HgPathBuf::from_bytes(b"g/y"), |
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
1161 ]) |
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
1162 .unwrap(); |
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
|
1163 |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
1164 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
|
1165 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
|
1166 RootsDirsAndParents { |
483fce658e43
rust-status: refactor options into a `StatusOptions` struct
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44522
diff
changeset
|
1167 roots, |
483fce658e43
rust-status: refactor options into a `StatusOptions` struct
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44522
diff
changeset
|
1168 dirs, |
483fce658e43
rust-status: refactor options into a `StatusOptions` struct
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44522
diff
changeset
|
1169 parents |
483fce658e43
rust-status: refactor options into a `StatusOptions` struct
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44522
diff
changeset
|
1170 } |
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
|
1171 ); |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44519
diff
changeset
|
1172 } |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1173 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1174 #[test] |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1175 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
|
1176 // Visitchildrenset |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44973
diff
changeset
|
1177 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
|
1178 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
|
1179 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1180 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
1181 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
|
1182 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1183 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
|
1184 VisitChildrenSet::Set(set) |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1185 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1186 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1187 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
1188 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
|
1189 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1190 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
|
1191 VisitChildrenSet::Set(set) |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1192 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1193 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1194 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
1195 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
|
1196 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1197 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
|
1198 VisitChildrenSet::Set(set) |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1199 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1200 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1201 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1202 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
|
1203 VisitChildrenSet::Empty |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1204 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1205 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1206 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
|
1207 VisitChildrenSet::Empty |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1208 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1209 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1210 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
|
1211 VisitChildrenSet::Empty |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1212 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1213 } |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1214 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1215 #[test] |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1216 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
|
1217 let files = vec![ |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44973
diff
changeset
|
1218 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
|
1219 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
|
1220 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
|
1221 // 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
|
1222 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
|
1223 ]; |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
1224 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
|
1225 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1226 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
1227 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
|
1228 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
|
1229 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1230 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
|
1231 VisitChildrenSet::Set(set) |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1232 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1233 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1234 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
1235 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
|
1236 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
|
1237 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1238 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
|
1239 VisitChildrenSet::Set(set) |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1240 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1241 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1242 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
1243 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
|
1244 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
|
1245 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1246 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
|
1247 VisitChildrenSet::Set(set) |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1248 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1249 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1250 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
1251 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
|
1252 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1253 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
|
1254 VisitChildrenSet::Set(set) |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1255 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1256 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
1257 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
|
1258 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1259 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
|
1260 VisitChildrenSet::Set(set) |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1261 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1262 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1263 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1264 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
|
1265 VisitChildrenSet::Empty |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1266 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1267 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1268 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
|
1269 VisitChildrenSet::Empty |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1270 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1271 } |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1272 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1273 #[test] |
50862
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1274 fn test_patternmatcher() { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1275 // VisitdirPrefix |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1276 let m = PatternMatcher::new(vec![IgnorePattern::new( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1277 PatternSyntax::Path, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1278 b"dir/subdir", |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1279 Path::new(""), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1280 )]) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1281 .unwrap(); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1282 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1283 m.visit_children_set(HgPath::new(b"")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1284 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1285 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1286 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1287 m.visit_children_set(HgPath::new(b"dir")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1288 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1289 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1290 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1291 m.visit_children_set(HgPath::new(b"dir/subdir")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1292 VisitChildrenSet::Recursive |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1293 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1294 // OPT: This should probably be Recursive if its parent is? |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1295 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1296 m.visit_children_set(HgPath::new(b"dir/subdir/x")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1297 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1298 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1299 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1300 m.visit_children_set(HgPath::new(b"folder")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1301 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1302 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1303 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1304 // VisitchildrensetPrefix |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1305 let m = PatternMatcher::new(vec![IgnorePattern::new( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1306 PatternSyntax::Path, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1307 b"dir/subdir", |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1308 Path::new(""), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1309 )]) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1310 .unwrap(); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1311 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1312 m.visit_children_set(HgPath::new(b"")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1313 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1314 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1315 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1316 m.visit_children_set(HgPath::new(b"dir")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1317 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1318 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1319 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1320 m.visit_children_set(HgPath::new(b"dir/subdir")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1321 VisitChildrenSet::Recursive |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1322 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1323 // OPT: This should probably be Recursive if its parent is? |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1324 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1325 m.visit_children_set(HgPath::new(b"dir/subdir/x")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1326 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1327 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1328 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1329 m.visit_children_set(HgPath::new(b"folder")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1330 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1331 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1332 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1333 // VisitdirRootfilesin |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1334 let m = PatternMatcher::new(vec![IgnorePattern::new( |
51565
2a89d2f6336f
match: rename RootFiles to RootFilesIn for more consistency
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51564
diff
changeset
|
1335 PatternSyntax::RootFilesIn, |
50862
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1336 b"dir/subdir", |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1337 Path::new(""), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1338 )]) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1339 .unwrap(); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1340 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1341 m.visit_children_set(HgPath::new(b"dir/subdir/x")), |
51567
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
1342 VisitChildrenSet::This |
50862
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1343 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1344 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1345 m.visit_children_set(HgPath::new(b"folder")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1346 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1347 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1348 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1349 m.visit_children_set(HgPath::new(b"")), |
51567
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
1350 VisitChildrenSet::This |
50862
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1351 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1352 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1353 m.visit_children_set(HgPath::new(b"dir")), |
51567
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
1354 VisitChildrenSet::This |
50862
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1355 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1356 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1357 m.visit_children_set(HgPath::new(b"dir/subdir")), |
51567
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
1358 VisitChildrenSet::This |
50862
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1359 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1360 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1361 // VisitchildrensetRootfilesin |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1362 let m = PatternMatcher::new(vec![IgnorePattern::new( |
51565
2a89d2f6336f
match: rename RootFiles to RootFilesIn for more consistency
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51564
diff
changeset
|
1363 PatternSyntax::RootFilesIn, |
50862
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1364 b"dir/subdir", |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1365 Path::new(""), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1366 )]) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1367 .unwrap(); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1368 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1369 m.visit_children_set(HgPath::new(b"dir/subdir/x")), |
51567
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
1370 VisitChildrenSet::This |
50862
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1371 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1372 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1373 m.visit_children_set(HgPath::new(b"folder")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1374 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1375 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1376 // FIXME: These should probably be {'dir'}, {'subdir'} and This, |
51567
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
1377 // respectively |
50862
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1378 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1379 m.visit_children_set(HgPath::new(b"")), |
51567
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
1380 VisitChildrenSet::This |
50862
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1381 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1382 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1383 m.visit_children_set(HgPath::new(b"dir")), |
51567
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
1384 VisitChildrenSet::This |
50862
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1385 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1386 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1387 m.visit_children_set(HgPath::new(b"dir/subdir")), |
51567
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
1388 VisitChildrenSet::This |
50862
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1389 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1390 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1391 // VisitdirGlob |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1392 let m = PatternMatcher::new(vec![IgnorePattern::new( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1393 PatternSyntax::Glob, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1394 b"dir/z*", |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1395 Path::new(""), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1396 )]) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1397 .unwrap(); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1398 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1399 m.visit_children_set(HgPath::new(b"")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1400 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1401 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1402 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1403 m.visit_children_set(HgPath::new(b"dir")), |
51567
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
1404 VisitChildrenSet::This |
50862
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1405 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1406 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1407 m.visit_children_set(HgPath::new(b"folder")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1408 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1409 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1410 // OPT: these should probably be False. |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1411 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1412 m.visit_children_set(HgPath::new(b"dir/subdir")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1413 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1414 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1415 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1416 m.visit_children_set(HgPath::new(b"dir/subdir/x")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1417 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1418 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1419 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1420 // VisitchildrensetGlob |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1421 let m = PatternMatcher::new(vec![IgnorePattern::new( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1422 PatternSyntax::Glob, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1423 b"dir/z*", |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1424 Path::new(""), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1425 )]) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1426 .unwrap(); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1427 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1428 m.visit_children_set(HgPath::new(b"")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1429 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1430 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1431 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1432 m.visit_children_set(HgPath::new(b"folder")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1433 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1434 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1435 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1436 m.visit_children_set(HgPath::new(b"dir")), |
51567
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
1437 VisitChildrenSet::This |
50862
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1438 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1439 // OPT: these should probably be Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1440 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1441 m.visit_children_set(HgPath::new(b"dir/subdir")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1442 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1443 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1444 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1445 m.visit_children_set(HgPath::new(b"dir/subdir/x")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1446 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1447 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1448 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1449 // VisitdirFilepath |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1450 let m = PatternMatcher::new(vec![IgnorePattern::new( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1451 PatternSyntax::FilePath, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1452 b"dir/z", |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1453 Path::new(""), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1454 )]) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1455 .unwrap(); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1456 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1457 m.visit_children_set(HgPath::new(b"")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1458 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1459 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1460 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1461 m.visit_children_set(HgPath::new(b"dir")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1462 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1463 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1464 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1465 m.visit_children_set(HgPath::new(b"folder")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1466 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1467 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1468 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1469 m.visit_children_set(HgPath::new(b"dir/subdir")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1470 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1471 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1472 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1473 m.visit_children_set(HgPath::new(b"dir/subdir/x")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1474 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1475 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1476 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1477 // VisitchildrensetFilepath |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1478 let m = PatternMatcher::new(vec![IgnorePattern::new( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1479 PatternSyntax::FilePath, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1480 b"dir/z", |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1481 Path::new(""), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1482 )]) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1483 .unwrap(); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1484 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1485 m.visit_children_set(HgPath::new(b"")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1486 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1487 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1488 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1489 m.visit_children_set(HgPath::new(b"folder")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1490 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1491 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1492 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1493 m.visit_children_set(HgPath::new(b"dir")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1494 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1495 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1496 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1497 m.visit_children_set(HgPath::new(b"dir/subdir")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1498 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1499 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1500 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1501 m.visit_children_set(HgPath::new(b"dir/subdir/x")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1502 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1503 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1504 } |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1505 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50858
diff
changeset
|
1506 #[test] |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1507 fn test_includematcher() { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1508 // VisitchildrensetPrefix |
47379
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1509 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
|
1510 PatternSyntax::RelPath, |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1511 b"dir/subdir", |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1512 Path::new(""), |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1513 )]) |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1514 .unwrap(); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1515 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1516 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
1517 set.insert(HgPathBuf::from_bytes(b"dir")); |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1518 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1519 matcher.visit_children_set(HgPath::new(b"")), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1520 VisitChildrenSet::Set(set) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1521 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1522 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1523 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
1524 set.insert(HgPathBuf::from_bytes(b"subdir")); |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1525 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1526 matcher.visit_children_set(HgPath::new(b"dir")), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1527 VisitChildrenSet::Set(set) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1528 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1529 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1530 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
|
1531 VisitChildrenSet::Recursive |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1532 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1533 // 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
|
1534 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1535 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
|
1536 VisitChildrenSet::This |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1537 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1538 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1539 matcher.visit_children_set(HgPath::new(b"folder")), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1540 VisitChildrenSet::Empty |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1541 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1542 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1543 // VisitchildrensetRootfilesin |
47379
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1544 let matcher = IncludeMatcher::new(vec![IgnorePattern::new( |
51565
2a89d2f6336f
match: rename RootFiles to RootFilesIn for more consistency
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51564
diff
changeset
|
1545 PatternSyntax::RootFilesIn, |
47379
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1546 b"dir/subdir", |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1547 Path::new(""), |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1548 )]) |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1549 .unwrap(); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1550 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1551 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
1552 set.insert(HgPathBuf::from_bytes(b"dir")); |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1553 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1554 matcher.visit_children_set(HgPath::new(b"")), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1555 VisitChildrenSet::Set(set) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1556 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1557 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1558 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
1559 set.insert(HgPathBuf::from_bytes(b"subdir")); |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1560 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1561 matcher.visit_children_set(HgPath::new(b"dir")), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1562 VisitChildrenSet::Set(set) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1563 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1564 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1565 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1566 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
|
1567 VisitChildrenSet::This |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1568 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1569 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1570 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
|
1571 VisitChildrenSet::Empty |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1572 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1573 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1574 matcher.visit_children_set(HgPath::new(b"folder")), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1575 VisitChildrenSet::Empty |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1576 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1577 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1578 // VisitchildrensetGlob |
47379
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1579 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
|
1580 PatternSyntax::Glob, |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1581 b"dir/z*", |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1582 Path::new(""), |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1583 )]) |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1584 .unwrap(); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1585 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1586 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
1587 set.insert(HgPathBuf::from_bytes(b"dir")); |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1588 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1589 matcher.visit_children_set(HgPath::new(b"")), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1590 VisitChildrenSet::Set(set) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1591 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1592 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1593 matcher.visit_children_set(HgPath::new(b"folder")), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1594 VisitChildrenSet::Empty |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1595 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1596 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1597 matcher.visit_children_set(HgPath::new(b"dir")), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1598 VisitChildrenSet::This |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1599 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1600 // OPT: these should probably be set(). |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1601 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1602 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
|
1603 VisitChildrenSet::This |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1604 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1605 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1606 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
|
1607 VisitChildrenSet::This |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1608 ); |
49464
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1609 |
50692
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1610 // VisitchildrensetFilePath |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1611 let matcher = IncludeMatcher::new(vec![IgnorePattern::new( |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1612 PatternSyntax::FilePath, |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1613 b"dir/z", |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1614 Path::new(""), |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1615 )]) |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1616 .unwrap(); |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1617 |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1618 let mut set = HashSet::new(); |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1619 set.insert(HgPathBuf::from_bytes(b"dir")); |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1620 assert_eq!( |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1621 matcher.visit_children_set(HgPath::new(b"")), |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1622 VisitChildrenSet::Set(set) |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1623 ); |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1624 assert_eq!( |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1625 matcher.visit_children_set(HgPath::new(b"folder")), |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1626 VisitChildrenSet::Empty |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1627 ); |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1628 let mut set = HashSet::new(); |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1629 set.insert(HgPathBuf::from_bytes(b"z")); |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1630 assert_eq!( |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1631 matcher.visit_children_set(HgPath::new(b"dir")), |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1632 VisitChildrenSet::Set(set) |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1633 ); |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1634 // OPT: these should probably be set(). |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1635 assert_eq!( |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1636 matcher.visit_children_set(HgPath::new(b"dir/subdir")), |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1637 VisitChildrenSet::Empty |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1638 ); |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1639 assert_eq!( |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1640 matcher.visit_children_set(HgPath::new(b"dir/subdir/x")), |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1641 VisitChildrenSet::Empty |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1642 ); |
1c31b343e514
match: add `filepath:` pattern to match an exact filepath relative to the root
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
1643 |
49464
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1644 // Test multiple patterns |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1645 let matcher = IncludeMatcher::new(vec![ |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1646 IgnorePattern::new(PatternSyntax::RelPath, b"foo", Path::new("")), |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1647 IgnorePattern::new(PatternSyntax::Glob, b"g*", Path::new("")), |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1648 ]) |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1649 .unwrap(); |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1650 |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1651 assert_eq!( |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1652 matcher.visit_children_set(HgPath::new(b"")), |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1653 VisitChildrenSet::This |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1654 ); |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1655 |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1656 // Test multiple patterns |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1657 let matcher = IncludeMatcher::new(vec![IgnorePattern::new( |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1658 PatternSyntax::Glob, |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1659 b"**/*.exe", |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1660 Path::new(""), |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1661 )]) |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1662 .unwrap(); |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1663 |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1664 assert_eq!( |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1665 matcher.visit_children_set(HgPath::new(b"")), |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1666 VisitChildrenSet::This |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1667 ); |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1668 } |
49347
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1669 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1670 #[test] |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1671 fn test_unionmatcher() { |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1672 // Path + Rootfiles |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1673 let m1 = IncludeMatcher::new(vec![IgnorePattern::new( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1674 PatternSyntax::RelPath, |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1675 b"dir/subdir", |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1676 Path::new(""), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1677 )]) |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1678 .unwrap(); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1679 let m2 = IncludeMatcher::new(vec![IgnorePattern::new( |
51565
2a89d2f6336f
match: rename RootFiles to RootFilesIn for more consistency
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51564
diff
changeset
|
1680 PatternSyntax::RootFilesIn, |
49347
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1681 b"dir", |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1682 Path::new(""), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1683 )]) |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1684 .unwrap(); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1685 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
|
1686 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1687 let mut set = HashSet::new(); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1688 set.insert(HgPathBuf::from_bytes(b"dir")); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1689 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1690 matcher.visit_children_set(HgPath::new(b"")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1691 VisitChildrenSet::Set(set) |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1692 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1693 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1694 matcher.visit_children_set(HgPath::new(b"dir")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1695 VisitChildrenSet::This |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1696 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1697 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1698 matcher.visit_children_set(HgPath::new(b"dir/subdir")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1699 VisitChildrenSet::Recursive |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1700 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1701 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1702 matcher.visit_children_set(HgPath::new(b"dir/foo")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1703 VisitChildrenSet::Empty |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1704 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1705 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1706 matcher.visit_children_set(HgPath::new(b"folder")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1707 VisitChildrenSet::Empty |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1708 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1709 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1710 matcher.visit_children_set(HgPath::new(b"folder")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1711 VisitChildrenSet::Empty |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1712 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1713 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1714 // 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
|
1715 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1716 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
|
1717 VisitChildrenSet::This |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1718 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1719 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1720 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
|
1721 VisitChildrenSet::This |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1722 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1723 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1724 // Path + unrelated Path |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1725 let m1 = IncludeMatcher::new(vec![IgnorePattern::new( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1726 PatternSyntax::RelPath, |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1727 b"dir/subdir", |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1728 Path::new(""), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1729 )]) |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1730 .unwrap(); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1731 let m2 = IncludeMatcher::new(vec![IgnorePattern::new( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1732 PatternSyntax::RelPath, |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1733 b"folder", |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1734 Path::new(""), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1735 )]) |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1736 .unwrap(); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1737 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
|
1738 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1739 let mut set = HashSet::new(); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1740 set.insert(HgPathBuf::from_bytes(b"folder")); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1741 set.insert(HgPathBuf::from_bytes(b"dir")); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1742 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1743 matcher.visit_children_set(HgPath::new(b"")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1744 VisitChildrenSet::Set(set) |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1745 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1746 let mut set = HashSet::new(); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1747 set.insert(HgPathBuf::from_bytes(b"subdir")); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1748 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1749 matcher.visit_children_set(HgPath::new(b"dir")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1750 VisitChildrenSet::Set(set) |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1751 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1752 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1753 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1754 matcher.visit_children_set(HgPath::new(b"dir/subdir")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1755 VisitChildrenSet::Recursive |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1756 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1757 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1758 matcher.visit_children_set(HgPath::new(b"dir/foo")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1759 VisitChildrenSet::Empty |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1760 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1761 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1762 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1763 matcher.visit_children_set(HgPath::new(b"folder")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1764 VisitChildrenSet::Recursive |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1765 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1766 // 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
|
1767 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1768 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
|
1769 VisitChildrenSet::This |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1770 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1771 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1772 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
|
1773 VisitChildrenSet::This |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1774 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1775 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1776 // Path + subpath |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1777 let m1 = IncludeMatcher::new(vec![IgnorePattern::new( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1778 PatternSyntax::RelPath, |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1779 b"dir/subdir/x", |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1780 Path::new(""), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1781 )]) |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1782 .unwrap(); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1783 let m2 = IncludeMatcher::new(vec![IgnorePattern::new( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1784 PatternSyntax::RelPath, |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1785 b"dir/subdir", |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1786 Path::new(""), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1787 )]) |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1788 .unwrap(); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1789 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
|
1790 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1791 let mut set = HashSet::new(); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1792 set.insert(HgPathBuf::from_bytes(b"dir")); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1793 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1794 matcher.visit_children_set(HgPath::new(b"")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1795 VisitChildrenSet::Set(set) |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1796 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1797 let mut set = HashSet::new(); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1798 set.insert(HgPathBuf::from_bytes(b"subdir")); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1799 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1800 matcher.visit_children_set(HgPath::new(b"dir")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1801 VisitChildrenSet::Set(set) |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1802 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1803 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1804 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1805 matcher.visit_children_set(HgPath::new(b"dir/subdir")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1806 VisitChildrenSet::Recursive |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1807 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1808 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1809 matcher.visit_children_set(HgPath::new(b"dir/foo")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1810 VisitChildrenSet::Empty |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1811 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1812 |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1813 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1814 matcher.visit_children_set(HgPath::new(b"folder")), |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1815 VisitChildrenSet::Empty |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1816 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1817 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1818 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
|
1819 VisitChildrenSet::Recursive |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1820 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1821 // OPT: this should probably be 'all' not 'this'. |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1822 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1823 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
|
1824 VisitChildrenSet::This |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1825 ); |
b508cffd3c04
rust: add UnionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1826 } |
49349
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1827 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1828 #[test] |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1829 fn test_intersectionmatcher() { |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1830 // Include path + Include rootfiles |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1831 let m1 = Box::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1832 IncludeMatcher::new(vec![IgnorePattern::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1833 PatternSyntax::RelPath, |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1834 b"dir/subdir", |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1835 Path::new(""), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1836 )]) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1837 .unwrap(), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1838 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1839 let m2 = Box::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1840 IncludeMatcher::new(vec![IgnorePattern::new( |
51565
2a89d2f6336f
match: rename RootFiles to RootFilesIn for more consistency
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51564
diff
changeset
|
1841 PatternSyntax::RootFilesIn, |
49349
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1842 b"dir", |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1843 Path::new(""), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1844 )]) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1845 .unwrap(), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1846 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1847 let matcher = IntersectionMatcher::new(m1, m2); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1848 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1849 let mut set = HashSet::new(); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1850 set.insert(HgPathBuf::from_bytes(b"dir")); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1851 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1852 matcher.visit_children_set(HgPath::new(b"")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1853 VisitChildrenSet::Set(set) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1854 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1855 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1856 matcher.visit_children_set(HgPath::new(b"dir")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1857 VisitChildrenSet::This |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1858 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1859 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1860 matcher.visit_children_set(HgPath::new(b"dir/subdir")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1861 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1862 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1863 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1864 matcher.visit_children_set(HgPath::new(b"dir/foo")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1865 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1866 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1867 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1868 matcher.visit_children_set(HgPath::new(b"folder")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1869 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1870 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1871 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1872 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
|
1873 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1874 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1875 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1876 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
|
1877 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1878 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1879 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1880 // Non intersecting paths |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1881 let m1 = Box::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1882 IncludeMatcher::new(vec![IgnorePattern::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1883 PatternSyntax::RelPath, |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1884 b"dir/subdir", |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1885 Path::new(""), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1886 )]) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1887 .unwrap(), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1888 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1889 let m2 = Box::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1890 IncludeMatcher::new(vec![IgnorePattern::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1891 PatternSyntax::RelPath, |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1892 b"folder", |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1893 Path::new(""), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1894 )]) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1895 .unwrap(), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1896 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1897 let matcher = IntersectionMatcher::new(m1, m2); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1898 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1899 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1900 matcher.visit_children_set(HgPath::new(b"")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1901 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1902 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1903 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1904 matcher.visit_children_set(HgPath::new(b"dir")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1905 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1906 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1907 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1908 matcher.visit_children_set(HgPath::new(b"dir/subdir")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1909 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1910 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1911 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1912 matcher.visit_children_set(HgPath::new(b"dir/foo")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1913 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1914 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1915 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1916 matcher.visit_children_set(HgPath::new(b"folder")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1917 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1918 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1919 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1920 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
|
1921 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1922 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1923 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1924 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
|
1925 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1926 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1927 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1928 // Nested paths |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1929 let m1 = Box::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1930 IncludeMatcher::new(vec![IgnorePattern::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1931 PatternSyntax::RelPath, |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1932 b"dir/subdir/x", |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1933 Path::new(""), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1934 )]) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1935 .unwrap(), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1936 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1937 let m2 = Box::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1938 IncludeMatcher::new(vec![IgnorePattern::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1939 PatternSyntax::RelPath, |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1940 b"dir/subdir", |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1941 Path::new(""), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1942 )]) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1943 .unwrap(), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1944 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1945 let matcher = IntersectionMatcher::new(m1, m2); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1946 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1947 let mut set = HashSet::new(); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1948 set.insert(HgPathBuf::from_bytes(b"dir")); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1949 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1950 matcher.visit_children_set(HgPath::new(b"")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1951 VisitChildrenSet::Set(set) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1952 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1953 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1954 let mut set = HashSet::new(); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1955 set.insert(HgPathBuf::from_bytes(b"subdir")); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1956 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1957 matcher.visit_children_set(HgPath::new(b"dir")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1958 VisitChildrenSet::Set(set) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1959 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1960 let mut set = HashSet::new(); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1961 set.insert(HgPathBuf::from_bytes(b"x")); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1962 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1963 matcher.visit_children_set(HgPath::new(b"dir/subdir")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1964 VisitChildrenSet::Set(set) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1965 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1966 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1967 matcher.visit_children_set(HgPath::new(b"dir/foo")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1968 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1969 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1970 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1971 matcher.visit_children_set(HgPath::new(b"folder")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1972 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1973 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1974 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1975 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
|
1976 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1977 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1978 // OPT: this should probably be 'all' not 'this'. |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1979 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1980 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
|
1981 VisitChildrenSet::This |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1982 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1983 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1984 // Diverging paths |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1985 let m1 = Box::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1986 IncludeMatcher::new(vec![IgnorePattern::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1987 PatternSyntax::RelPath, |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1988 b"dir/subdir/x", |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1989 Path::new(""), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1990 )]) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1991 .unwrap(), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1992 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1993 let m2 = Box::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1994 IncludeMatcher::new(vec![IgnorePattern::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1995 PatternSyntax::RelPath, |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1996 b"dir/subdir/z", |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1997 Path::new(""), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1998 )]) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1999 .unwrap(), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2000 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2001 let matcher = IntersectionMatcher::new(m1, m2); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2002 |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2003 // 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
|
2004 let mut set = HashSet::new(); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2005 set.insert(HgPathBuf::from_bytes(b"dir")); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2006 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2007 matcher.visit_children_set(HgPath::new(b"")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2008 VisitChildrenSet::Set(set) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2009 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2010 // 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
|
2011 let mut set = HashSet::new(); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2012 set.insert(HgPathBuf::from_bytes(b"subdir")); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2013 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2014 matcher.visit_children_set(HgPath::new(b"dir")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2015 VisitChildrenSet::Set(set) |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2016 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2017 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2018 matcher.visit_children_set(HgPath::new(b"dir/subdir")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2019 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2020 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2021 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2022 matcher.visit_children_set(HgPath::new(b"dir/foo")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2023 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2024 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2025 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2026 matcher.visit_children_set(HgPath::new(b"folder")), |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2027 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2028 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2029 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2030 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
|
2031 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2032 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2033 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2034 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
|
2035 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2036 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2037 } |
49478
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2038 |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2039 #[test] |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2040 fn test_differencematcher() { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2041 // Two alwaysmatchers should function like a nevermatcher |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2042 let m1 = AlwaysMatcher; |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2043 let m2 = AlwaysMatcher; |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2044 let matcher = DifferenceMatcher::new(Box::new(m1), Box::new(m2)); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2045 |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2046 for case in &[ |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2047 &b""[..], |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2048 b"dir", |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2049 b"dir/subdir", |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2050 b"dir/subdir/z", |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2051 b"dir/foo", |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2052 b"dir/subdir/x", |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2053 b"folder", |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2054 ] { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2055 assert_eq!( |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2056 matcher.visit_children_set(HgPath::new(case)), |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2057 VisitChildrenSet::Empty |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2058 ); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2059 } |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2060 |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2061 // One always and one never should behave the same as an always |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2062 let m1 = AlwaysMatcher; |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2063 let m2 = NeverMatcher; |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2064 let matcher = DifferenceMatcher::new(Box::new(m1), Box::new(m2)); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2065 |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2066 for case in &[ |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2067 &b""[..], |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2068 b"dir", |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2069 b"dir/subdir", |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2070 b"dir/subdir/z", |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2071 b"dir/foo", |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2072 b"dir/subdir/x", |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2073 b"folder", |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2074 ] { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2075 assert_eq!( |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2076 matcher.visit_children_set(HgPath::new(case)), |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2077 VisitChildrenSet::Recursive |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2078 ); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2079 } |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2080 |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2081 // Two include matchers |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2082 let m1 = Box::new( |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2083 IncludeMatcher::new(vec![IgnorePattern::new( |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2084 PatternSyntax::RelPath, |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2085 b"dir/subdir", |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2086 Path::new("/repo"), |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2087 )]) |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2088 .unwrap(), |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2089 ); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2090 let m2 = Box::new( |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2091 IncludeMatcher::new(vec![IgnorePattern::new( |
51565
2a89d2f6336f
match: rename RootFiles to RootFilesIn for more consistency
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51564
diff
changeset
|
2092 PatternSyntax::RootFilesIn, |
49478
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2093 b"dir", |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2094 Path::new("/repo"), |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2095 )]) |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2096 .unwrap(), |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2097 ); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2098 |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2099 let matcher = DifferenceMatcher::new(m1, m2); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2100 |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2101 let mut set = HashSet::new(); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2102 set.insert(HgPathBuf::from_bytes(b"dir")); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2103 assert_eq!( |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2104 matcher.visit_children_set(HgPath::new(b"")), |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2105 VisitChildrenSet::Set(set) |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2106 ); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2107 |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2108 let mut set = HashSet::new(); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2109 set.insert(HgPathBuf::from_bytes(b"subdir")); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2110 assert_eq!( |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2111 matcher.visit_children_set(HgPath::new(b"dir")), |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2112 VisitChildrenSet::Set(set) |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2113 ); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2114 assert_eq!( |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2115 matcher.visit_children_set(HgPath::new(b"dir/subdir")), |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2116 VisitChildrenSet::Recursive |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2117 ); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2118 assert_eq!( |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2119 matcher.visit_children_set(HgPath::new(b"dir/foo")), |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2120 VisitChildrenSet::Empty |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2121 ); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2122 assert_eq!( |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2123 matcher.visit_children_set(HgPath::new(b"folder")), |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2124 VisitChildrenSet::Empty |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2125 ); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2126 assert_eq!( |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2127 matcher.visit_children_set(HgPath::new(b"dir/subdir/z")), |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2128 VisitChildrenSet::This |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2129 ); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2130 assert_eq!( |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2131 matcher.visit_children_set(HgPath::new(b"dir/subdir/x")), |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2132 VisitChildrenSet::This |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2133 ); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2134 } |
51561
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2135 |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2136 mod invariants { |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2137 pub mod visit_children_set { |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2138 |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2139 use crate::{ |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2140 matchers::{tests::Tree, Matcher, VisitChildrenSet}, |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2141 utils::hg_path::HgPath, |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2142 }; |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2143 |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2144 #[allow(dead_code)] |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2145 #[derive(Debug)] |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2146 struct Error<'a, M> { |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2147 matcher: &'a M, |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2148 path: &'a HgPath, |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2149 matching: &'a Tree, |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2150 visit_children_set: &'a VisitChildrenSet, |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2151 } |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2152 |
51568
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2153 fn holds( |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2154 matching: &Tree, |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2155 not_matching: &Tree, |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2156 vcs: &VisitChildrenSet, |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2157 ) -> bool { |
51561
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2158 match vcs { |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2159 VisitChildrenSet::Empty => matching.is_empty(), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2160 VisitChildrenSet::This => { |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2161 // `This` does not come with any obligations. |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2162 true |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2163 } |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2164 VisitChildrenSet::Recursive => { |
51568
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2165 // `Recursive` requires that *everything* in the |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2166 // subtree matches. This |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2167 // requirement is relied on for example in |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2168 // DifferenceMatcher implementation. |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2169 not_matching.is_empty() |
51561
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2170 } |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2171 VisitChildrenSet::Set(allowed_children) => { |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2172 // `allowed_children` does not distinguish between |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2173 // files and directories: if it's not included, it |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2174 // must not be matched. |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2175 for k in matching.dirs.keys() { |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2176 if !(allowed_children.contains(k)) { |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2177 return false; |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2178 } |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2179 } |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2180 for k in matching.files.iter() { |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2181 if !(allowed_children.contains(k)) { |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2182 return false; |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2183 } |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2184 } |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2185 true |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2186 } |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2187 } |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2188 } |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2189 |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2190 pub fn check<M: Matcher + std::fmt::Debug>( |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2191 matcher: &M, |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2192 path: &HgPath, |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2193 matching: &Tree, |
51568
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2194 not_matching: &Tree, |
51561
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2195 visit_children_set: &VisitChildrenSet, |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2196 ) { |
51568
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2197 if !holds(matching, not_matching, visit_children_set) { |
51561
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2198 panic!( |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2199 "{:#?}", |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2200 Error { |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2201 matcher, |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2202 path, |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2203 visit_children_set, |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2204 matching |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2205 } |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2206 ) |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2207 } |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2208 } |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2209 } |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2210 } |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2211 |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2212 #[derive(Debug, Clone)] |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2213 pub struct Tree { |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2214 files: BTreeSet<HgPathBuf>, |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2215 dirs: BTreeMap<HgPathBuf, Tree>, |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2216 } |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2217 |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2218 impl Tree { |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2219 fn len(&self) -> usize { |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2220 let mut n = 0; |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2221 n += self.files.len(); |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2222 for d in self.dirs.values() { |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2223 n += d.len(); |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2224 } |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2225 n |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2226 } |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2227 |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2228 fn is_empty(&self) -> bool { |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2229 self.files.is_empty() && self.dirs.is_empty() |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2230 } |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2231 |
51568
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2232 fn make( |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2233 files: BTreeSet<HgPathBuf>, |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2234 dirs: BTreeMap<HgPathBuf, Tree>, |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2235 ) -> Self { |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2236 Self { |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2237 files, |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2238 dirs: dirs |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2239 .into_iter() |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2240 .filter(|(_k, v)| (!(v.is_empty()))) |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2241 .collect(), |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2242 } |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2243 } |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2244 |
51561
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2245 fn filter_and_check<M: Matcher + Debug>( |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2246 &self, |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2247 m: &M, |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2248 path: &HgPath, |
51568
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2249 ) -> (Self, Self) { |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2250 let (files1, files2): (BTreeSet<HgPathBuf>, BTreeSet<HgPathBuf>) = |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2251 self.files |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2252 .iter() |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2253 .map(|v| v.to_owned()) |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2254 .partition(|v| m.matches(&path.join(v))); |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2255 let (dirs1, dirs2): ( |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2256 BTreeMap<HgPathBuf, Tree>, |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2257 BTreeMap<HgPathBuf, Tree>, |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2258 ) = self |
51561
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2259 .dirs |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2260 .iter() |
51568
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2261 .map(|(k, v)| { |
51561
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2262 let path = path.join(k); |
51568
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2263 let (t1, t2) = v.filter_and_check(m, &path); |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2264 ((k.clone(), t1), (k.clone(), t2)) |
51561
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2265 }) |
51568
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2266 .unzip(); |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2267 let matching = Self::make(files1, dirs1); |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2268 let not_matching = Self::make(files2, dirs2); |
51561
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2269 let vcs = m.visit_children_set(path); |
51568
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2270 invariants::visit_children_set::check( |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2271 m, |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2272 path, |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2273 &matching, |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2274 ¬_matching, |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2275 &vcs, |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2276 ); |
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2277 (matching, not_matching) |
51561
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2278 } |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2279 |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2280 fn check_matcher<M: Matcher + Debug>( |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2281 &self, |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2282 m: &M, |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2283 expect_count: usize, |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2284 ) { |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2285 let res = self.filter_and_check(m, &HgPathBuf::new()); |
51568
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2286 if expect_count != res.0.len() { |
51561
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2287 eprintln!( |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2288 "warning: expected {} matches, got {} for {:#?}", |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2289 expect_count, |
51568
74230abb2504
match: strengthen visit_children_set invariant, Recursive means "all files"
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51567
diff
changeset
|
2290 res.0.len(), |
51561
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2291 m |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2292 ); |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2293 } |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2294 } |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2295 } |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2296 |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2297 fn mkdir(children: &[(&[u8], &Tree)]) -> Tree { |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2298 let p = HgPathBuf::from_bytes; |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2299 let names = [ |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2300 p(b"a"), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2301 p(b"b.txt"), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2302 p(b"file.txt"), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2303 p(b"c.c"), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2304 p(b"c.h"), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2305 p(b"dir1"), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2306 p(b"dir2"), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2307 p(b"subdir"), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2308 ]; |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2309 let files: BTreeSet<HgPathBuf> = BTreeSet::from(names); |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2310 let dirs = children |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2311 .iter() |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2312 .map(|(name, t)| (p(name), (*t).clone())) |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2313 .collect(); |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2314 Tree { files, dirs } |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2315 } |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2316 |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2317 fn make_example_tree() -> Tree { |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2318 let leaf = mkdir(&[]); |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2319 let abc = mkdir(&[(b"d", &leaf)]); |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2320 let ab = mkdir(&[(b"c", &abc)]); |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2321 let a = mkdir(&[(b"b", &ab)]); |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2322 let dir = mkdir(&[(b"subdir", &leaf), (b"subdir.c", &leaf)]); |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2323 mkdir(&[(b"dir", &dir), (b"dir1", &dir), (b"dir2", &dir), (b"a", &a)]) |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2324 } |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2325 |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2326 #[test] |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2327 fn test_pattern_matcher_visit_children_set() { |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2328 let tree = make_example_tree(); |
51563
529a655874fb
matchers: fix the bug in rust PatternMatcher that made it cut off early
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51561
diff
changeset
|
2329 let pattern_dir1_glob_c = |
51561
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2330 PatternMatcher::new(vec![IgnorePattern::new( |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2331 PatternSyntax::Glob, |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2332 b"dir1/*.c", |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2333 Path::new(""), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2334 )]) |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2335 .unwrap(); |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2336 let pattern_dir1 = || { |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2337 PatternMatcher::new(vec![IgnorePattern::new( |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2338 PatternSyntax::Path, |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2339 b"dir1", |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2340 Path::new(""), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2341 )]) |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2342 .unwrap() |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2343 }; |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2344 let pattern_dir1_a = PatternMatcher::new(vec![IgnorePattern::new( |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2345 PatternSyntax::Glob, |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2346 b"dir1/a", |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2347 Path::new(""), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2348 )]) |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2349 .unwrap(); |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2350 let pattern_relglob_c = || { |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2351 PatternMatcher::new(vec![IgnorePattern::new( |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2352 PatternSyntax::RelGlob, |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2353 b"*.c", |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2354 Path::new(""), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2355 )]) |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2356 .unwrap() |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2357 }; |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2358 let files = vec![HgPathBuf::from_bytes(b"dir/subdir/b.txt")]; |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2359 let file_dir_subdir_b = FileMatcher::new(files).unwrap(); |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2360 |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2361 let files = vec![ |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2362 HgPathBuf::from_bytes(b"file.txt"), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2363 HgPathBuf::from_bytes(b"a/file.txt"), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2364 HgPathBuf::from_bytes(b"a/b/file.txt"), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2365 // No file in a/b/c |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2366 HgPathBuf::from_bytes(b"a/b/c/d/file.txt"), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2367 ]; |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2368 let file_abcdfile = FileMatcher::new(files).unwrap(); |
51567
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
2369 let rootfilesin_dir = PatternMatcher::new(vec![IgnorePattern::new( |
51565
2a89d2f6336f
match: rename RootFiles to RootFilesIn for more consistency
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51564
diff
changeset
|
2370 PatternSyntax::RootFilesIn, |
51561
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2371 b"dir", |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2372 Path::new(""), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2373 )]) |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2374 .unwrap(); |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2375 |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2376 let pattern_filepath_dir_subdir = |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2377 PatternMatcher::new(vec![IgnorePattern::new( |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2378 PatternSyntax::FilePath, |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2379 b"dir/subdir", |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2380 Path::new(""), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2381 )]) |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2382 .unwrap(); |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2383 |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2384 let include_dir_subdir = |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2385 IncludeMatcher::new(vec![IgnorePattern::new( |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2386 PatternSyntax::RelPath, |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2387 b"dir/subdir", |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2388 Path::new(""), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2389 )]) |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2390 .unwrap(); |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2391 |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2392 let more_includematchers = [ |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2393 IncludeMatcher::new(vec![IgnorePattern::new( |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2394 PatternSyntax::Glob, |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2395 b"dir/s*", |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2396 Path::new(""), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2397 )]) |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2398 .unwrap(), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2399 // Test multiple patterns |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2400 IncludeMatcher::new(vec![ |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2401 IgnorePattern::new( |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2402 PatternSyntax::RelPath, |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2403 b"dir", |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2404 Path::new(""), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2405 ), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2406 IgnorePattern::new(PatternSyntax::Glob, b"s*", Path::new("")), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2407 ]) |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2408 .unwrap(), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2409 // Test multiple patterns |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2410 IncludeMatcher::new(vec![IgnorePattern::new( |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2411 PatternSyntax::Glob, |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2412 b"**/*.c", |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2413 Path::new(""), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2414 )]) |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2415 .unwrap(), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2416 ]; |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2417 |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2418 tree.check_matcher(&pattern_dir1(), 25); |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2419 tree.check_matcher(&pattern_dir1_a, 1); |
51563
529a655874fb
matchers: fix the bug in rust PatternMatcher that made it cut off early
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51561
diff
changeset
|
2420 tree.check_matcher(&pattern_dir1_glob_c, 2); |
51561
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2421 tree.check_matcher(&pattern_relglob_c(), 14); |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2422 tree.check_matcher(&AlwaysMatcher, 112); |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2423 tree.check_matcher(&NeverMatcher, 0); |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2424 tree.check_matcher( |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2425 &IntersectionMatcher::new( |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2426 Box::new(pattern_relglob_c()), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2427 Box::new(pattern_dir1()), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2428 ), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2429 3, |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2430 ); |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2431 tree.check_matcher( |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2432 &UnionMatcher::new(vec![ |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2433 Box::new(pattern_relglob_c()), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2434 Box::new(pattern_dir1()), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2435 ]), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2436 36, |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2437 ); |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2438 tree.check_matcher( |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2439 &DifferenceMatcher::new( |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2440 Box::new(pattern_relglob_c()), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2441 Box::new(pattern_dir1()), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2442 ), |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2443 11, |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2444 ); |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2445 tree.check_matcher(&file_dir_subdir_b, 1); |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2446 tree.check_matcher(&file_abcdfile, 4); |
51567
b39057b713b1
match: fix the rust-side bug in visit_children_set for rootfilesin matchers
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51565
diff
changeset
|
2447 tree.check_matcher(&rootfilesin_dir, 8); |
51561
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2448 tree.check_matcher(&pattern_filepath_dir_subdir, 1); |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2449 tree.check_matcher(&include_dir_subdir, 9); |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2450 tree.check_matcher(&more_includematchers[0], 17); |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2451 tree.check_matcher(&more_includematchers[1], 25); |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2452 tree.check_matcher(&more_includematchers[2], 35); |
f5c367dc6541
tests: add tests and document expectations from visit_children_set in rust
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51468
diff
changeset
|
2453 } |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44006
diff
changeset
|
2454 } |