annotate rust/hg-core/src/sparse.rs @ 53040: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 42f78c859dd1
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
52067
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
1 use std::{collections::HashSet, fmt::Display, path::Path};
49499
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
2
52067
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
3 use format_bytes::{format_bytes, write_bytes, DisplayBytes};
49499
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
4
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
5 use crate::{
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
6 errors::HgError,
52067
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
7 exit_codes::STATE_ERROR,
52339
22d24f6d6411 rust-lib: remove exports for not too common pattern-related types
Rapha?l Gom?s <rgomes@octobus.net>
parents: 52338
diff changeset
8 filepatterns::{
22d24f6d6411 rust-lib: remove exports for not too common pattern-related types
Rapha?l Gom?s <rgomes@octobus.net>
parents: 52338
diff changeset
9 parse_pattern_file_contents, IgnorePattern, PatternError,
22d24f6d6411 rust-lib: remove exports for not too common pattern-related types
Rapha?l Gom?s <rgomes@octobus.net>
parents: 52338
diff changeset
10 PatternFileWarning, PatternSyntax,
22d24f6d6411 rust-lib: remove exports for not too common pattern-related types
Rapha?l Gom?s <rgomes@octobus.net>
parents: 52338
diff changeset
11 },
49499
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
12 matchers::{
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
13 AlwaysMatcher, DifferenceMatcher, IncludeMatcher, Matcher,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
14 UnionMatcher,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
15 },
52067
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
16 narrow::VALID_PREFIXES,
49499
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
17 operations::cat,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
18 repo::Repo,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
19 requirements::SPARSE_REQUIREMENT,
52774
94e2547e6f3d rust: move code from utils to utils::strings
Mitchell Kember <mkember@janestreet.com>
parents: 52339
diff changeset
20 utils::{hg_path::HgPath, strings::SliceExt},
52339
22d24f6d6411 rust-lib: remove exports for not too common pattern-related types
Rapha?l Gom?s <rgomes@octobus.net>
parents: 52338
diff changeset
21 Revision, NULL_REVISION,
49499
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
22 };
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
23
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
24 /// Command which is triggering the config read
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
25 #[derive(Copy, Clone, Debug)]
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
26 pub enum SparseConfigContext {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
27 Sparse,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
28 Narrow,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
29 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
30
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
31 impl DisplayBytes for SparseConfigContext {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
32 fn display_bytes(
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
33 &self,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
34 output: &mut dyn std::io::Write,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
35 ) -> std::io::Result<()> {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
36 match self {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
37 SparseConfigContext::Sparse => write_bytes!(output, b"sparse"),
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
38 SparseConfigContext::Narrow => write_bytes!(output, b"narrow"),
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
39 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
40 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
41 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
42
52067
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
43 impl Display for SparseConfigContext {
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
44 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
45 match self {
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
46 SparseConfigContext::Sparse => write!(f, "sparse"),
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
47 SparseConfigContext::Narrow => write!(f, "narrow"),
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
48 }
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
49 }
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
50 }
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
51
49499
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
52 /// Possible warnings when reading sparse configuration
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
53 #[derive(Debug, derive_more::From)]
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
54 pub enum SparseWarning {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
55 /// Warns about improper paths that start with "/"
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
56 RootWarning {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
57 context: SparseConfigContext,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
58 line: Vec<u8>,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
59 },
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
60 /// Warns about a profile missing from the given changelog revision
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
61 ProfileNotFound { profile: Vec<u8>, rev: Revision },
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
62 #[from]
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
63 Pattern(PatternFileWarning),
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
64 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
65
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
66 /// Parsed sparse config
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
67 #[derive(Debug, Default)]
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
68 pub struct SparseConfig {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
69 // Line-separated
49502
7c93e38a0bbd rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents: 49499
diff changeset
70 pub(crate) includes: Vec<u8>,
49499
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
71 // Line-separated
49502
7c93e38a0bbd rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents: 49499
diff changeset
72 pub(crate) excludes: Vec<u8>,
7c93e38a0bbd rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents: 49499
diff changeset
73 pub(crate) profiles: HashSet<Vec<u8>>,
7c93e38a0bbd rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents: 49499
diff changeset
74 pub(crate) warnings: Vec<SparseWarning>,
49499
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
75 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
76
49502
7c93e38a0bbd rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents: 49499
diff changeset
77 /// All possible errors when reading sparse/narrow config
49499
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
78 #[derive(Debug, derive_more::From)]
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
79 pub enum SparseConfigError {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
80 IncludesAfterExcludes {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
81 context: SparseConfigContext,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
82 },
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
83 EntryOutsideSection {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
84 context: SparseConfigContext,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
85 line: Vec<u8>,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
86 },
49502
7c93e38a0bbd rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents: 49499
diff changeset
87 /// Narrow config does not support '%include' directives
7c93e38a0bbd rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents: 49499
diff changeset
88 IncludesInNarrow,
7c93e38a0bbd rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents: 49499
diff changeset
89 /// An invalid pattern prefix was given to the narrow spec. Includes the
7c93e38a0bbd rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents: 49499
diff changeset
90 /// entire pattern for context.
7c93e38a0bbd rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents: 49499
diff changeset
91 InvalidNarrowPrefix(Vec<u8>),
52267
77b95a4abbb2 narrow: stricter validation of narrowspec patterns in rhg
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 52067
diff changeset
92 /// Narrow/sparse patterns can not begin or end in whitespace
77b95a4abbb2 narrow: stricter validation of narrowspec patterns in rhg
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 52067
diff changeset
93 /// because the Python parser strips the whitespace when parsing
77b95a4abbb2 narrow: stricter validation of narrowspec patterns in rhg
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 52067
diff changeset
94 /// the config file.
77b95a4abbb2 narrow: stricter validation of narrowspec patterns in rhg
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 52067
diff changeset
95 WhitespaceAtEdgeOfPattern(Vec<u8>),
49499
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
96 #[from]
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
97 HgError(HgError),
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
98 #[from]
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
99 PatternError(PatternError),
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
100 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
101
52067
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
102 impl From<SparseConfigError> for HgError {
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
103 fn from(value: SparseConfigError) -> Self {
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
104 match value {
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
105 SparseConfigError::IncludesAfterExcludes { context } => {
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
106 HgError::Abort {
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
107 message: format!(
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
108 "{} config cannot have includes after excludes",
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
109 context,
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
110 ),
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
111 detailed_exit_code: STATE_ERROR,
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
112 hint: None,
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
113 }
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
114 }
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
115 SparseConfigError::EntryOutsideSection { context, line } => {
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
116 HgError::Abort {
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
117 message: format!(
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
118 "{} config entry outside of section: {}",
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
119 context,
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
120 String::from_utf8_lossy(&line)
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
121 ),
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
122 detailed_exit_code: STATE_ERROR,
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
123 hint: None,
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
124 }
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
125 }
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
126 SparseConfigError::IncludesInNarrow => HgError::Abort {
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
127 message: "including other spec files using '%include' is not \
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
128 supported in narrowspec"
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
129 .to_string(),
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
130 detailed_exit_code: STATE_ERROR,
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
131 hint: None,
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
132 },
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
133 SparseConfigError::InvalidNarrowPrefix(vec) => HgError::Abort {
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
134 message: String::from_utf8_lossy(&format_bytes!(
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
135 b"invalid prefix on narrow pattern: {}",
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
136 vec
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
137 ))
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
138 .to_string(),
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
139 detailed_exit_code: STATE_ERROR,
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
140 hint: Some(format!(
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
141 "narrow patterns must begin with one of the following: {}",
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
142 VALID_PREFIXES.join(", ")
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
143 )),
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
144 },
52267
77b95a4abbb2 narrow: stricter validation of narrowspec patterns in rhg
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 52067
diff changeset
145 SparseConfigError::WhitespaceAtEdgeOfPattern(vec) => {
77b95a4abbb2 narrow: stricter validation of narrowspec patterns in rhg
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 52067
diff changeset
146 HgError::Abort {
77b95a4abbb2 narrow: stricter validation of narrowspec patterns in rhg
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 52067
diff changeset
147 message: String::from_utf8_lossy(&format_bytes!(
77b95a4abbb2 narrow: stricter validation of narrowspec patterns in rhg
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 52067
diff changeset
148 b"narrow pattern with whitespace at the edge: {}",
77b95a4abbb2 narrow: stricter validation of narrowspec patterns in rhg
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 52067
diff changeset
149 vec
77b95a4abbb2 narrow: stricter validation of narrowspec patterns in rhg
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 52067
diff changeset
150 ))
77b95a4abbb2 narrow: stricter validation of narrowspec patterns in rhg
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 52067
diff changeset
151 .to_string(),
77b95a4abbb2 narrow: stricter validation of narrowspec patterns in rhg
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 52067
diff changeset
152 detailed_exit_code: STATE_ERROR,
77b95a4abbb2 narrow: stricter validation of narrowspec patterns in rhg
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 52067
diff changeset
153 hint: Some(
77b95a4abbb2 narrow: stricter validation of narrowspec patterns in rhg
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 52067
diff changeset
154 "narrow patterns can't begin or end in whitespace"
77b95a4abbb2 narrow: stricter validation of narrowspec patterns in rhg
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 52067
diff changeset
155 .to_string(),
77b95a4abbb2 narrow: stricter validation of narrowspec patterns in rhg
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 52067
diff changeset
156 ),
77b95a4abbb2 narrow: stricter validation of narrowspec patterns in rhg
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 52067
diff changeset
157 }
77b95a4abbb2 narrow: stricter validation of narrowspec patterns in rhg
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 52067
diff changeset
158 }
52067
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
159 SparseConfigError::HgError(hg_error) => hg_error,
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
160 SparseConfigError::PatternError(pattern_error) => HgError::Abort {
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
161 message: pattern_error.to_string(),
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
162 detailed_exit_code: STATE_ERROR,
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
163 hint: None,
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
164 },
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
165 }
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
166 }
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
167 }
ae1ab6d71f4a rust: implement `From<SparseConfigWarning>` for `HgError`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50881
diff changeset
168
49499
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
169 /// Parse sparse config file content.
49502
7c93e38a0bbd rhg-status: add support for narrow clones
Rapha?l Gom?s <rgomes@octobus.net>
parents: 49499
diff changeset
170 pub(crate) fn parse_config(
49499
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
171 raw: &[u8],
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
172 context: SparseConfigContext,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
173 ) -> Result<SparseConfig, SparseConfigError> {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
174 let mut includes = vec![];
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
175 let mut excludes = vec![];
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
176 let mut profiles = HashSet::new();
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
177 let mut warnings = vec![];
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
178
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
179 #[derive(PartialEq, Eq)]
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
180 enum Current {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
181 Includes,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
182 Excludes,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
183 None,
49522
52464a20add0 rhg: parallellize computation of [unsure_is_modified]
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 49502
diff changeset
184 }
49499
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
185
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
186 let mut current = Current::None;
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
187 let mut in_section = false;
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
188
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
189 for line in raw.split(|c| *c == b'\n') {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
190 let line = line.trim();
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
191 if line.is_empty() || line[0] == b'#' {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
192 // empty or comment line, skip
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
193 continue;
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
194 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
195 if line.starts_with(b"%include ") {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
196 let profile = line[b"%include ".len()..].trim();
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
197 if !profile.is_empty() {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
198 profiles.insert(profile.into());
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
199 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
200 } else if line == b"[include]" {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
201 if in_section && current == Current::Includes {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
202 return Err(SparseConfigError::IncludesAfterExcludes {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
203 context,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
204 });
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
205 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
206 in_section = true;
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
207 current = Current::Includes;
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
208 continue;
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
209 } else if line == b"[exclude]" {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
210 in_section = true;
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
211 current = Current::Excludes;
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
212 } else {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
213 if current == Current::None {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
214 return Err(SparseConfigError::EntryOutsideSection {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
215 context,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
216 line: line.into(),
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
217 });
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
218 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
219 if line.trim().starts_with(b"/") {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
220 warnings.push(SparseWarning::RootWarning {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
221 context,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
222 line: line.into(),
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
223 });
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
224 continue;
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
225 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
226 match current {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
227 Current::Includes => {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
228 includes.push(b'\n');
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
229 includes.extend(line.iter());
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
230 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
231 Current::Excludes => {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
232 excludes.push(b'\n');
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
233 excludes.extend(line.iter());
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
234 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
235 Current::None => unreachable!(),
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
236 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
237 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
238 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
239
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
240 Ok(SparseConfig {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
241 includes,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
242 excludes,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
243 profiles,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
244 warnings,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
245 })
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
246 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
247
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
248 fn read_temporary_includes(
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
249 repo: &Repo,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
250 ) -> Result<Vec<Vec<u8>>, SparseConfigError> {
50003
e98fd81bb151 rust-clippy: fix most warnings in `hg-core`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 49522
diff changeset
251 let raw = repo.hg_vfs().try_read("tempsparse")?.unwrap_or_default();
49499
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
252 if raw.is_empty() {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
253 return Ok(vec![]);
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
254 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
255 Ok(raw.split(|c| *c == b'\n').map(ToOwned::to_owned).collect())
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
256 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
257
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
258 /// Obtain sparse checkout patterns for the given revision
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
259 fn patterns_for_rev(
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
260 repo: &Repo,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
261 rev: Revision,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
262 ) -> Result<Option<SparseConfig>, SparseConfigError> {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
263 if !repo.has_sparse() {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
264 return Ok(None);
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
265 }
50003
e98fd81bb151 rust-clippy: fix most warnings in `hg-core`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 49522
diff changeset
266 let raw = repo.hg_vfs().try_read("sparse")?.unwrap_or_default();
49499
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
267
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
268 if raw.is_empty() {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
269 return Ok(None);
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
270 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
271
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
272 let mut config = parse_config(&raw, SparseConfigContext::Sparse)?;
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
273
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
274 if !config.profiles.is_empty() {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
275 let mut profiles: Vec<Vec<u8>> = config.profiles.into_iter().collect();
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
276 let mut visited = HashSet::new();
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
277
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
278 while let Some(profile) = profiles.pop() {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
279 if visited.contains(&profile) {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
280 continue;
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
281 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
282 visited.insert(profile.to_owned());
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
283
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
284 let output =
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
285 cat(repo, &rev.to_string(), vec![HgPath::new(&profile)])
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
286 .map_err(|_| {
50003
e98fd81bb151 rust-clippy: fix most warnings in `hg-core`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 49522
diff changeset
287 HgError::corrupted(
49499
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
288 "dirstate points to non-existent parent node"
50003
e98fd81bb151 rust-clippy: fix most warnings in `hg-core`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 49522
diff changeset
289 .to_string(),
e98fd81bb151 rust-clippy: fix most warnings in `hg-core`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 49522
diff changeset
290 )
49499
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
291 })?;
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
292 if output.results.is_empty() {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
293 config.warnings.push(SparseWarning::ProfileNotFound {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
294 profile: profile.to_owned(),
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
295 rev,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
296 })
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
297 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
298
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
299 let subconfig = parse_config(
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
300 &output.results[0].1,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
301 SparseConfigContext::Sparse,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
302 )?;
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
303 if !subconfig.includes.is_empty() {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
304 config.includes.push(b'\n');
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
305 config.includes.extend(&subconfig.includes);
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
306 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
307 if !subconfig.includes.is_empty() {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
308 config.includes.push(b'\n');
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
309 config.excludes.extend(&subconfig.excludes);
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
310 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
311 config.warnings.extend(subconfig.warnings.into_iter());
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
312 profiles.extend(subconfig.profiles.into_iter());
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
313 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
314
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
315 config.profiles = visited;
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
316 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
317
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
318 if !config.includes.is_empty() {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
319 config.includes.extend(b"\n.hg*");
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
320 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
321
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
322 Ok(Some(config))
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
323 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
324
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
325 /// Obtain a matcher for sparse working directories.
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
326 pub fn matcher(
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
327 repo: &Repo,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
328 ) -> Result<(Box<dyn Matcher + Sync>, Vec<SparseWarning>), SparseConfigError> {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
329 let mut warnings = vec![];
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
330 if !repo.requirements().contains(SPARSE_REQUIREMENT) {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
331 return Ok((Box::new(AlwaysMatcher), warnings));
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
332 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
333
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
334 let parents = repo.dirstate_parents()?;
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
335 let mut revs = vec![];
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
336 let p1_rev =
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
337 repo.changelog()?
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
338 .rev_from_node(parents.p1.into())
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
339 .map_err(|_| {
50003
e98fd81bb151 rust-clippy: fix most warnings in `hg-core`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 49522
diff changeset
340 HgError::corrupted(
e98fd81bb151 rust-clippy: fix most warnings in `hg-core`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 49522
diff changeset
341 "dirstate points to non-existent parent node".to_string(),
e98fd81bb151 rust-clippy: fix most warnings in `hg-core`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 49522
diff changeset
342 )
49499
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
343 })?;
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
344 if p1_rev != NULL_REVISION {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
345 revs.push(p1_rev)
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
346 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
347 let p2_rev =
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
348 repo.changelog()?
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
349 .rev_from_node(parents.p2.into())
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
350 .map_err(|_| {
50003
e98fd81bb151 rust-clippy: fix most warnings in `hg-core`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 49522
diff changeset
351 HgError::corrupted(
e98fd81bb151 rust-clippy: fix most warnings in `hg-core`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 49522
diff changeset
352 "dirstate points to non-existent parent node".to_string(),
e98fd81bb151 rust-clippy: fix most warnings in `hg-core`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 49522
diff changeset
353 )
49499
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
354 })?;
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
355 if p2_rev != NULL_REVISION {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
356 revs.push(p2_rev)
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
357 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
358 let mut matchers = vec![];
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
359
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
360 for rev in revs.iter() {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
361 let config = patterns_for_rev(repo, *rev);
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
362 if let Ok(Some(config)) = config {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
363 warnings.extend(config.warnings);
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
364 let mut m: Box<dyn Matcher + Sync> = Box::new(AlwaysMatcher);
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
365 if !config.includes.is_empty() {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
366 let (patterns, subwarnings) = parse_pattern_file_contents(
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
367 &config.includes,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
368 Path::new(""),
50881
796b5d6693a4 rust: simplify pattern file parsing
Spencer Baugh <sbaugh@janestreet.com>
parents: 50768
diff changeset
369 Some(PatternSyntax::Glob),
796b5d6693a4 rust: simplify pattern file parsing
Spencer Baugh <sbaugh@janestreet.com>
parents: 50768
diff changeset
370 false,
49499
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
371 false,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
372 )?;
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
373 warnings.extend(subwarnings.into_iter().map(From::from));
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
374 m = Box::new(IncludeMatcher::new(patterns)?);
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
375 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
376 if !config.excludes.is_empty() {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
377 let (patterns, subwarnings) = parse_pattern_file_contents(
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
378 &config.excludes,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
379 Path::new(""),
50881
796b5d6693a4 rust: simplify pattern file parsing
Spencer Baugh <sbaugh@janestreet.com>
parents: 50768
diff changeset
380 Some(PatternSyntax::Glob),
796b5d6693a4 rust: simplify pattern file parsing
Spencer Baugh <sbaugh@janestreet.com>
parents: 50768
diff changeset
381 false,
49499
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
382 false,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
383 )?;
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
384 warnings.extend(subwarnings.into_iter().map(From::from));
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
385 m = Box::new(DifferenceMatcher::new(
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
386 m,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
387 Box::new(IncludeMatcher::new(patterns)?),
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
388 ));
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
389 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
390 matchers.push(m);
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
391 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
392 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
393 let result: Box<dyn Matcher + Sync> = match matchers.len() {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
394 0 => Box::new(AlwaysMatcher),
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
395 1 => matchers.pop().expect("1 is equal to 0"),
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
396 _ => Box::new(UnionMatcher::new(matchers)),
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
397 };
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
398
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
399 let matcher =
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
400 force_include_matcher(result, &read_temporary_includes(repo)?)?;
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
401 Ok((matcher, warnings))
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
402 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
403
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
404 /// Returns a matcher that returns true for any of the forced includes before
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
405 /// testing against the actual matcher
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
406 fn force_include_matcher(
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
407 result: Box<dyn Matcher + Sync>,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
408 temp_includes: &[Vec<u8>],
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
409 ) -> Result<Box<dyn Matcher + Sync>, PatternError> {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
410 if temp_includes.is_empty() {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
411 return Ok(result);
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
412 }
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
413 let forced_include_matcher = IncludeMatcher::new(
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
414 temp_includes
50003
e98fd81bb151 rust-clippy: fix most warnings in `hg-core`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 49522
diff changeset
415 .iter()
49499
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
416 .map(|include| {
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
417 IgnorePattern::new(PatternSyntax::Path, include, Path::new(""))
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
418 })
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
419 .collect(),
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
420 )?;
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
421 Ok(Box::new(UnionMatcher::new(vec![
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
422 Box::new(forced_include_matcher),
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
423 result,
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
424 ])))
ffd4b1f1c9cb rhg: add sparse support
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
425 }