Mercurial > hg
annotate rust/hg-core/src/matchers.rs @ 51470:406b413e3cf2 stable
rust-filepatterns: export glob_to_re function
Making this function public should not risk freezing the internal API,
and it can be useful for all downstream code that needs to perform
glob matching against byte strings, such as RHGitaly where it will
be useful to match on branches and tags.
author | Georges Racinet <georges.racinet@octobus.net> |
---|---|
date | Mon, 11 Mar 2024 13:23:18 +0100 |
parents | bec6e9c108fd |
children | 5633de951d34 |
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 |
51109
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
50865
diff
changeset
|
10 use format_bytes::format_bytes; |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
50865
diff
changeset
|
11 use once_cell::sync::OnceCell; |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
50865
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::{ |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
20 files::find_dirs, |
50860
f50e71fdfcb4
rust: improve the type on DirsMultiset::from_manifest
Spencer Baugh <sbaugh@janestreet.com>
parents:
50856
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 }, |
50860
f50e71fdfcb4
rust: improve the type on DirsMultiset::from_manifest
Spencer Baugh <sbaugh@janestreet.com>
parents:
50856
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}; |
51109
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
50865
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, |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
38 /// Only visit this directory |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
39 This, |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
40 /// Visit this directory and these subdirectories |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
41 /// 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
|
42 Set(HashSet<HgPathBuf>), |
43438
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
43 /// Visit this directory and all subdirectories |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
44 Recursive, |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
45 } |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
46 |
49487
e8481625c582
rust: add Debug constraint to Matcher trait
Raphaël Gomès <rgomes@octobus.net>
parents:
49478
diff
changeset
|
47 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
|
48 /// Explicitly listed files |
49345
137d6bb71937
rust: use owned types in `Matcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
48355
diff
changeset
|
49 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
|
50 /// 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
|
51 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
|
52 /// 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
|
53 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
|
54 /// 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
|
55 /// 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
|
56 /// 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
|
57 /// 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
|
58 /// patterns. |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
59 /// |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
60 /// # Example |
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 /// 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
|
63 /// 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
|
64 /// 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
|
65 /// are not). |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
66 /// |
44006
72bced4f2936
rust-matchers: fixing cargo doc
Georges Racinet <georges.racinet@octobus.net>
parents:
43914
diff
changeset
|
67 /// ```text |
43438
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
68 /// ```ignore |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
69 /// '' -> {'foo', 'qux'} |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
70 /// 'baz' -> set() |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
71 /// 'foo' -> {'bar'} |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
72 /// // 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
|
73 /// // 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
|
74 /// // 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
|
75 /// // `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
|
76 /// 'foo/bar' -> 'this' |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
77 /// 'qux' -> 'this' |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
78 /// ``` |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
79 /// # Important |
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 /// 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
|
82 /// 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
|
83 /// 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
|
84 /// 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
|
85 /// 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
|
86 /// it may return `VisitChildrenSet::This`. |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
87 /// 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
|
88 /// 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
|
89 /// 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
|
90 /// `VisitChildrenSet::This`). |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Raphaël Gomès <rgomes@octobus.net>
parents:
44973
diff
changeset
|
91 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
|
92 /// 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
|
93 /// 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
|
94 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
|
95 /// 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
|
96 /// might be possible. |
43611
27c25c0dc967
rust-matchers: remove default implementations for `Matcher` trait
Raphaël Gomès <rgomes@octobus.net>
parents:
43438
diff
changeset
|
97 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
|
98 } |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
99 |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
100 /// Matches everything. |
43834
542c8b277261
rust-matchers: add doctests for `AlwaysMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
43832
diff
changeset
|
101 ///``` |
542c8b277261
rust-matchers: add doctests for `AlwaysMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
43832
diff
changeset
|
102 /// 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
|
103 /// |
542c8b277261
rust-matchers: add doctests for `AlwaysMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
43832
diff
changeset
|
104 /// let matcher = AlwaysMatcher; |
542c8b277261
rust-matchers: add doctests for `AlwaysMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
43832
diff
changeset
|
105 /// |
43914
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Raphaël Gomès <rgomes@octobus.net>
parents:
43863
diff
changeset
|
106 /// 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
|
107 /// 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
|
108 /// 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
|
109 /// 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
|
110 /// ``` |
43438
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
111 #[derive(Debug)] |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
112 pub struct AlwaysMatcher; |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
113 |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
114 impl Matcher for AlwaysMatcher { |
49345
137d6bb71937
rust: use owned types in `Matcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
48355
diff
changeset
|
115 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
|
116 None |
43438
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
117 } |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Raphaël Gomès <rgomes@octobus.net>
parents:
44973
diff
changeset
|
118 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
|
119 false |
27c25c0dc967
rust-matchers: remove default implementations for `Matcher` trait
Raphaël Gomès <rgomes@octobus.net>
parents:
43438
diff
changeset
|
120 } |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Raphaël Gomès <rgomes@octobus.net>
parents:
44973
diff
changeset
|
121 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
|
122 true |
27c25c0dc967
rust-matchers: remove default implementations for `Matcher` trait
Raphaël Gomès <rgomes@octobus.net>
parents:
43438
diff
changeset
|
123 } |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Raphaël Gomès <rgomes@octobus.net>
parents:
44973
diff
changeset
|
124 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
|
125 VisitChildrenSet::Recursive |
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
126 } |
43611
27c25c0dc967
rust-matchers: remove default implementations for `Matcher` trait
Raphaël Gomès <rgomes@octobus.net>
parents:
43438
diff
changeset
|
127 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
|
128 true |
27c25c0dc967
rust-matchers: remove default implementations for `Matcher` trait
Raphaël Gomès <rgomes@octobus.net>
parents:
43438
diff
changeset
|
129 } |
27c25c0dc967
rust-matchers: remove default implementations for `Matcher` trait
Raphaël Gomès <rgomes@octobus.net>
parents:
43438
diff
changeset
|
130 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
|
131 false |
27c25c0dc967
rust-matchers: remove default implementations for `Matcher` trait
Raphaël Gomès <rgomes@octobus.net>
parents:
43438
diff
changeset
|
132 } |
43438
a77d4fe347a4
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
133 } |
43914
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Raphaël Gomès <rgomes@octobus.net>
parents:
43863
diff
changeset
|
134 |
49351
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49349
diff
changeset
|
135 /// Matches nothing. |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49349
diff
changeset
|
136 #[derive(Debug)] |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49349
diff
changeset
|
137 pub struct NeverMatcher; |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49349
diff
changeset
|
138 |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49349
diff
changeset
|
139 impl Matcher for NeverMatcher { |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49349
diff
changeset
|
140 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
|
141 None |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49349
diff
changeset
|
142 } |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49349
diff
changeset
|
143 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
|
144 false |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49349
diff
changeset
|
145 } |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49349
diff
changeset
|
146 fn matches(&self, _filename: &HgPath) -> bool { |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49349
diff
changeset
|
147 false |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49349
diff
changeset
|
148 } |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49349
diff
changeset
|
149 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
|
150 VisitChildrenSet::Empty |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49349
diff
changeset
|
151 } |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49349
diff
changeset
|
152 fn matches_everything(&self) -> bool { |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49349
diff
changeset
|
153 false |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49349
diff
changeset
|
154 } |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49349
diff
changeset
|
155 fn is_exact(&self) -> bool { |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49349
diff
changeset
|
156 true |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49349
diff
changeset
|
157 } |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49349
diff
changeset
|
158 } |
97dcd6906e6f
rust-dirstate: add support for nevermatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49349
diff
changeset
|
159 |
43914
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Raphaël Gomès <rgomes@octobus.net>
parents:
43863
diff
changeset
|
160 /// 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
|
161 /// patterns. |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Raphaël Gomès <rgomes@octobus.net>
parents:
43863
diff
changeset
|
162 /// |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Raphaël Gomès <rgomes@octobus.net>
parents:
43863
diff
changeset
|
163 ///``` |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Raphaël Gomès <rgomes@octobus.net>
parents:
44973
diff
changeset
|
164 /// 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
|
165 /// |
49345
137d6bb71937
rust: use owned types in `Matcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
48355
diff
changeset
|
166 /// 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
|
167 /// let matcher = FileMatcher::new(files).unwrap(); |
43914
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Raphaël Gomès <rgomes@octobus.net>
parents:
43863
diff
changeset
|
168 /// |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Raphaël Gomès <rgomes@octobus.net>
parents:
43863
diff
changeset
|
169 /// 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
|
170 /// 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
|
171 /// 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
|
172 /// 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
|
173 /// ``` |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Raphaël Gomès <rgomes@octobus.net>
parents:
43863
diff
changeset
|
174 #[derive(Debug)] |
49345
137d6bb71937
rust: use owned types in `Matcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
48355
diff
changeset
|
175 pub struct FileMatcher { |
137d6bb71937
rust: use owned types in `Matcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
48355
diff
changeset
|
176 files: HashSet<HgPathBuf>, |
43914
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Raphaël Gomès <rgomes@octobus.net>
parents:
43863
diff
changeset
|
177 dirs: DirsMultiset, |
51109
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
50865
diff
changeset
|
178 sorted_visitchildrenset_candidates: OnceCell<BTreeSet<HgPathBuf>>, |
43914
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Raphaël Gomès <rgomes@octobus.net>
parents:
43863
diff
changeset
|
179 } |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Raphaël Gomès <rgomes@octobus.net>
parents:
43863
diff
changeset
|
180 |
49345
137d6bb71937
rust: use owned types in `Matcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
48355
diff
changeset
|
181 impl FileMatcher { |
50860
f50e71fdfcb4
rust: improve the type on DirsMultiset::from_manifest
Spencer Baugh <sbaugh@janestreet.com>
parents:
50856
diff
changeset
|
182 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
|
183 let dirs = DirsMultiset::from_manifest(&files)?; |
43914
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Raphaël Gomès <rgomes@octobus.net>
parents:
43863
diff
changeset
|
184 Ok(Self { |
51120
532e74ad3ff6
rust: run a clippy pass with the latest stable version
Raphaël Gomès <rgomes@octobus.net>
parents:
51109
diff
changeset
|
185 files: HashSet::from_iter(files), |
49345
137d6bb71937
rust: use owned types in `Matcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
48355
diff
changeset
|
186 dirs, |
51109
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
50865
diff
changeset
|
187 sorted_visitchildrenset_candidates: OnceCell::new(), |
43914
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Raphaël Gomès <rgomes@octobus.net>
parents:
43863
diff
changeset
|
188 }) |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Raphaël Gomès <rgomes@octobus.net>
parents:
43863
diff
changeset
|
189 } |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Raphaël Gomès <rgomes@octobus.net>
parents:
44973
diff
changeset
|
190 fn inner_matches(&self, filename: &HgPath) -> bool { |
43914
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Raphaël Gomès <rgomes@octobus.net>
parents:
43863
diff
changeset
|
191 self.files.contains(filename.as_ref()) |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Raphaël Gomès <rgomes@octobus.net>
parents:
43863
diff
changeset
|
192 } |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Raphaël Gomès <rgomes@octobus.net>
parents:
43863
diff
changeset
|
193 } |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Raphaël Gomès <rgomes@octobus.net>
parents:
43863
diff
changeset
|
194 |
49345
137d6bb71937
rust: use owned types in `Matcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
48355
diff
changeset
|
195 impl Matcher for FileMatcher { |
137d6bb71937
rust: use owned types in `Matcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
48355
diff
changeset
|
196 fn file_set(&self) -> Option<&HashSet<HgPathBuf>> { |
43914
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Raphaël Gomès <rgomes@octobus.net>
parents:
43863
diff
changeset
|
197 Some(&self.files) |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Raphaël Gomès <rgomes@octobus.net>
parents:
43863
diff
changeset
|
198 } |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Raphaël Gomès <rgomes@octobus.net>
parents:
44973
diff
changeset
|
199 fn exact_match(&self, filename: &HgPath) -> bool { |
43914
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Raphaël Gomès <rgomes@octobus.net>
parents:
43863
diff
changeset
|
200 self.inner_matches(filename) |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Raphaël Gomès <rgomes@octobus.net>
parents:
43863
diff
changeset
|
201 } |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Raphaël Gomès <rgomes@octobus.net>
parents:
44973
diff
changeset
|
202 fn matches(&self, filename: &HgPath) -> bool { |
43914
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Raphaël Gomès <rgomes@octobus.net>
parents:
43863
diff
changeset
|
203 self.inner_matches(filename) |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Raphaël Gomès <rgomes@octobus.net>
parents:
43863
diff
changeset
|
204 } |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Raphaël Gomès <rgomes@octobus.net>
parents:
44973
diff
changeset
|
205 fn visit_children_set(&self, directory: &HgPath) -> VisitChildrenSet { |
51109
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
50865
diff
changeset
|
206 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
|
207 return VisitChildrenSet::Empty; |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
208 } |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
209 |
51109
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
50865
diff
changeset
|
210 let compute_candidates = || -> BTreeSet<HgPathBuf> { |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
50865
diff
changeset
|
211 let mut candidates: BTreeSet<HgPathBuf> = |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
50865
diff
changeset
|
212 self.dirs.iter().cloned().collect(); |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
50865
diff
changeset
|
213 candidates.extend(self.files.iter().cloned()); |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
50865
diff
changeset
|
214 candidates.remove(HgPath::new(b"")); |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
50865
diff
changeset
|
215 candidates |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
50865
diff
changeset
|
216 }; |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
50865
diff
changeset
|
217 let candidates = |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
50865
diff
changeset
|
218 if directory.as_ref().is_empty() { |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
50865
diff
changeset
|
219 compute_candidates() |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
50865
diff
changeset
|
220 } else { |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
50865
diff
changeset
|
221 let sorted_candidates = self |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
50865
diff
changeset
|
222 .sorted_visitchildrenset_candidates |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
50865
diff
changeset
|
223 .get_or_init(compute_candidates); |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
50865
diff
changeset
|
224 let directory_bytes = directory.as_ref().as_bytes(); |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
50865
diff
changeset
|
225 let start: HgPathBuf = |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
50865
diff
changeset
|
226 format_bytes!(b"{}/", directory_bytes).into(); |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
50865
diff
changeset
|
227 let start_len = start.len(); |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
50865
diff
changeset
|
228 // `0` sorts after `/` |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
50865
diff
changeset
|
229 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:
50865
diff
changeset
|
230 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:
50865
diff
changeset
|
231 |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:
50865
diff
changeset
|
232 )) |
687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
50865
diff
changeset
|
233 }; |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
234 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
235 // `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
|
236 // 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
|
237 // '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
|
238 // '/' 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
|
239 // 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
|
240 VisitChildrenSet::Set( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
241 candidates |
49345
137d6bb71937
rust: use owned types in `Matcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
48355
diff
changeset
|
242 .into_iter() |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
243 .filter_map(|c| { |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
244 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
|
245 Some(c) |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
246 } else { |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
247 None |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
248 } |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
249 }) |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
250 .collect(), |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
251 ) |
43914
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Raphaël Gomès <rgomes@octobus.net>
parents:
43863
diff
changeset
|
252 } |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Raphaël Gomès <rgomes@octobus.net>
parents:
43863
diff
changeset
|
253 fn matches_everything(&self) -> bool { |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Raphaël Gomès <rgomes@octobus.net>
parents:
43863
diff
changeset
|
254 false |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Raphaël Gomès <rgomes@octobus.net>
parents:
43863
diff
changeset
|
255 } |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Raphaël Gomès <rgomes@octobus.net>
parents:
43863
diff
changeset
|
256 fn is_exact(&self) -> bool { |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Raphaël Gomès <rgomes@octobus.net>
parents:
43863
diff
changeset
|
257 true |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Raphaël Gomès <rgomes@octobus.net>
parents:
43863
diff
changeset
|
258 } |
69c4f3cf2cdf
rust-matchers: add `FileMatcher` implementation
Raphaël Gomès <rgomes@octobus.net>
parents:
43863
diff
changeset
|
259 } |
44519
52d40f8fb82d
rust-matchers: add function to generate a regex matcher function
Raphaël Gomès <rgomes@octobus.net>
parents:
44353
diff
changeset
|
260 |
50865
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
261 /// Matches a set of (kind, pat, source) against a 'root' directory. |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
262 /// (Currently the 'root' directory is effectively always empty) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
263 /// ``` |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
264 /// use hg::{ |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
265 /// matchers::{PatternMatcher, Matcher}, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
266 /// IgnorePattern, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
267 /// PatternSyntax, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
268 /// utils::hg_path::{HgPath, HgPathBuf} |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
269 /// }; |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
270 /// use std::collections::HashSet; |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
271 /// use std::path::Path; |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
272 /// /// |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
273 /// let ignore_patterns : Vec<IgnorePattern> = |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
274 /// vec![IgnorePattern::new(PatternSyntax::Regexp, br".*\.c$", Path::new("")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
275 /// IgnorePattern::new(PatternSyntax::Path, b"foo/a", Path::new("")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
276 /// IgnorePattern::new(PatternSyntax::RelPath, b"b", Path::new("")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
277 /// IgnorePattern::new(PatternSyntax::Glob, b"*.h", Path::new("")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
278 /// ]; |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
279 /// let matcher = PatternMatcher::new(ignore_patterns).unwrap(); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
280 /// /// |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
281 /// assert_eq!(matcher.matches(HgPath::new(b"main.c")), true); // matches re:.*\.c$ |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
282 /// assert_eq!(matcher.matches(HgPath::new(b"b.txt")), false); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
283 /// 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:
50861
diff
changeset
|
284 /// 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:
50861
diff
changeset
|
285 /// 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:
50861
diff
changeset
|
286 /// assert_eq!(matcher.matches(HgPath::new(b"lib.h")), true); // matches glob:*.h |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
287 /// assert_eq!(matcher.file_set().unwrap(), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
288 /// &HashSet::from([HgPathBuf::from_bytes(b""), HgPathBuf::from_bytes(b"foo/a"), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
289 /// HgPathBuf::from_bytes(b""), HgPathBuf::from_bytes(b"b")])); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
290 /// assert_eq!(matcher.exact_match(HgPath::new(b"foo/a")), true); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
291 /// assert_eq!(matcher.exact_match(HgPath::new(b"b")), true); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
292 /// 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:
50861
diff
changeset
|
293 /// ``` |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
294 pub struct PatternMatcher<'a> { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
295 patterns: Vec<u8>, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
296 match_fn: IgnoreFnType<'a>, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
297 /// Whether all the patterns match a prefix (i.e. recursively) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
298 prefix: bool, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
299 files: HashSet<HgPathBuf>, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
300 dirs: DirsMultiset, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
301 } |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
302 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
303 impl core::fmt::Debug for PatternMatcher<'_> { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
304 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
305 f.debug_struct("PatternMatcher") |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
306 .field("patterns", &String::from_utf8_lossy(&self.patterns)) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
307 .field("prefix", &self.prefix) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
308 .field("files", &self.files) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
309 .field("dirs", &self.dirs) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
310 .finish() |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
311 } |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
312 } |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
313 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
314 impl<'a> PatternMatcher<'a> { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
315 pub fn new(ignore_patterns: Vec<IgnorePattern>) -> PatternResult<Self> { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
316 let (files, _) = roots_and_dirs(&ignore_patterns); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
317 let dirs = DirsMultiset::from_manifest(&files)?; |
51120
532e74ad3ff6
rust: run a clippy pass with the latest stable version
Raphaël Gomès <rgomes@octobus.net>
parents:
51109
diff
changeset
|
318 let files: HashSet<HgPathBuf> = HashSet::from_iter(files); |
50865
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
319 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
320 let prefix = ignore_patterns.iter().all(|k| { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
321 matches!(k.syntax, PatternSyntax::Path | PatternSyntax::RelPath) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
322 }); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
323 let (patterns, match_fn) = build_match(ignore_patterns, b"$")?; |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
324 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
325 Ok(Self { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
326 patterns, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
327 match_fn, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
328 prefix, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
329 files, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
330 dirs, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
331 }) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
332 } |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
333 } |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
334 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
335 impl<'a> Matcher for PatternMatcher<'a> { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
336 fn file_set(&self) -> Option<&HashSet<HgPathBuf>> { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
337 Some(&self.files) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
338 } |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
339 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
340 fn exact_match(&self, filename: &HgPath) -> bool { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
341 self.files.contains(filename) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
342 } |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
343 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
344 fn matches(&self, filename: &HgPath) -> bool { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
345 if self.files.contains(filename) { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
346 return true; |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
347 } |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
348 (self.match_fn)(filename) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
349 } |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
350 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
351 fn visit_children_set(&self, directory: &HgPath) -> VisitChildrenSet { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
352 if self.prefix && self.files.contains(directory) { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
353 return VisitChildrenSet::Recursive; |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
354 } |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
355 let path_or_parents_in_set = find_dirs(directory) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
356 .any(|parent_dir| self.files.contains(parent_dir)); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
357 if self.dirs.contains(directory) || path_or_parents_in_set { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
358 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
359 } else { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
360 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
361 } |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
362 } |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
363 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
364 fn matches_everything(&self) -> bool { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
365 false |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
366 } |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
367 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
368 fn is_exact(&self) -> bool { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
369 false |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
370 } |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
371 } |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
372 |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
373 /// 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
|
374 /// ``` |
9f96beb9bafe
rust: remove support for `re2`
Raphaël Gomès <rgomes@octobus.net>
parents:
44852
diff
changeset
|
375 /// use hg::{ |
9f96beb9bafe
rust: remove support for `re2`
Raphaël Gomès <rgomes@octobus.net>
parents:
44852
diff
changeset
|
376 /// matchers::{IncludeMatcher, Matcher}, |
9f96beb9bafe
rust: remove support for `re2`
Raphaël Gomès <rgomes@octobus.net>
parents:
44852
diff
changeset
|
377 /// IgnorePattern, |
9f96beb9bafe
rust: remove support for `re2`
Raphaël Gomès <rgomes@octobus.net>
parents:
44852
diff
changeset
|
378 /// PatternSyntax, |
9f96beb9bafe
rust: remove support for `re2`
Raphaël Gomès <rgomes@octobus.net>
parents:
44852
diff
changeset
|
379 /// utils::hg_path::HgPath |
9f96beb9bafe
rust: remove support for `re2`
Raphaël Gomès <rgomes@octobus.net>
parents:
44852
diff
changeset
|
380 /// }; |
9f96beb9bafe
rust: remove support for `re2`
Raphaël Gomès <rgomes@octobus.net>
parents:
44852
diff
changeset
|
381 /// use std::path::Path; |
9f96beb9bafe
rust: remove support for `re2`
Raphaël Gomès <rgomes@octobus.net>
parents:
44852
diff
changeset
|
382 /// /// |
9f96beb9bafe
rust: remove support for `re2`
Raphaël Gomès <rgomes@octobus.net>
parents:
44852
diff
changeset
|
383 /// let ignore_patterns = |
9f96beb9bafe
rust: remove support for `re2`
Raphaël Gomès <rgomes@octobus.net>
parents:
44852
diff
changeset
|
384 /// 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
|
385 /// 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
|
386 /// /// |
9f96beb9bafe
rust: remove support for `re2`
Raphaël Gomès <rgomes@octobus.net>
parents:
44852
diff
changeset
|
387 /// 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
|
388 /// 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
|
389 /// 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
|
390 /// assert_eq!(matcher.matches(HgPath::new(b"but not this")), false); |
51274
bec6e9c108fd
matchers: use correct method for finding index in vector
Martin von Zweigbergk <martinvonz@google.com>
parents:
51120
diff
changeset
|
391 /// /// |
bec6e9c108fd
matchers: use correct method for finding index in vector
Martin von Zweigbergk <martinvonz@google.com>
parents:
51120
diff
changeset
|
392 /// let ignore_patterns = |
bec6e9c108fd
matchers: use correct method for finding index in vector
Martin von Zweigbergk <martinvonz@google.com>
parents:
51120
diff
changeset
|
393 /// vec![IgnorePattern::new(PatternSyntax::RootFiles, b"dir/subdir", Path::new(""))]; |
bec6e9c108fd
matchers: use correct method for finding index in vector
Martin von Zweigbergk <martinvonz@google.com>
parents:
51120
diff
changeset
|
394 /// let matcher = IncludeMatcher::new(ignore_patterns).unwrap(); |
bec6e9c108fd
matchers: use correct method for finding index in vector
Martin von Zweigbergk <martinvonz@google.com>
parents:
51120
diff
changeset
|
395 /// /// |
bec6e9c108fd
matchers: use correct method for finding index in vector
Martin von Zweigbergk <martinvonz@google.com>
parents:
51120
diff
changeset
|
396 /// assert!(!matcher.matches(HgPath::new(b"file"))); |
bec6e9c108fd
matchers: use correct method for finding index in vector
Martin von Zweigbergk <martinvonz@google.com>
parents:
51120
diff
changeset
|
397 /// 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:
51120
diff
changeset
|
398 /// 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:
51120
diff
changeset
|
399 /// 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
|
400 /// ``` |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
401 pub struct IncludeMatcher<'a> { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
402 patterns: Vec<u8>, |
48354
2009e3c64a53
rhg: refactor to use IgnoreFnType alias more widely
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48311
diff
changeset
|
403 match_fn: IgnoreFnType<'a>, |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
404 /// 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
|
405 prefix: bool, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
406 roots: HashSet<HgPathBuf>, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
407 dirs: HashSet<HgPathBuf>, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
408 parents: HashSet<HgPathBuf>, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
409 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
410 |
49487
e8481625c582
rust: add Debug constraint to Matcher trait
Raphaël Gomès <rgomes@octobus.net>
parents:
49478
diff
changeset
|
411 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
|
412 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
|
413 f.debug_struct("IncludeMatcher") |
e8481625c582
rust: add Debug constraint to Matcher trait
Raphaël Gomès <rgomes@octobus.net>
parents:
49478
diff
changeset
|
414 .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
|
415 .field("prefix", &self.prefix) |
e8481625c582
rust: add Debug constraint to Matcher trait
Raphaël Gomès <rgomes@octobus.net>
parents:
49478
diff
changeset
|
416 .field("roots", &self.roots) |
e8481625c582
rust: add Debug constraint to Matcher trait
Raphaël Gomès <rgomes@octobus.net>
parents:
49478
diff
changeset
|
417 .field("dirs", &self.dirs) |
e8481625c582
rust: add Debug constraint to Matcher trait
Raphaël Gomès <rgomes@octobus.net>
parents:
49478
diff
changeset
|
418 .field("parents", &self.parents) |
e8481625c582
rust: add Debug constraint to Matcher trait
Raphaël Gomès <rgomes@octobus.net>
parents:
49478
diff
changeset
|
419 .finish() |
e8481625c582
rust: add Debug constraint to Matcher trait
Raphaël Gomès <rgomes@octobus.net>
parents:
49478
diff
changeset
|
420 } |
e8481625c582
rust: add Debug constraint to Matcher trait
Raphaël Gomès <rgomes@octobus.net>
parents:
49478
diff
changeset
|
421 } |
e8481625c582
rust: add Debug constraint to Matcher trait
Raphaël Gomès <rgomes@octobus.net>
parents:
49478
diff
changeset
|
422 |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
423 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
|
424 fn file_set(&self) -> Option<&HashSet<HgPathBuf>> { |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
425 None |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
426 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
427 |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Raphaël Gomès <rgomes@octobus.net>
parents:
44973
diff
changeset
|
428 fn exact_match(&self, _filename: &HgPath) -> bool { |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
429 false |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
430 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
431 |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Raphaël Gomès <rgomes@octobus.net>
parents:
44973
diff
changeset
|
432 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
|
433 (self.match_fn)(filename) |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
434 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
435 |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Raphaël Gomès <rgomes@octobus.net>
parents:
44973
diff
changeset
|
436 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
|
437 let dir = directory; |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
438 if self.prefix && self.roots.contains(dir) { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
439 return VisitChildrenSet::Recursive; |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
440 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
441 if self.roots.contains(HgPath::new(b"")) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
442 || self.roots.contains(dir) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
443 || self.dirs.contains(dir) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
444 || 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
|
445 { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
446 return VisitChildrenSet::This; |
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 |
49930
e98fd81bb151
rust-clippy: fix most warnings in `hg-core`
Raphaël Gomès <rgomes@octobus.net>
parents:
49913
diff
changeset
|
449 if self.parents.contains(dir.as_ref()) { |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
450 let multiset = self.get_all_parents_children(); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
451 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
|
452 return VisitChildrenSet::Set( |
49930
e98fd81bb151
rust-clippy: fix most warnings in `hg-core`
Raphaël Gomès <rgomes@octobus.net>
parents:
49913
diff
changeset
|
453 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
|
454 ); |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
455 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
456 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
457 VisitChildrenSet::Empty |
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 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
460 fn matches_everything(&self) -> bool { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
461 false |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
462 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
463 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
464 fn is_exact(&self) -> bool { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
465 false |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
466 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
467 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
468 |
49347
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
469 /// 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
|
470 #[derive(Debug)] |
49347
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
471 pub struct UnionMatcher { |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
472 matchers: Vec<Box<dyn Matcher + Sync>>, |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
473 } |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
474 |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
475 impl Matcher for UnionMatcher { |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
476 fn file_set(&self) -> Option<&HashSet<HgPathBuf>> { |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
477 None |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
478 } |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
479 |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
480 fn exact_match(&self, _filename: &HgPath) -> bool { |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
481 false |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
482 } |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
483 |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
484 fn matches(&self, filename: &HgPath) -> bool { |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
485 self.matchers.iter().any(|m| m.matches(filename)) |
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 fn visit_children_set(&self, directory: &HgPath) -> VisitChildrenSet { |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
489 let mut result = HashSet::new(); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
490 let mut this = false; |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
491 for matcher in self.matchers.iter() { |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
492 let visit = matcher.visit_children_set(directory); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
493 match visit { |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
494 VisitChildrenSet::Empty => continue, |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
495 VisitChildrenSet::This => { |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
496 this = true; |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
497 // 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
|
498 continue; |
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 VisitChildrenSet::Set(set) => { |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
501 result.extend(set); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
502 } |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
503 VisitChildrenSet::Recursive => { |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
504 return visit; |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
505 } |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
506 } |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
507 } |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
508 if this { |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
509 return VisitChildrenSet::This; |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
510 } |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
511 if result.is_empty() { |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
512 VisitChildrenSet::Empty |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
513 } else { |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
514 VisitChildrenSet::Set(result) |
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 } |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
517 |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
518 fn matches_everything(&self) -> bool { |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
519 // TODO Maybe if all are AlwaysMatcher? |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
520 false |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
521 } |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
522 |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
523 fn is_exact(&self) -> bool { |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
524 false |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
525 } |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
526 } |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
527 |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
528 impl UnionMatcher { |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
529 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
|
530 Self { matchers } |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
531 } |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
532 } |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
533 |
49487
e8481625c582
rust: add Debug constraint to Matcher trait
Raphaël Gomès <rgomes@octobus.net>
parents:
49478
diff
changeset
|
534 #[derive(Debug)] |
49349
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
535 pub struct IntersectionMatcher { |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
536 m1: Box<dyn Matcher + Sync>, |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
537 m2: Box<dyn Matcher + Sync>, |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
538 files: Option<HashSet<HgPathBuf>>, |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
539 } |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
540 |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
541 impl Matcher for IntersectionMatcher { |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
542 fn file_set(&self) -> Option<&HashSet<HgPathBuf>> { |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
543 self.files.as_ref() |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
544 } |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
545 |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
546 fn exact_match(&self, filename: &HgPath) -> bool { |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
547 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
|
548 } |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
549 |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
550 fn matches(&self, filename: &HgPath) -> bool { |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
551 self.m1.matches(filename) && self.m2.matches(filename) |
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 fn visit_children_set(&self, directory: &HgPath) -> VisitChildrenSet { |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
555 let m1_set = self.m1.visit_children_set(directory); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
556 if m1_set == VisitChildrenSet::Empty { |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
557 return VisitChildrenSet::Empty; |
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 let m2_set = self.m2.visit_children_set(directory); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
560 if m2_set == VisitChildrenSet::Empty { |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
561 return VisitChildrenSet::Empty; |
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 |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
564 if m1_set == VisitChildrenSet::Recursive { |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
565 return m2_set; |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
566 } else if m2_set == VisitChildrenSet::Recursive { |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
567 return m1_set; |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
568 } |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
569 |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
570 match (&m1_set, &m2_set) { |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
571 (VisitChildrenSet::Recursive, _) => m2_set, |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
572 (_, VisitChildrenSet::Recursive) => m1_set, |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
573 (VisitChildrenSet::This, _) | (_, VisitChildrenSet::This) => { |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
574 VisitChildrenSet::This |
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 (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
|
577 let set: HashSet<_> = m1.intersection(m2).cloned().collect(); |
49349
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
578 if set.is_empty() { |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
579 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
580 } else { |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
581 VisitChildrenSet::Set(set) |
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 } |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
584 _ => unreachable!(), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
585 } |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
586 } |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
587 |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
588 fn matches_everything(&self) -> bool { |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
589 self.m1.matches_everything() && self.m2.matches_everything() |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
590 } |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
591 |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
592 fn is_exact(&self) -> bool { |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
593 self.m1.is_exact() || self.m2.is_exact() |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
594 } |
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 impl IntersectionMatcher { |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
598 pub fn new( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
599 mut m1: Box<dyn Matcher + Sync>, |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
600 mut m2: Box<dyn Matcher + Sync>, |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
601 ) -> Self { |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
602 let files = if m1.is_exact() || m2.is_exact() { |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
603 if !m1.is_exact() { |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
604 std::mem::swap(&mut m1, &mut m2); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
605 } |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
606 m1.file_set().map(|m1_files| { |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
607 m1_files.iter().cloned().filter(|f| m2.matches(f)).collect() |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
608 }) |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
609 } else { |
50856
e037af7de2ce
rust-matchers: better support file_set in IntersectionMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50695
diff
changeset
|
610 // 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:
50695
diff
changeset
|
611 // intersection, so we must over-approximate by |
e037af7de2ce
rust-matchers: better support file_set in IntersectionMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50695
diff
changeset
|
612 // unioning instead |
e037af7de2ce
rust-matchers: better support file_set in IntersectionMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50695
diff
changeset
|
613 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:
50695
diff
changeset
|
614 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:
50695
diff
changeset
|
615 None => m1_files.iter().cloned().collect(), |
e037af7de2ce
rust-matchers: better support file_set in IntersectionMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50695
diff
changeset
|
616 }) |
49349
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
617 }; |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
618 Self { m1, m2, files } |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
619 } |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
620 } |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
621 |
49487
e8481625c582
rust: add Debug constraint to Matcher trait
Raphaël Gomès <rgomes@octobus.net>
parents:
49478
diff
changeset
|
622 #[derive(Debug)] |
49478
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
623 pub struct DifferenceMatcher { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
624 base: Box<dyn Matcher + Sync>, |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
625 excluded: Box<dyn Matcher + Sync>, |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
626 files: Option<HashSet<HgPathBuf>>, |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
627 } |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
628 |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
629 impl Matcher for DifferenceMatcher { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
630 fn file_set(&self) -> Option<&HashSet<HgPathBuf>> { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
631 self.files.as_ref() |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
632 } |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
633 |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
634 fn exact_match(&self, filename: &HgPath) -> bool { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
635 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
|
636 } |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
637 |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
638 fn matches(&self, filename: &HgPath) -> bool { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
639 self.base.matches(filename) && !self.excluded.matches(filename) |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
640 } |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
641 |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
642 fn visit_children_set(&self, directory: &HgPath) -> VisitChildrenSet { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
643 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
|
644 if excluded_set == VisitChildrenSet::Recursive { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
645 return VisitChildrenSet::Empty; |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
646 } |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
647 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
|
648 // Possible values for base: 'recursive', 'this', set(...), set() |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
649 // Possible values for excluded: 'this', set(...), set() |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
650 // 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
|
651 // even if it's 'recursive'. |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
652 if excluded_set == VisitChildrenSet::Empty { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
653 return base_set; |
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 match base_set { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
656 VisitChildrenSet::This | VisitChildrenSet::Recursive => { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
657 // 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
|
658 // 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
|
659 // return set() for a subdirectory. |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
660 VisitChildrenSet::This |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
661 } |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
662 set => { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
663 // Possible values for base: set(...), set() |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
664 // Possible values for excluded: 'this', set(...) |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
665 // 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
|
666 // base = path:dir/subdir |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
667 // excluded=rootfilesin:dir, |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
668 // visit_children_set(''): |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
669 // base returns {'dir'}, excluded returns {'dir'}, if we |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
670 // 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
|
671 // still need to visit 'dir'! |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
672 set |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
673 } |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
674 } |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
675 } |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
676 |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
677 fn matches_everything(&self) -> bool { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
678 false |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
679 } |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
680 |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
681 fn is_exact(&self) -> bool { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
682 self.base.is_exact() |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
683 } |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
684 } |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
685 |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
686 impl DifferenceMatcher { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
687 pub fn new( |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
688 base: Box<dyn Matcher + Sync>, |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
689 excluded: Box<dyn Matcher + Sync>, |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
690 ) -> Self { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
691 let base_is_exact = base.is_exact(); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
692 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
|
693 let mut new = Self { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
694 base, |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
695 excluded, |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
696 files: None, |
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 if base_is_exact { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
699 new.files = base_files.map(|files| { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
700 files.iter().cloned().filter(|f| new.matches(f)).collect() |
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 new |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
704 } |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
705 } |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
706 |
49581
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Raphaël Gomès <rgomes@octobus.net>
parents:
49558
diff
changeset
|
707 /// 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
|
708 /// contexts. |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Raphaël Gomès <rgomes@octobus.net>
parents:
49558
diff
changeset
|
709 /// |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Raphaël Gomès <rgomes@octobus.net>
parents:
49558
diff
changeset
|
710 /// 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
|
711 /// 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
|
712 /// 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
|
713 /// |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Raphaël Gomès <rgomes@octobus.net>
parents:
49558
diff
changeset
|
714 /// 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
|
715 /// 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
|
716 /// 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
|
717 /// 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
|
718 /// |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Raphaël Gomès <rgomes@octobus.net>
parents:
49558
diff
changeset
|
719 /// 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
|
720 /// 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
|
721 struct RegexMatcher { |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Raphaël Gomès <rgomes@octobus.net>
parents:
49558
diff
changeset
|
722 /// 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
|
723 /// 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
|
724 /// first compilation. |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Raphaël Gomès <rgomes@octobus.net>
parents:
49558
diff
changeset
|
725 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
|
726 /// 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
|
727 /// from each thread. |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Raphaël Gomès <rgomes@octobus.net>
parents:
49558
diff
changeset
|
728 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
|
729 } |
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 impl RegexMatcher { |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Raphaël Gomès <rgomes@octobus.net>
parents:
49558
diff
changeset
|
732 /// 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
|
733 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
|
734 self.local |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Raphaël Gomès <rgomes@octobus.net>
parents:
49558
diff
changeset
|
735 .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
|
736 .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
|
737 } |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Raphaël Gomès <rgomes@octobus.net>
parents:
49558
diff
changeset
|
738 } |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Raphaël Gomès <rgomes@octobus.net>
parents:
49558
diff
changeset
|
739 |
44593
496868f1030c
rust-matchers: use the `regex` crate
Raphaël Gomès <rgomes@octobus.net>
parents:
44541
diff
changeset
|
740 /// Returns a function that matches an `HgPath` against the given regex |
496868f1030c
rust-matchers: use the `regex` crate
Raphaël Gomès <rgomes@octobus.net>
parents:
44541
diff
changeset
|
741 /// pattern. |
496868f1030c
rust-matchers: use the `regex` crate
Raphaël Gomès <rgomes@octobus.net>
parents:
44541
diff
changeset
|
742 /// |
496868f1030c
rust-matchers: use the `regex` crate
Raphaël Gomès <rgomes@octobus.net>
parents:
44541
diff
changeset
|
743 /// This can fail when the pattern is invalid or not supported by the |
496868f1030c
rust-matchers: use the `regex` crate
Raphaël Gomès <rgomes@octobus.net>
parents:
44541
diff
changeset
|
744 /// underlying engine (the `regex` crate), for instance anything with |
496868f1030c
rust-matchers: use the `regex` crate
Raphaël Gomès <rgomes@octobus.net>
parents:
44541
diff
changeset
|
745 /// back-references. |
49913
c15b415d1bff
rust: use `logging_timer` instead of `micro_timer`
Raphaël Gomès <rgomes@octobus.net>
parents:
49631
diff
changeset
|
746 #[logging_timer::time("trace")] |
49581
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Raphaël Gomès <rgomes@octobus.net>
parents:
49558
diff
changeset
|
747 fn re_matcher(pattern: &[u8]) -> PatternResult<RegexMatcher> { |
44593
496868f1030c
rust-matchers: use the `regex` crate
Raphaël Gomès <rgomes@octobus.net>
parents:
44541
diff
changeset
|
748 use std::io::Write; |
496868f1030c
rust-matchers: use the `regex` crate
Raphaël Gomès <rgomes@octobus.net>
parents:
44541
diff
changeset
|
749 |
44832
ad1ec40975aa
rust-regex: fix issues with regex anchoring and performance
Raphaël Gomès <rgomes@octobus.net>
parents:
44803
diff
changeset
|
750 // 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
|
751 // 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
|
752 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
|
753 for byte in pattern { |
496868f1030c
rust-matchers: use the `regex` crate
Raphaël Gomès <rgomes@octobus.net>
parents:
44541
diff
changeset
|
754 if *byte > 127 { |
496868f1030c
rust-matchers: use the `regex` crate
Raphaël Gomès <rgomes@octobus.net>
parents:
44541
diff
changeset
|
755 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
|
756 } else { |
496868f1030c
rust-matchers: use the `regex` crate
Raphaël Gomès <rgomes@octobus.net>
parents:
44541
diff
changeset
|
757 escaped_bytes.push(*byte); |
496868f1030c
rust-matchers: use the `regex` crate
Raphaël Gomès <rgomes@octobus.net>
parents:
44541
diff
changeset
|
758 } |
496868f1030c
rust-matchers: use the `regex` crate
Raphaël Gomès <rgomes@octobus.net>
parents:
44541
diff
changeset
|
759 } |
44832
ad1ec40975aa
rust-regex: fix issues with regex anchoring and performance
Raphaël Gomès <rgomes@octobus.net>
parents:
44803
diff
changeset
|
760 escaped_bytes.push(b')'); |
44593
496868f1030c
rust-matchers: use the `regex` crate
Raphaël Gomès <rgomes@octobus.net>
parents:
44541
diff
changeset
|
761 |
496868f1030c
rust-matchers: use the `regex` crate
Raphaël Gomès <rgomes@octobus.net>
parents:
44541
diff
changeset
|
762 // Avoid the cost of UTF8 checking |
496868f1030c
rust-matchers: use the `regex` crate
Raphaël Gomès <rgomes@octobus.net>
parents:
44541
diff
changeset
|
763 // |
496868f1030c
rust-matchers: use the `regex` crate
Raphaël Gomès <rgomes@octobus.net>
parents:
44541
diff
changeset
|
764 // # Safety |
496868f1030c
rust-matchers: use the `regex` crate
Raphaël Gomès <rgomes@octobus.net>
parents:
44541
diff
changeset
|
765 // 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
|
766 let pattern_string = unsafe { String::from_utf8_unchecked(escaped_bytes) }; |
496868f1030c
rust-matchers: use the `regex` crate
Raphaël Gomès <rgomes@octobus.net>
parents:
44541
diff
changeset
|
767 let re = regex::bytes::RegexBuilder::new(&pattern_string) |
496868f1030c
rust-matchers: use the `regex` crate
Raphaël Gomès <rgomes@octobus.net>
parents:
44541
diff
changeset
|
768 .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
|
769 // 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
|
770 // 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
|
771 // 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
|
772 .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
|
773 .build() |
496868f1030c
rust-matchers: use the `regex` crate
Raphaël Gomès <rgomes@octobus.net>
parents:
44541
diff
changeset
|
774 .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
|
775 |
49581
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Raphaël Gomès <rgomes@octobus.net>
parents:
49558
diff
changeset
|
776 Ok(RegexMatcher { |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Raphaël Gomès <rgomes@octobus.net>
parents:
49558
diff
changeset
|
777 base: re, |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Raphaël Gomès <rgomes@octobus.net>
parents:
49558
diff
changeset
|
778 local: Default::default(), |
04f1dba53c96
rust: create wrapper struct to reduce `regex` contention issues
Raphaël Gomès <rgomes@octobus.net>
parents:
49558
diff
changeset
|
779 }) |
44519
52d40f8fb82d
rust-matchers: add function to generate a regex matcher function
Raphaël Gomès <rgomes@octobus.net>
parents:
44353
diff
changeset
|
780 } |
52d40f8fb82d
rust-matchers: add function to generate a regex matcher function
Raphaël Gomès <rgomes@octobus.net>
parents:
44353
diff
changeset
|
781 |
44521
a21881b40942
rust-matchers: add `build_regex_match` function
Raphaël Gomès <rgomes@octobus.net>
parents:
44520
diff
changeset
|
782 /// 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
|
783 /// said regex formed by the given ignore patterns. |
51120
532e74ad3ff6
rust: run a clippy pass with the latest stable version
Raphaël Gomès <rgomes@octobus.net>
parents:
51109
diff
changeset
|
784 fn build_regex_match<'a>( |
532e74ad3ff6
rust: run a clippy pass with the latest stable version
Raphaël Gomès <rgomes@octobus.net>
parents:
51109
diff
changeset
|
785 ignore_patterns: &[IgnorePattern], |
50861
090658724abf
rust: de-hardcode glob_suffix
Spencer Baugh <sbaugh@janestreet.com>
parents:
50860
diff
changeset
|
786 glob_suffix: &[u8], |
51120
532e74ad3ff6
rust: run a clippy pass with the latest stable version
Raphaël Gomès <rgomes@octobus.net>
parents:
51109
diff
changeset
|
787 ) -> 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
|
788 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
|
789 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
|
790 |
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
|
791 for pattern in ignore_patterns { |
50861
090658724abf
rust: de-hardcode glob_suffix
Spencer Baugh <sbaugh@janestreet.com>
parents:
50860
diff
changeset
|
792 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
|
793 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
|
794 } 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
|
795 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
|
796 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
|
797 } |
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
|
798 } |
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
|
799 |
44521
a21881b40942
rust-matchers: add `build_regex_match` function
Raphaël Gomès <rgomes@octobus.net>
parents:
44520
diff
changeset
|
800 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
|
801 |
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
|
802 // 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
|
803 // (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
|
804 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
|
805 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
|
806 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
|
807 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
|
808 }; |
48354
2009e3c64a53
rhg: refactor to use IgnoreFnType alias more widely
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48311
diff
changeset
|
809 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
|
810 } 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
|
811 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
|
812 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
|
813 }; |
44521
a21881b40942
rust-matchers: add `build_regex_match` function
Raphaël Gomès <rgomes@octobus.net>
parents:
44520
diff
changeset
|
814 |
a21881b40942
rust-matchers: add `build_regex_match` function
Raphaël Gomès <rgomes@octobus.net>
parents:
44520
diff
changeset
|
815 Ok((full_regex, func)) |
a21881b40942
rust-matchers: add `build_regex_match` function
Raphaël Gomès <rgomes@octobus.net>
parents:
44520
diff
changeset
|
816 } |
a21881b40942
rust-matchers: add `build_regex_match` function
Raphaël Gomès <rgomes@octobus.net>
parents:
44520
diff
changeset
|
817 |
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
|
818 /// 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
|
819 /// |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Raphaël Gomès <rgomes@octobus.net>
parents:
44519
diff
changeset
|
820 /// 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
|
821 /// 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
|
822 /// 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
|
823 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
|
824 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
|
825 ) -> (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
|
826 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
|
827 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
|
828 |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Raphaël Gomès <rgomes@octobus.net>
parents:
44519
diff
changeset
|
829 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
|
830 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
|
831 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
|
832 } = 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
|
833 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
|
834 PatternSyntax::RootGlob | PatternSyntax::Glob => { |
48311
6d69e83e6b6e
rhg: more efficient `HgPath::join`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
47409
diff
changeset
|
835 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
|
836 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
|
837 if p.iter() |
e98fd81bb151
rust-clippy: fix most warnings in `hg-core`
Raphaël Gomès <rgomes@octobus.net>
parents:
49913
diff
changeset
|
838 .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
|
839 { |
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
|
840 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
|
841 } |
48311
6d69e83e6b6e
rhg: more efficient `HgPath::join`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
47409
diff
changeset
|
842 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
|
843 } |
48311
6d69e83e6b6e
rhg: more efficient `HgPath::join`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
47409
diff
changeset
|
844 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
|
845 } |
50695
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
|
846 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
|
847 | 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
|
848 | 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
|
849 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
|
850 &[] 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
|
851 } 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
|
852 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
|
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 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
|
855 } |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Raphaël Gomès <rgomes@octobus.net>
parents:
44519
diff
changeset
|
856 PatternSyntax::RootFiles => { |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Raphaël Gomès <rgomes@octobus.net>
parents:
44519
diff
changeset
|
857 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
|
858 &[] 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
|
859 } 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
|
860 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
|
861 }; |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Raphaël Gomès <rgomes@octobus.net>
parents:
44519
diff
changeset
|
862 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
|
863 } |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Raphaël Gomès <rgomes@octobus.net>
parents:
44519
diff
changeset
|
864 _ => { |
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 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
|
866 } |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Raphaël Gomès <rgomes@octobus.net>
parents:
44519
diff
changeset
|
867 } |
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 } |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Raphaël Gomès <rgomes@octobus.net>
parents:
44519
diff
changeset
|
869 (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
|
870 } |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Raphaël Gomès <rgomes@octobus.net>
parents:
44519
diff
changeset
|
871 |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Raphaël Gomès <rgomes@octobus.net>
parents:
44519
diff
changeset
|
872 /// 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
|
873 #[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
|
874 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
|
875 /// 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
|
876 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
|
877 /// 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
|
878 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
|
879 /// Implicitly required directories to go to items in either roots or dirs |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Raphaël Gomès <rgomes@octobus.net>
parents:
44519
diff
changeset
|
880 pub parents: HashSet<HgPathBuf>, |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Raphaël Gomès <rgomes@octobus.net>
parents:
44519
diff
changeset
|
881 } |
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 |
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 /// 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
|
884 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
|
885 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
|
886 ) -> 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
|
887 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
|
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 let mut parents = HashSet::new(); |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Raphaël Gomès <rgomes@octobus.net>
parents:
44519
diff
changeset
|
890 |
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 parents.extend( |
50860
f50e71fdfcb4
rust: improve the type on DirsMultiset::from_manifest
Spencer Baugh <sbaugh@janestreet.com>
parents:
50856
diff
changeset
|
892 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
|
893 .iter() |
44973
26114bd6ec60
rust: do a clippy pass
Raphaël Gomès <rgomes@octobus.net>
parents:
44870
diff
changeset
|
894 .map(ToOwned::to_owned), |
44520
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Raphaël Gomès <rgomes@octobus.net>
parents:
44519
diff
changeset
|
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 parents.extend( |
50860
f50e71fdfcb4
rust: improve the type on DirsMultiset::from_manifest
Spencer Baugh <sbaugh@janestreet.com>
parents:
50856
diff
changeset
|
897 DirsMultiset::from_manifest(&roots)? |
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
|
898 .iter() |
44973
26114bd6ec60
rust: do a clippy pass
Raphaël Gomès <rgomes@octobus.net>
parents:
44870
diff
changeset
|
899 .map(ToOwned::to_owned), |
44520
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Raphaël Gomès <rgomes@octobus.net>
parents:
44519
diff
changeset
|
900 ); |
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 |
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 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
|
903 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
|
904 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
|
905 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
|
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 |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
909 /// 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
|
910 /// should be matched. |
49930
e98fd81bb151
rust-clippy: fix most warnings in `hg-core`
Raphaël Gomès <rgomes@octobus.net>
parents:
49913
diff
changeset
|
911 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
|
912 ignore_patterns: Vec<IgnorePattern>, |
50861
090658724abf
rust: de-hardcode glob_suffix
Spencer Baugh <sbaugh@janestreet.com>
parents:
50860
diff
changeset
|
913 glob_suffix: &[u8], |
49930
e98fd81bb151
rust-clippy: fix most warnings in `hg-core`
Raphaël Gomès <rgomes@octobus.net>
parents:
49913
diff
changeset
|
914 ) -> 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
|
915 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
|
916 // For debugging and printing |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
917 let mut patterns = vec![]; |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
918 |
47379
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
919 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
|
920 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
921 if !subincludes.is_empty() { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
922 // Build prefix-based matcher functions for subincludes |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
923 let mut submatchers = FastHashMap::default(); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
924 let mut prefixes = vec![]; |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
925 |
47379
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
926 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
|
927 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
|
928 let match_fn = |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
929 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
|
930 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
|
931 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
|
932 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
933 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
934 let match_subinclude = move |filename: &HgPath| { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
935 for prefix in prefixes.iter() { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
936 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
|
937 if (submatchers[prefix])(rel) { |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
938 return true; |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
939 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
940 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
941 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
942 false |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
943 }; |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
944 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
945 match_funcs.push(Box::new(match_subinclude)); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
946 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
947 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
948 if !ignore_patterns.is_empty() { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
949 // 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
|
950 // with a regex. |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
951 if ignore_patterns |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
952 .iter() |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
953 .all(|k| k.syntax == PatternSyntax::RootFiles) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
954 { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
955 let dirs: HashSet<_> = ignore_patterns |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
956 .iter() |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
957 .map(|k| k.pattern.to_owned()) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
958 .collect(); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
959 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
|
960 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
961 let match_func = move |path: &HgPath| -> bool { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
962 let path = path.as_bytes(); |
51274
bec6e9c108fd
matchers: use correct method for finding index in vector
Martin von Zweigbergk <martinvonz@google.com>
parents:
51120
diff
changeset
|
963 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:
51120
diff
changeset
|
964 let dir = if let Some(i) = i { &path[..i] } else { b"." }; |
51120
532e74ad3ff6
rust: run a clippy pass with the latest stable version
Raphaël Gomès <rgomes@octobus.net>
parents:
51109
diff
changeset
|
965 dirs.contains(dir) |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
966 }; |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
967 match_funcs.push(Box::new(match_func)); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
968 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
969 patterns.extend(b"rootfilesin: "); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
970 dirs_vec.sort(); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
971 patterns.extend(dirs_vec.escaped_bytes()); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
972 } else { |
50861
090658724abf
rust: de-hardcode glob_suffix
Spencer Baugh <sbaugh@janestreet.com>
parents:
50860
diff
changeset
|
973 let (new_re, match_func) = |
090658724abf
rust: de-hardcode glob_suffix
Spencer Baugh <sbaugh@janestreet.com>
parents:
50860
diff
changeset
|
974 build_regex_match(&ignore_patterns, glob_suffix)?; |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
975 patterns = new_re; |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
976 match_funcs.push(match_func) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
977 } |
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 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
980 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
|
981 (patterns, match_funcs.remove(0)) |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
982 } else { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
983 ( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
984 patterns, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
985 Box::new(move |f: &HgPath| -> bool { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
986 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
|
987 }), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
988 ) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
989 }) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
990 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
991 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
992 /// 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
|
993 /// 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
|
994 /// ignored. |
48355
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
995 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
|
996 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
|
997 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
|
998 inspect_pattern_bytes: &mut impl FnMut(&Path, &[u8]), |
48355
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
999 ) -> PatternResult<(IncludeMatcher<'a>, Vec<PatternFileWarning>)> { |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1000 let mut all_patterns = vec![]; |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1001 let mut all_warnings = vec![]; |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1002 |
47409
0ef8231e413f
dirstate-v2: Store a hash of ignore patterns (.hgignore)
Simon Sapin <simon.sapin@octobus.net>
parents:
47379
diff
changeset
|
1003 // 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
|
1004 // 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
|
1005 // 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
|
1006 // 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
|
1007 // (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
|
1008 all_pattern_files |
0ef8231e413f
dirstate-v2: Store a hash of ignore patterns (.hgignore)
Simon Sapin <simon.sapin@octobus.net>
parents:
47379
diff
changeset
|
1009 .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
|
1010 |
47378
777c3d231913
rust: Make some file path parameters less generic
Simon Sapin <simon.sapin@octobus.net>
parents:
45607
diff
changeset
|
1011 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
|
1012 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
|
1013 pattern_file, |
0ef8231e413f
dirstate-v2: Store a hash of ignore patterns (.hgignore)
Simon Sapin <simon.sapin@octobus.net>
parents:
47379
diff
changeset
|
1014 root_dir, |
0ef8231e413f
dirstate-v2: Store a hash of ignore patterns (.hgignore)
Simon Sapin <simon.sapin@octobus.net>
parents:
47379
diff
changeset
|
1015 inspect_pattern_bytes, |
0ef8231e413f
dirstate-v2: Store a hash of ignore patterns (.hgignore)
Simon Sapin <simon.sapin@octobus.net>
parents:
47379
diff
changeset
|
1016 )?; |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1017 |
44597
e62052d0f377
rust-status: only involve ignore mechanism when needed
Raphaël Gomès <rgomes@octobus.net>
parents:
44593
diff
changeset
|
1018 all_patterns.extend(patterns.to_owned()); |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1019 all_warnings.extend(warnings); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1020 } |
47379
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1021 let matcher = IncludeMatcher::new(all_patterns)?; |
48355
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1022 Ok((matcher, all_warnings)) |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1023 } |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1024 |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1025 /// 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
|
1026 /// 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
|
1027 /// ignored. |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1028 pub fn get_ignore_function<'a>( |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1029 all_pattern_files: Vec<PathBuf>, |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1030 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
|
1031 inspect_pattern_bytes: &mut impl FnMut(&Path, &[u8]), |
48355
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1032 ) -> PatternResult<(IgnoreFnType<'a>, Vec<PatternFileWarning>)> { |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1033 let res = |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1034 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
|
1035 res.map(|(matcher, all_warnings)| { |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1036 let res: IgnoreFnType<'a> = |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1037 Box::new(move |path: &HgPath| matcher.matches(path)); |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1038 |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1039 (res, all_warnings) |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1040 }) |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1041 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1042 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1043 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
|
1044 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
|
1045 let RootsDirsAndParents { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1046 roots, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1047 dirs, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1048 parents, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1049 } = 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
|
1050 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
|
1051 matches!(k.syntax, PatternSyntax::Path | PatternSyntax::RelPath) |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1052 }); |
50861
090658724abf
rust: de-hardcode glob_suffix
Spencer Baugh <sbaugh@janestreet.com>
parents:
50860
diff
changeset
|
1053 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
|
1054 |
47379
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1055 Ok(Self { |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1056 patterns, |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1057 match_fn, |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1058 prefix, |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1059 roots, |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1060 dirs, |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1061 parents, |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1062 }) |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1063 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1064 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1065 fn get_all_parents_children(&self) -> DirsChildrenMultiset { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1066 // TODO cache |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1067 let thing = self |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1068 .dirs |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1069 .iter() |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1070 .chain(self.roots.iter()) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1071 .chain(self.parents.iter()); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1072 DirsChildrenMultiset::new(thing, Some(&self.parents)) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1073 } |
48355
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1074 |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1075 pub fn debug_get_patterns(&self) -> &[u8] { |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1076 self.patterns.as_ref() |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
1077 } |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1078 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1079 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1080 impl<'a> Display for IncludeMatcher<'a> { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1081 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
|
1082 // 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
|
1083 // 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
|
1084 // 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
|
1085 // 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
|
1086 // 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
|
1087 // (on purpose) missing from the `includes`. |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1088 write!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1089 f, |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1090 "IncludeMatcher(includes='{}')", |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1091 String::from_utf8_lossy(&self.patterns.escaped_bytes()) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1092 ) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1093 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1094 } |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1095 |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1096 #[cfg(test)] |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1097 mod tests { |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1098 use super::*; |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1099 use pretty_assertions::assert_eq; |
44520
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Raphaël Gomès <rgomes@octobus.net>
parents:
44519
diff
changeset
|
1100 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
|
1101 |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Raphaël Gomès <rgomes@octobus.net>
parents:
44519
diff
changeset
|
1102 #[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
|
1103 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
|
1104 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
|
1105 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
|
1106 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
|
1107 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
|
1108 ]; |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Raphaël Gomès <rgomes@octobus.net>
parents:
44519
diff
changeset
|
1109 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
|
1110 |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Raphaël Gomès <rgomes@octobus.net>
parents:
44519
diff
changeset
|
1111 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
|
1112 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
|
1113 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
|
1114 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
|
1115 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
|
1116 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
|
1117 ), |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Raphaël Gomès <rgomes@octobus.net>
parents:
44519
diff
changeset
|
1118 ); |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Raphaël Gomès <rgomes@octobus.net>
parents:
44519
diff
changeset
|
1119 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
|
1120 } |
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 |
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 #[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
|
1123 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
|
1124 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
|
1125 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
|
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*", 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 ]; |
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 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
|
1131 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
|
1132 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
|
1133 |
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 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
|
1135 |
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 let mut parents = HashSet::new(); |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Raphaël Gomès <rgomes@octobus.net>
parents:
44519
diff
changeset
|
1137 parents.insert(HgPathBuf::new()); |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Raphaël Gomès <rgomes@octobus.net>
parents:
44519
diff
changeset
|
1138 parents.insert(HgPathBuf::from_bytes(b"g")); |
d4e8cfcde012
rust-matchers: add functions to get roots, dirs and parents from patterns
Raphaël Gomès <rgomes@octobus.net>
parents:
44519
diff
changeset
|
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!( |
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 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
|
1142 RootsDirsAndParents { |
483fce658e43
rust-status: refactor options into a `StatusOptions` struct
Raphaël Gomès <rgomes@octobus.net>
parents:
44522
diff
changeset
|
1143 roots, |
483fce658e43
rust-status: refactor options into a `StatusOptions` struct
Raphaël Gomès <rgomes@octobus.net>
parents:
44522
diff
changeset
|
1144 dirs, |
483fce658e43
rust-status: refactor options into a `StatusOptions` struct
Raphaël Gomès <rgomes@octobus.net>
parents:
44522
diff
changeset
|
1145 parents |
483fce658e43
rust-status: refactor options into a `StatusOptions` struct
Raphaël Gomès <rgomes@octobus.net>
parents:
44522
diff
changeset
|
1146 } |
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
|
1147 ); |
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 } |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1149 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1150 #[test] |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1151 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
|
1152 // Visitchildrenset |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Raphaël Gomès <rgomes@octobus.net>
parents:
44973
diff
changeset
|
1153 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
|
1154 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
|
1155 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1156 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
48355
diff
changeset
|
1157 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
|
1158 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1159 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
|
1160 VisitChildrenSet::Set(set) |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1161 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1162 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1163 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
48355
diff
changeset
|
1164 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
|
1165 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1166 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
|
1167 VisitChildrenSet::Set(set) |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1168 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1169 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1170 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
48355
diff
changeset
|
1171 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
|
1172 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1173 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
|
1174 VisitChildrenSet::Set(set) |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1175 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1176 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1177 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1178 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
|
1179 VisitChildrenSet::Empty |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1180 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1181 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1182 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
|
1183 VisitChildrenSet::Empty |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1184 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1185 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1186 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
|
1187 VisitChildrenSet::Empty |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1188 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1189 } |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1190 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1191 #[test] |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1192 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
|
1193 let files = vec![ |
45607
75f785888a7b
rust-matchers: make `Matcher` trait object-safe
Raphaël Gomès <rgomes@octobus.net>
parents:
44973
diff
changeset
|
1194 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
|
1195 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
|
1196 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
|
1197 // 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
|
1198 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
|
1199 ]; |
49345
137d6bb71937
rust: use owned types in `Matcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
48355
diff
changeset
|
1200 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
|
1201 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1202 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
48355
diff
changeset
|
1203 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
|
1204 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
|
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"")), |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1207 VisitChildrenSet::Set(set) |
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 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1210 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
48355
diff
changeset
|
1211 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
|
1212 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
|
1213 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1214 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
|
1215 VisitChildrenSet::Set(set) |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1216 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1217 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1218 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
48355
diff
changeset
|
1219 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
|
1220 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
|
1221 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1222 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
|
1223 VisitChildrenSet::Set(set) |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1224 ); |
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"d")); |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1228 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1229 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
|
1230 VisitChildrenSet::Set(set) |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1231 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1232 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
48355
diff
changeset
|
1233 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
|
1234 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1235 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
|
1236 VisitChildrenSet::Set(set) |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1237 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1238 |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1239 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1240 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
|
1241 VisitChildrenSet::Empty |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1242 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1243 assert_eq!( |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1244 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
|
1245 VisitChildrenSet::Empty |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1246 ); |
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
1247 } |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1248 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1249 #[test] |
50865
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1250 fn test_patternmatcher() { |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1251 // VisitdirPrefix |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1252 let m = PatternMatcher::new(vec![IgnorePattern::new( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1253 PatternSyntax::Path, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1254 b"dir/subdir", |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1255 Path::new(""), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1256 )]) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1257 .unwrap(); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1258 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1259 m.visit_children_set(HgPath::new(b"")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1260 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1261 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1262 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1263 m.visit_children_set(HgPath::new(b"dir")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1264 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1265 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1266 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1267 m.visit_children_set(HgPath::new(b"dir/subdir")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1268 VisitChildrenSet::Recursive |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1269 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1270 // OPT: This should probably be Recursive if its parent is? |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1271 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1272 m.visit_children_set(HgPath::new(b"dir/subdir/x")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1273 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1274 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1275 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1276 m.visit_children_set(HgPath::new(b"folder")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1277 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1278 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1279 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1280 // VisitchildrensetPrefix |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1281 let m = PatternMatcher::new(vec![IgnorePattern::new( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1282 PatternSyntax::Path, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1283 b"dir/subdir", |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1284 Path::new(""), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1285 )]) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1286 .unwrap(); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1287 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1288 m.visit_children_set(HgPath::new(b"")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1289 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1290 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1291 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1292 m.visit_children_set(HgPath::new(b"dir")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1293 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1294 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1295 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1296 m.visit_children_set(HgPath::new(b"dir/subdir")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1297 VisitChildrenSet::Recursive |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1298 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1299 // OPT: This should probably be Recursive if its parent is? |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1300 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1301 m.visit_children_set(HgPath::new(b"dir/subdir/x")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1302 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1303 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1304 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1305 m.visit_children_set(HgPath::new(b"folder")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1306 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1307 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1308 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1309 // VisitdirRootfilesin |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1310 let m = PatternMatcher::new(vec![IgnorePattern::new( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1311 PatternSyntax::RootFiles, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1312 b"dir/subdir", |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1313 Path::new(""), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1314 )]) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1315 .unwrap(); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1316 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1317 m.visit_children_set(HgPath::new(b"dir/subdir/x")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1318 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1319 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1320 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1321 m.visit_children_set(HgPath::new(b"folder")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1322 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1323 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1324 // FIXME: These should probably be This. |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1325 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1326 m.visit_children_set(HgPath::new(b"")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1327 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1328 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1329 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1330 m.visit_children_set(HgPath::new(b"dir")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1331 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1332 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1333 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1334 m.visit_children_set(HgPath::new(b"dir/subdir")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1335 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1336 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1337 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1338 // VisitchildrensetRootfilesin |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1339 let m = PatternMatcher::new(vec![IgnorePattern::new( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1340 PatternSyntax::RootFiles, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1341 b"dir/subdir", |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1342 Path::new(""), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1343 )]) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1344 .unwrap(); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1345 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1346 m.visit_children_set(HgPath::new(b"dir/subdir/x")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1347 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1348 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1349 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1350 m.visit_children_set(HgPath::new(b"folder")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1351 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1352 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1353 // FIXME: These should probably be {'dir'}, {'subdir'} and This, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1354 // respectively, or at least This for all three. |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1355 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1356 m.visit_children_set(HgPath::new(b"")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1357 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1358 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1359 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1360 m.visit_children_set(HgPath::new(b"dir")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1361 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1362 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1363 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1364 m.visit_children_set(HgPath::new(b"dir/subdir")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1365 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1366 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1367 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1368 // VisitdirGlob |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1369 let m = PatternMatcher::new(vec![IgnorePattern::new( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1370 PatternSyntax::Glob, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1371 b"dir/z*", |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1372 Path::new(""), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1373 )]) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1374 .unwrap(); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1375 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1376 m.visit_children_set(HgPath::new(b"")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1377 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1378 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1379 // FIXME: This probably should be This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1380 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1381 m.visit_children_set(HgPath::new(b"dir")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1382 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1383 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1384 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1385 m.visit_children_set(HgPath::new(b"folder")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1386 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1387 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1388 // OPT: these should probably be False. |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1389 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1390 m.visit_children_set(HgPath::new(b"dir/subdir")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1391 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1392 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1393 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1394 m.visit_children_set(HgPath::new(b"dir/subdir/x")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1395 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1396 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1397 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1398 // VisitchildrensetGlob |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1399 let m = PatternMatcher::new(vec![IgnorePattern::new( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1400 PatternSyntax::Glob, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1401 b"dir/z*", |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1402 Path::new(""), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1403 )]) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1404 .unwrap(); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1405 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1406 m.visit_children_set(HgPath::new(b"")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1407 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1408 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1409 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1410 m.visit_children_set(HgPath::new(b"folder")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1411 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1412 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1413 // FIXME: This probably should be This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1414 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1415 m.visit_children_set(HgPath::new(b"dir")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1416 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1417 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1418 // OPT: these should probably be Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1419 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1420 m.visit_children_set(HgPath::new(b"dir/subdir")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1421 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1422 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1423 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1424 m.visit_children_set(HgPath::new(b"dir/subdir/x")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1425 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1426 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1427 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1428 // VisitdirFilepath |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1429 let m = PatternMatcher::new(vec![IgnorePattern::new( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1430 PatternSyntax::FilePath, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1431 b"dir/z", |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1432 Path::new(""), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1433 )]) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1434 .unwrap(); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1435 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1436 m.visit_children_set(HgPath::new(b"")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1437 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1438 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1439 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1440 m.visit_children_set(HgPath::new(b"dir")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1441 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1442 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1443 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1444 m.visit_children_set(HgPath::new(b"folder")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1445 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1446 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1447 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1448 m.visit_children_set(HgPath::new(b"dir/subdir")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1449 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1450 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1451 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1452 m.visit_children_set(HgPath::new(b"dir/subdir/x")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1453 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1454 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1455 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1456 // VisitchildrensetFilepath |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1457 let m = PatternMatcher::new(vec![IgnorePattern::new( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1458 PatternSyntax::FilePath, |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1459 b"dir/z", |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1460 Path::new(""), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1461 )]) |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1462 .unwrap(); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1463 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1464 m.visit_children_set(HgPath::new(b"")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1465 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1466 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1467 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1468 m.visit_children_set(HgPath::new(b"folder")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1469 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1470 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1471 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1472 m.visit_children_set(HgPath::new(b"dir")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1473 VisitChildrenSet::This |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1474 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1475 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1476 m.visit_children_set(HgPath::new(b"dir/subdir")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1477 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1478 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1479 assert_eq!( |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1480 m.visit_children_set(HgPath::new(b"dir/subdir/x")), |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1481 VisitChildrenSet::Empty |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1482 ); |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1483 } |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1484 |
f874342fa568
rust-matchers: add PatternMatcher
Spencer Baugh <sbaugh@janestreet.com>
parents:
50861
diff
changeset
|
1485 #[test] |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1486 fn test_includematcher() { |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1487 // VisitchildrensetPrefix |
47379
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1488 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
|
1489 PatternSyntax::RelPath, |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1490 b"dir/subdir", |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1491 Path::new(""), |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1492 )]) |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1493 .unwrap(); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1494 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1495 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
48355
diff
changeset
|
1496 set.insert(HgPathBuf::from_bytes(b"dir")); |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1497 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1498 matcher.visit_children_set(HgPath::new(b"")), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1499 VisitChildrenSet::Set(set) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1500 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1501 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1502 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
48355
diff
changeset
|
1503 set.insert(HgPathBuf::from_bytes(b"subdir")); |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1504 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1505 matcher.visit_children_set(HgPath::new(b"dir")), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1506 VisitChildrenSet::Set(set) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1507 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1508 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1509 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
|
1510 VisitChildrenSet::Recursive |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1511 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1512 // 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
|
1513 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1514 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
|
1515 VisitChildrenSet::This |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1516 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1517 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1518 matcher.visit_children_set(HgPath::new(b"folder")), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1519 VisitChildrenSet::Empty |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1520 ); |
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 // VisitchildrensetRootfilesin |
47379
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1523 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
|
1524 PatternSyntax::RootFiles, |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1525 b"dir/subdir", |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1526 Path::new(""), |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1527 )]) |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1528 .unwrap(); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1529 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1530 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
48355
diff
changeset
|
1531 set.insert(HgPathBuf::from_bytes(b"dir")); |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1532 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1533 matcher.visit_children_set(HgPath::new(b"")), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1534 VisitChildrenSet::Set(set) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1535 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1536 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1537 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
48355
diff
changeset
|
1538 set.insert(HgPathBuf::from_bytes(b"subdir")); |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1539 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1540 matcher.visit_children_set(HgPath::new(b"dir")), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1541 VisitChildrenSet::Set(set) |
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 |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1544 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1545 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
|
1546 VisitChildrenSet::This |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1547 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1548 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1549 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
|
1550 VisitChildrenSet::Empty |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1551 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1552 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1553 matcher.visit_children_set(HgPath::new(b"folder")), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1554 VisitChildrenSet::Empty |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1555 ); |
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 // VisitchildrensetGlob |
47379
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1558 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
|
1559 PatternSyntax::Glob, |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1560 b"dir/z*", |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1561 Path::new(""), |
f6bb181c75f8
rust: Parse "subinclude"d files along the way, not later
Simon Sapin <simon.sapin@octobus.net>
parents:
47378
diff
changeset
|
1562 )]) |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1563 .unwrap(); |
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 let mut set = HashSet::new(); |
49345
137d6bb71937
rust: use owned types in `Matcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
48355
diff
changeset
|
1566 set.insert(HgPathBuf::from_bytes(b"dir")); |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1567 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1568 matcher.visit_children_set(HgPath::new(b"")), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1569 VisitChildrenSet::Set(set) |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1570 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1571 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1572 matcher.visit_children_set(HgPath::new(b"folder")), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1573 VisitChildrenSet::Empty |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1574 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1575 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1576 matcher.visit_children_set(HgPath::new(b"dir")), |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1577 VisitChildrenSet::This |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1578 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1579 // OPT: these should probably be set(). |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1580 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1581 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
|
1582 VisitChildrenSet::This |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1583 ); |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1584 assert_eq!( |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1585 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
|
1586 VisitChildrenSet::This |
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1587 ); |
49464
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Raphaël Gomès <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1588 |
50695
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
|
1589 // 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
|
1590 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
|
1591 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
|
1592 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
|
1593 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
|
1594 )]) |
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
|
1595 .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
|
1596 |
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
|
1597 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
|
1598 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
|
1599 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
|
1600 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
|
1601 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
|
1602 ); |
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
|
1603 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
|
1604 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
|
1605 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
|
1606 ); |
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
|
1607 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
|
1608 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
|
1609 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
|
1610 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
|
1611 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
|
1612 ); |
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 // 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
|
1614 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
|
1615 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
|
1616 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
|
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 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
|
1619 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
|
1620 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
|
1621 ); |
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 |
49464
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Raphaël Gomès <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1623 // Test multiple patterns |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Raphaël Gomès <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1624 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
|
1625 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
|
1626 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
|
1627 ]) |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Raphaël Gomès <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1628 .unwrap(); |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Raphaël Gomès <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1629 |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Raphaël Gomès <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1630 assert_eq!( |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Raphaël Gomès <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1631 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
|
1632 VisitChildrenSet::This |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Raphaël Gomès <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1633 ); |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Raphaël Gomès <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1634 |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Raphaël Gomès <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1635 // Test multiple patterns |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Raphaël Gomès <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1636 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
|
1637 PatternSyntax::Glob, |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Raphaël Gomès <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1638 b"**/*.exe", |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Raphaël Gomès <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1639 Path::new(""), |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Raphaël Gomès <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1640 )]) |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Raphaël Gomès <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1641 .unwrap(); |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Raphaël Gomès <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1642 |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Raphaël Gomès <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1643 assert_eq!( |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Raphaël Gomès <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1644 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
|
1645 VisitChildrenSet::This |
90512ca6a255
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
Raphaël Gomès <rgomes@octobus.net>
parents:
49351
diff
changeset
|
1646 ); |
44522
c697638e0e91
rust-matchers: add `IgnoreMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44521
diff
changeset
|
1647 } |
49347
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1648 |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1649 #[test] |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1650 fn test_unionmatcher() { |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1651 // Path + Rootfiles |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1652 let m1 = IncludeMatcher::new(vec![IgnorePattern::new( |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1653 PatternSyntax::RelPath, |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1654 b"dir/subdir", |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1655 Path::new(""), |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1656 )]) |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1657 .unwrap(); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1658 let m2 = IncludeMatcher::new(vec![IgnorePattern::new( |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1659 PatternSyntax::RootFiles, |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1660 b"dir", |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1661 Path::new(""), |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1662 )]) |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1663 .unwrap(); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1664 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
|
1665 |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1666 let mut set = HashSet::new(); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1667 set.insert(HgPathBuf::from_bytes(b"dir")); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1668 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1669 matcher.visit_children_set(HgPath::new(b"")), |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1670 VisitChildrenSet::Set(set) |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1671 ); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1672 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1673 matcher.visit_children_set(HgPath::new(b"dir")), |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1674 VisitChildrenSet::This |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1675 ); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1676 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1677 matcher.visit_children_set(HgPath::new(b"dir/subdir")), |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1678 VisitChildrenSet::Recursive |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1679 ); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1680 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1681 matcher.visit_children_set(HgPath::new(b"dir/foo")), |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1682 VisitChildrenSet::Empty |
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 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1685 matcher.visit_children_set(HgPath::new(b"folder")), |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1686 VisitChildrenSet::Empty |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1687 ); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1688 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1689 matcher.visit_children_set(HgPath::new(b"folder")), |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1690 VisitChildrenSet::Empty |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1691 ); |
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 // 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
|
1694 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1695 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
|
1696 VisitChildrenSet::This |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1697 ); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1698 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1699 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
|
1700 VisitChildrenSet::This |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1701 ); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1702 |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1703 // Path + unrelated Path |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1704 let m1 = IncludeMatcher::new(vec![IgnorePattern::new( |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1705 PatternSyntax::RelPath, |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1706 b"dir/subdir", |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1707 Path::new(""), |
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 .unwrap(); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1710 let m2 = IncludeMatcher::new(vec![IgnorePattern::new( |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1711 PatternSyntax::RelPath, |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1712 b"folder", |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1713 Path::new(""), |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1714 )]) |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1715 .unwrap(); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1716 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
|
1717 |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1718 let mut set = HashSet::new(); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1719 set.insert(HgPathBuf::from_bytes(b"folder")); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1720 set.insert(HgPathBuf::from_bytes(b"dir")); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1721 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1722 matcher.visit_children_set(HgPath::new(b"")), |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1723 VisitChildrenSet::Set(set) |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1724 ); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1725 let mut set = HashSet::new(); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1726 set.insert(HgPathBuf::from_bytes(b"subdir")); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1727 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1728 matcher.visit_children_set(HgPath::new(b"dir")), |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1729 VisitChildrenSet::Set(set) |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1730 ); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1731 |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1732 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1733 matcher.visit_children_set(HgPath::new(b"dir/subdir")), |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1734 VisitChildrenSet::Recursive |
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 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1737 matcher.visit_children_set(HgPath::new(b"dir/foo")), |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1738 VisitChildrenSet::Empty |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1739 ); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1740 |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1741 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1742 matcher.visit_children_set(HgPath::new(b"folder")), |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1743 VisitChildrenSet::Recursive |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1744 ); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1745 // 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
|
1746 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1747 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
|
1748 VisitChildrenSet::This |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1749 ); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1750 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1751 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
|
1752 VisitChildrenSet::This |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1753 ); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1754 |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1755 // Path + subpath |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1756 let m1 = IncludeMatcher::new(vec![IgnorePattern::new( |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1757 PatternSyntax::RelPath, |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1758 b"dir/subdir/x", |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1759 Path::new(""), |
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 .unwrap(); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1762 let m2 = IncludeMatcher::new(vec![IgnorePattern::new( |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1763 PatternSyntax::RelPath, |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1764 b"dir/subdir", |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1765 Path::new(""), |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1766 )]) |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1767 .unwrap(); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1768 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
|
1769 |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1770 let mut set = HashSet::new(); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1771 set.insert(HgPathBuf::from_bytes(b"dir")); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1772 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1773 matcher.visit_children_set(HgPath::new(b"")), |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1774 VisitChildrenSet::Set(set) |
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 let mut set = HashSet::new(); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1777 set.insert(HgPathBuf::from_bytes(b"subdir")); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1778 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1779 matcher.visit_children_set(HgPath::new(b"dir")), |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1780 VisitChildrenSet::Set(set) |
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 |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1783 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1784 matcher.visit_children_set(HgPath::new(b"dir/subdir")), |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1785 VisitChildrenSet::Recursive |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1786 ); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1787 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1788 matcher.visit_children_set(HgPath::new(b"dir/foo")), |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1789 VisitChildrenSet::Empty |
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 |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1792 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1793 matcher.visit_children_set(HgPath::new(b"folder")), |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1794 VisitChildrenSet::Empty |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1795 ); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1796 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1797 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
|
1798 VisitChildrenSet::Recursive |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1799 ); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1800 // OPT: this should probably be 'all' not 'this'. |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1801 assert_eq!( |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1802 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
|
1803 VisitChildrenSet::This |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1804 ); |
b508cffd3c04
rust: add UnionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49345
diff
changeset
|
1805 } |
49349
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1806 |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1807 #[test] |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1808 fn test_intersectionmatcher() { |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1809 // Include path + Include rootfiles |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1810 let m1 = Box::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1811 IncludeMatcher::new(vec![IgnorePattern::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1812 PatternSyntax::RelPath, |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1813 b"dir/subdir", |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1814 Path::new(""), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1815 )]) |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1816 .unwrap(), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1817 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1818 let m2 = Box::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1819 IncludeMatcher::new(vec![IgnorePattern::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1820 PatternSyntax::RootFiles, |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1821 b"dir", |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1822 Path::new(""), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1823 )]) |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1824 .unwrap(), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1825 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1826 let matcher = IntersectionMatcher::new(m1, m2); |
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 let mut set = HashSet::new(); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1829 set.insert(HgPathBuf::from_bytes(b"dir")); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1830 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1831 matcher.visit_children_set(HgPath::new(b"")), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1832 VisitChildrenSet::Set(set) |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1833 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1834 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1835 matcher.visit_children_set(HgPath::new(b"dir")), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1836 VisitChildrenSet::This |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1837 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1838 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1839 matcher.visit_children_set(HgPath::new(b"dir/subdir")), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1840 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1841 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1842 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1843 matcher.visit_children_set(HgPath::new(b"dir/foo")), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1844 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1845 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1846 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1847 matcher.visit_children_set(HgPath::new(b"folder")), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1848 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1849 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1850 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1851 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
|
1852 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1853 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1854 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1855 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
|
1856 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1857 ); |
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 // Non intersecting paths |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1860 let m1 = Box::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1861 IncludeMatcher::new(vec![IgnorePattern::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1862 PatternSyntax::RelPath, |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1863 b"dir/subdir", |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1864 Path::new(""), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1865 )]) |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1866 .unwrap(), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1867 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1868 let m2 = Box::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1869 IncludeMatcher::new(vec![IgnorePattern::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1870 PatternSyntax::RelPath, |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1871 b"folder", |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1872 Path::new(""), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1873 )]) |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1874 .unwrap(), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1875 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1876 let matcher = IntersectionMatcher::new(m1, m2); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1877 |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1878 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1879 matcher.visit_children_set(HgPath::new(b"")), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1880 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1881 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1882 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1883 matcher.visit_children_set(HgPath::new(b"dir")), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1884 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1885 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1886 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1887 matcher.visit_children_set(HgPath::new(b"dir/subdir")), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1888 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1889 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1890 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1891 matcher.visit_children_set(HgPath::new(b"dir/foo")), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1892 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1893 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1894 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1895 matcher.visit_children_set(HgPath::new(b"folder")), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1896 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1897 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1898 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1899 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
|
1900 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1901 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1902 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1903 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
|
1904 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1905 ); |
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 // Nested paths |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1908 let m1 = Box::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1909 IncludeMatcher::new(vec![IgnorePattern::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1910 PatternSyntax::RelPath, |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1911 b"dir/subdir/x", |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1912 Path::new(""), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1913 )]) |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1914 .unwrap(), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1915 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1916 let m2 = Box::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1917 IncludeMatcher::new(vec![IgnorePattern::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1918 PatternSyntax::RelPath, |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1919 b"dir/subdir", |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1920 Path::new(""), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1921 )]) |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1922 .unwrap(), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1923 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1924 let matcher = IntersectionMatcher::new(m1, m2); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1925 |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1926 let mut set = HashSet::new(); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1927 set.insert(HgPathBuf::from_bytes(b"dir")); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1928 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1929 matcher.visit_children_set(HgPath::new(b"")), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1930 VisitChildrenSet::Set(set) |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1931 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1932 |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1933 let mut set = HashSet::new(); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1934 set.insert(HgPathBuf::from_bytes(b"subdir")); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1935 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1936 matcher.visit_children_set(HgPath::new(b"dir")), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1937 VisitChildrenSet::Set(set) |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1938 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1939 let mut set = HashSet::new(); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1940 set.insert(HgPathBuf::from_bytes(b"x")); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1941 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1942 matcher.visit_children_set(HgPath::new(b"dir/subdir")), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1943 VisitChildrenSet::Set(set) |
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 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1946 matcher.visit_children_set(HgPath::new(b"dir/foo")), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1947 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1948 ); |
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"folder")), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1951 VisitChildrenSet::Empty |
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 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1954 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
|
1955 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1956 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1957 // OPT: this should probably be 'all' not 'this'. |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1958 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1959 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
|
1960 VisitChildrenSet::This |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1961 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1962 |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1963 // Diverging paths |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1964 let m1 = Box::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1965 IncludeMatcher::new(vec![IgnorePattern::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1966 PatternSyntax::RelPath, |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1967 b"dir/subdir/x", |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1968 Path::new(""), |
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 .unwrap(), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1971 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1972 let m2 = Box::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1973 IncludeMatcher::new(vec![IgnorePattern::new( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1974 PatternSyntax::RelPath, |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1975 b"dir/subdir/z", |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1976 Path::new(""), |
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 .unwrap(), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1979 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1980 let matcher = IntersectionMatcher::new(m1, m2); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1981 |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1982 // 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
|
1983 let mut set = HashSet::new(); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1984 set.insert(HgPathBuf::from_bytes(b"dir")); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1985 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1986 matcher.visit_children_set(HgPath::new(b"")), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1987 VisitChildrenSet::Set(set) |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1988 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1989 // 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
|
1990 let mut set = HashSet::new(); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1991 set.insert(HgPathBuf::from_bytes(b"subdir")); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1992 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1993 matcher.visit_children_set(HgPath::new(b"dir")), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1994 VisitChildrenSet::Set(set) |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1995 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1996 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1997 matcher.visit_children_set(HgPath::new(b"dir/subdir")), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1998 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
1999 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2000 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2001 matcher.visit_children_set(HgPath::new(b"dir/foo")), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2002 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2003 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2004 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2005 matcher.visit_children_set(HgPath::new(b"folder")), |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2006 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2007 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2008 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2009 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
|
2010 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2011 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2012 assert_eq!( |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2013 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
|
2014 VisitChildrenSet::Empty |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2015 ); |
5e53ecbc308f
rust: add IntersectionMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49347
diff
changeset
|
2016 } |
49478
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2017 |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2018 #[test] |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2019 fn test_differencematcher() { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2020 // Two alwaysmatchers should function like a nevermatcher |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2021 let m1 = AlwaysMatcher; |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2022 let m2 = AlwaysMatcher; |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2023 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
|
2024 |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2025 for case in &[ |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2026 &b""[..], |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2027 b"dir", |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2028 b"dir/subdir", |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2029 b"dir/subdir/z", |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2030 b"dir/foo", |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2031 b"dir/subdir/x", |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2032 b"folder", |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2033 ] { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2034 assert_eq!( |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2035 matcher.visit_children_set(HgPath::new(case)), |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2036 VisitChildrenSet::Empty |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2037 ); |
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 |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2040 // 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
|
2041 let m1 = AlwaysMatcher; |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2042 let m2 = NeverMatcher; |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2043 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
|
2044 |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2045 for case in &[ |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2046 &b""[..], |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2047 b"dir", |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2048 b"dir/subdir", |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2049 b"dir/subdir/z", |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2050 b"dir/foo", |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2051 b"dir/subdir/x", |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2052 b"folder", |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2053 ] { |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2054 assert_eq!( |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2055 matcher.visit_children_set(HgPath::new(case)), |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2056 VisitChildrenSet::Recursive |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2057 ); |
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 // Two include matchers |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2061 let m1 = Box::new( |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2062 IncludeMatcher::new(vec![IgnorePattern::new( |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2063 PatternSyntax::RelPath, |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2064 b"dir/subdir", |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2065 Path::new("/repo"), |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2066 )]) |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2067 .unwrap(), |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2068 ); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2069 let m2 = Box::new( |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2070 IncludeMatcher::new(vec![IgnorePattern::new( |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2071 PatternSyntax::RootFiles, |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2072 b"dir", |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2073 Path::new("/repo"), |
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 .unwrap(), |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2076 ); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2077 |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2078 let matcher = DifferenceMatcher::new(m1, m2); |
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 let mut set = HashSet::new(); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2081 set.insert(HgPathBuf::from_bytes(b"dir")); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2082 assert_eq!( |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2083 matcher.visit_children_set(HgPath::new(b"")), |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2084 VisitChildrenSet::Set(set) |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2085 ); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2086 |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2087 let mut set = HashSet::new(); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2088 set.insert(HgPathBuf::from_bytes(b"subdir")); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2089 assert_eq!( |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2090 matcher.visit_children_set(HgPath::new(b"dir")), |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2091 VisitChildrenSet::Set(set) |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2092 ); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2093 assert_eq!( |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2094 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
|
2095 VisitChildrenSet::Recursive |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2096 ); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2097 assert_eq!( |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2098 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
|
2099 VisitChildrenSet::Empty |
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 assert_eq!( |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2102 matcher.visit_children_set(HgPath::new(b"folder")), |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2103 VisitChildrenSet::Empty |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2104 ); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2105 assert_eq!( |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2106 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
|
2107 VisitChildrenSet::This |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2108 ); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2109 assert_eq!( |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2110 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
|
2111 VisitChildrenSet::This |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2112 ); |
d8ce883ff1f4
rust-matchers: implement DifferenceMatcher
Raphaël Gomès <rgomes@octobus.net>
parents:
49464
diff
changeset
|
2113 } |
44353
54d185eb24b5
rust-matchers: implement `visit_children_set` for `FileMatcher`
Raphaël Gomès <rgomes@octobus.net>
parents:
44006
diff
changeset
|
2114 } |