Mercurial > public > mercurial-scm > hg
annotate rust/hg-core/src/narrow.rs @ 53042:cdd7bf612c7b stable tip
bundle-spec: properly format boolean parameter (issue6960)
This was breaking automatic clone bundle generation. This changeset fixes it and
add a test to catch it in the future.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Tue, 11 Mar 2025 02:29:42 +0100 |
parents | b019b5798e8f |
children |
rev | line source |
---|---|
49489
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
1 use std::path::Path; |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
2 |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
3 use crate::{ |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
4 errors::HgError, |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
5 exit_codes, |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
6 filepatterns::parse_pattern_file_contents, |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
7 matchers::{ |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
8 AlwaysMatcher, DifferenceMatcher, IncludeMatcher, Matcher, |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
9 NeverMatcher, |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
10 }, |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
11 repo::Repo, |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
12 requirements::NARROW_REQUIREMENT, |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
13 sparse::{self, SparseConfigError, SparseWarning}, |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
14 }; |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
15 |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
16 /// The file in .hg/store/ that indicates which paths exit in the store |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
17 const FILENAME: &str = "narrowspec"; |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
18 /// The file in .hg/ that indicates which paths exit in the dirstate |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
19 const DIRSTATE_FILENAME: &str = "narrowspec.dirstate"; |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
20 |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
21 /// Pattern prefixes that are allowed in narrow patterns. This list MUST |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
22 /// only contain patterns that are fast and safe to evaluate. Keep in mind |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
23 /// that patterns are supplied by clients and executed on remote servers |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
24 /// as part of wire protocol commands. That means that changes to this |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
25 /// data structure influence the wire protocol and should not be taken |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
26 /// lightly - especially removals. |
52039
ae1ab6d71f4a
rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50854
diff
changeset
|
27 pub const VALID_PREFIXES: [&str; 2] = ["path:", "rootfilesin:"]; |
49489
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
28 |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
29 /// Return the matcher for the current narrow spec, and all configuration |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
30 /// warnings to display. |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
31 pub fn matcher( |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
32 repo: &Repo, |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
33 ) -> Result<(Box<dyn Matcher + Sync>, Vec<SparseWarning>), SparseConfigError> { |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
34 let mut warnings = vec![]; |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
35 if !repo.requirements().contains(NARROW_REQUIREMENT) { |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
36 return Ok((Box::new(AlwaysMatcher), warnings)); |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
37 } |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
38 // Treat "narrowspec does not exist" the same as "narrowspec file exists |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
39 // and is empty". |
49930
e98fd81bb151
rust-clippy: fix most warnings in `hg-core`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49915
diff
changeset
|
40 let store_spec = repo.store_vfs().try_read(FILENAME)?.unwrap_or_default(); |
e98fd81bb151
rust-clippy: fix most warnings in `hg-core`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49915
diff
changeset
|
41 let working_copy_spec = repo |
e98fd81bb151
rust-clippy: fix most warnings in `hg-core`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49915
diff
changeset
|
42 .hg_vfs() |
e98fd81bb151
rust-clippy: fix most warnings in `hg-core`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49915
diff
changeset
|
43 .try_read(DIRSTATE_FILENAME)? |
e98fd81bb151
rust-clippy: fix most warnings in `hg-core`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49915
diff
changeset
|
44 .unwrap_or_default(); |
49489
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
45 if store_spec != working_copy_spec { |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
46 return Err(HgError::abort( |
49982
7faedeb24eb2
rhg: fix user-facing error message so it matches Python implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49930
diff
changeset
|
47 "abort: working copy's narrowspec is stale", |
49489
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
48 exit_codes::STATE_ERROR, |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
49 Some("run 'hg tracked --update-working-copy'".into()), |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
50 ) |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
51 .into()); |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
52 } |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
53 |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
54 let config = sparse::parse_config( |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
55 &store_spec, |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
56 sparse::SparseConfigContext::Narrow, |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
57 )?; |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
58 |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
59 warnings.extend(config.warnings); |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
60 |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
61 if !config.profiles.is_empty() { |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
62 // TODO (from Python impl) maybe do something with profiles? |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
63 return Err(SparseConfigError::IncludesInNarrow); |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
64 } |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
65 validate_patterns(&config.includes)?; |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
66 validate_patterns(&config.excludes)?; |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
67 |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
68 if config.includes.is_empty() { |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
69 return Ok((Box::new(NeverMatcher), warnings)); |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
70 } |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
71 |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
72 let (patterns, subwarnings) = parse_pattern_file_contents( |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
73 &config.includes, |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
74 Path::new(""), |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
75 None, |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
76 false, |
50854
796b5d6693a4
rust: simplify pattern file parsing
Spencer Baugh <sbaugh@janestreet.com>
parents:
49982
diff
changeset
|
77 true, |
49489
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
78 )?; |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
79 warnings.extend(subwarnings.into_iter().map(From::from)); |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
80 |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
81 let mut m: Box<dyn Matcher + Sync> = |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
82 Box::new(IncludeMatcher::new(patterns)?); |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
83 |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
84 let (patterns, subwarnings) = parse_pattern_file_contents( |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
85 &config.excludes, |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
86 Path::new(""), |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
87 None, |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
88 false, |
50854
796b5d6693a4
rust: simplify pattern file parsing
Spencer Baugh <sbaugh@janestreet.com>
parents:
49982
diff
changeset
|
89 true, |
49489
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
90 )?; |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
91 if !patterns.is_empty() { |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
92 warnings.extend(subwarnings.into_iter().map(From::from)); |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
93 let exclude_matcher = Box::new(IncludeMatcher::new(patterns)?); |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
94 m = Box::new(DifferenceMatcher::new(m, exclude_matcher)); |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
95 } |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
96 |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
97 Ok((m, warnings)) |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
98 } |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
99 |
52719
77b95a4abbb2
narrow: stricter validation of narrowspec patterns in rhg
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52039
diff
changeset
|
100 fn is_whitespace(b: &u8) -> bool { |
77b95a4abbb2
narrow: stricter validation of narrowspec patterns in rhg
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52039
diff
changeset
|
101 // should match what .strip() in Python does |
77b95a4abbb2
narrow: stricter validation of narrowspec patterns in rhg
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52039
diff
changeset
|
102 b.is_ascii_whitespace() || *b == 0x0b |
77b95a4abbb2
narrow: stricter validation of narrowspec patterns in rhg
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52039
diff
changeset
|
103 } |
77b95a4abbb2
narrow: stricter validation of narrowspec patterns in rhg
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52039
diff
changeset
|
104 |
77b95a4abbb2
narrow: stricter validation of narrowspec patterns in rhg
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52039
diff
changeset
|
105 fn starts_or_ends_with_whitespace(s: &[u8]) -> bool { |
77b95a4abbb2
narrow: stricter validation of narrowspec patterns in rhg
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52039
diff
changeset
|
106 let w = |b: Option<&u8>| b.map(is_whitespace).unwrap_or(false); |
77b95a4abbb2
narrow: stricter validation of narrowspec patterns in rhg
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52039
diff
changeset
|
107 w(s.first()) || w(s.last()) |
77b95a4abbb2
narrow: stricter validation of narrowspec patterns in rhg
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52039
diff
changeset
|
108 } |
77b95a4abbb2
narrow: stricter validation of narrowspec patterns in rhg
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52039
diff
changeset
|
109 |
52720
b019b5798e8f
rhg: fix a bug where only the first pattern in narrowspec was validated
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52719
diff
changeset
|
110 fn validate_pattern(pattern: &[u8]) -> Result<(), SparseConfigError> { |
b019b5798e8f
rhg: fix a bug where only the first pattern in narrowspec was validated
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52719
diff
changeset
|
111 if starts_or_ends_with_whitespace(pattern) { |
b019b5798e8f
rhg: fix a bug where only the first pattern in narrowspec was validated
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52719
diff
changeset
|
112 return Err(SparseConfigError::WhitespaceAtEdgeOfPattern( |
b019b5798e8f
rhg: fix a bug where only the first pattern in narrowspec was validated
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52719
diff
changeset
|
113 pattern.to_owned(), |
b019b5798e8f
rhg: fix a bug where only the first pattern in narrowspec was validated
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52719
diff
changeset
|
114 )); |
b019b5798e8f
rhg: fix a bug where only the first pattern in narrowspec was validated
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52719
diff
changeset
|
115 } |
b019b5798e8f
rhg: fix a bug where only the first pattern in narrowspec was validated
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52719
diff
changeset
|
116 for prefix in VALID_PREFIXES.iter() { |
b019b5798e8f
rhg: fix a bug where only the first pattern in narrowspec was validated
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52719
diff
changeset
|
117 if pattern.starts_with(prefix.as_bytes()) { |
b019b5798e8f
rhg: fix a bug where only the first pattern in narrowspec was validated
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52719
diff
changeset
|
118 return Ok(()); |
b019b5798e8f
rhg: fix a bug where only the first pattern in narrowspec was validated
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52719
diff
changeset
|
119 } |
b019b5798e8f
rhg: fix a bug where only the first pattern in narrowspec was validated
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52719
diff
changeset
|
120 } |
b019b5798e8f
rhg: fix a bug where only the first pattern in narrowspec was validated
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52719
diff
changeset
|
121 Err(SparseConfigError::InvalidNarrowPrefix(pattern.to_owned())) |
b019b5798e8f
rhg: fix a bug where only the first pattern in narrowspec was validated
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52719
diff
changeset
|
122 } |
b019b5798e8f
rhg: fix a bug where only the first pattern in narrowspec was validated
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52719
diff
changeset
|
123 |
49489
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
124 fn validate_patterns(patterns: &[u8]) -> Result<(), SparseConfigError> { |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
125 for pattern in patterns.split(|c| *c == b'\n') { |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
126 if pattern.is_empty() { |
52720
b019b5798e8f
rhg: fix a bug where only the first pattern in narrowspec was validated
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52719
diff
changeset
|
127 // TODO: probably not intentionally allowed (only because `split` |
b019b5798e8f
rhg: fix a bug where only the first pattern in narrowspec was validated
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52719
diff
changeset
|
128 // produces "fake" empty line at the end) |
49489
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
129 continue; |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
130 } |
52720
b019b5798e8f
rhg: fix a bug where only the first pattern in narrowspec was validated
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52719
diff
changeset
|
131 validate_pattern(pattern)? |
49489
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
132 } |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
133 Ok(()) |
7c93e38a0bbd
rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
134 } |