Mercurial > public > mercurial-scm > hg
annotate rust/hg-core/src/config/mod.rs @ 51117:532e74ad3ff6
rust: run a clippy pass with the latest stable version
Our current version of clippy is older than the latest stable.
The newest version has new lints that are moslty good advice, so let's apply
them ahead of time. This has the added benefit of reducing the noise for
developpers like myself that use clippy as an IDE helper, as well as being
more prepared for a future clippy upgrade.
author | Rapha?l Gom?s <rgomes@octobus.net> |
---|---|
date | Mon, 06 Nov 2023 11:06:08 +0100 |
parents | 8343947af6a7 |
children | 0dbf6a5ccf5f |
rev | line source |
---|---|
46187
95d6f31e88db
hg-core: add basic config module
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
1 // config.rs |
95d6f31e88db
hg-core: add basic config module
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
2 // |
95d6f31e88db
hg-core: add basic config module
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
3 // Copyright 2020 |
95d6f31e88db
hg-core: add basic config module
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
4 // Valentin Gatien-Baron, |
95d6f31e88db
hg-core: add basic config module
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
5 // Raphaël Gomès <rgomes@octobus.net> |
95d6f31e88db
hg-core: add basic config module
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
6 // |
95d6f31e88db
hg-core: add basic config module
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
7 // This software may be used and distributed according to the terms of the |
95d6f31e88db
hg-core: add basic config module
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
8 // GNU General Public License version 2 or any later version. |
95d6f31e88db
hg-core: add basic config module
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
9 |
95d6f31e88db
hg-core: add basic config module
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
10 //! Mercurial config parsing and interfaces. |
95d6f31e88db
hg-core: add basic config module
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
11 |
50760
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50209
diff
changeset
|
12 pub mod config_items; |
46187
95d6f31e88db
hg-core: add basic config module
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
13 mod layer; |
49513
467d9df98c68
rhg: centralize PlainInfo
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49512
diff
changeset
|
14 mod plain_info; |
46602
a687a7f27951
rust: Move config value parsing functions to a new module
Simon Sapin <simon.sapin@octobus.net>
parents:
46598
diff
changeset
|
15 mod values; |
48733
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
47404
diff
changeset
|
16 pub use layer::{ConfigError, ConfigOrigin, ConfigParseError}; |
50760
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50209
diff
changeset
|
17 use lazy_static::lazy_static; |
49513
467d9df98c68
rhg: centralize PlainInfo
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49512
diff
changeset
|
18 pub use plain_info::PlainInfo; |
49936
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
19 |
50760
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50209
diff
changeset
|
20 use self::config_items::DefaultConfig; |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50209
diff
changeset
|
21 use self::config_items::DefaultConfigItem; |
49936
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
22 use self::layer::ConfigLayer; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
23 use self::layer::ConfigValue; |
50760
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50209
diff
changeset
|
24 use crate::errors::HgError; |
49936
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
25 use crate::errors::{HgResultExt, IoResultExt}; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
26 use crate::utils::files::get_bytes_from_os_str; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
27 use format_bytes::{write_bytes, DisplayBytes}; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
28 use std::collections::HashSet; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
29 use std::env; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
30 use std::fmt; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
31 use std::path::{Path, PathBuf}; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
32 use std::str; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
33 |
50760
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50209
diff
changeset
|
34 lazy_static! { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50209
diff
changeset
|
35 static ref DEFAULT_CONFIG: Result<DefaultConfig, HgError> = { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50209
diff
changeset
|
36 DefaultConfig::from_contents(include_str!( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50209
diff
changeset
|
37 "../../../../mercurial/configitems.toml" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50209
diff
changeset
|
38 )) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50209
diff
changeset
|
39 }; |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50209
diff
changeset
|
40 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50209
diff
changeset
|
41 |
49936
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
42 /// Holds the config values for the current repository |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
43 /// TODO update this docstring once we support more sources |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
44 #[derive(Clone)] |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
45 pub struct Config { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
46 layers: Vec<layer::ConfigLayer>, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
47 plain: PlainInfo, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
48 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
49 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
50 impl DisplayBytes for Config { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
51 fn display_bytes( |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
52 &self, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
53 out: &mut dyn std::io::Write, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
54 ) -> std::io::Result<()> { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
55 for (index, layer) in self.layers.iter().rev().enumerate() { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
56 write_bytes!( |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
57 out, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
58 b"==== Layer {} (trusted: {}) ====\n{}", |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
59 index, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
60 if layer.trusted { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
61 &b"yes"[..] |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
62 } else { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
63 &b"no"[..] |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
64 }, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
65 layer |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
66 )?; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
67 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
68 Ok(()) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
69 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
70 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
71 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
72 pub enum ConfigSource { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
73 /// Absolute path to a config file |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
74 AbsPath(PathBuf), |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
75 /// Already parsed (from the CLI, env, Python resources, etc.) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
76 Parsed(layer::ConfigLayer), |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
77 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
78 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
79 #[derive(Debug)] |
50209
af9d050f2bb8
rust: box ConfigValueParseError to avoid large result types
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49954
diff
changeset
|
80 pub struct ConfigValueParseErrorDetails { |
49936
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
81 pub origin: ConfigOrigin, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
82 pub line: Option<usize>, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
83 pub section: Vec<u8>, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
84 pub item: Vec<u8>, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
85 pub value: Vec<u8>, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
86 pub expected_type: &'static str, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
87 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
88 |
50209
af9d050f2bb8
rust: box ConfigValueParseError to avoid large result types
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49954
diff
changeset
|
89 // boxed to avoid very large Result types |
af9d050f2bb8
rust: box ConfigValueParseError to avoid large result types
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49954
diff
changeset
|
90 pub type ConfigValueParseError = Box<ConfigValueParseErrorDetails>; |
af9d050f2bb8
rust: box ConfigValueParseError to avoid large result types
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49954
diff
changeset
|
91 |
49936
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
92 impl fmt::Display for ConfigValueParseError { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
93 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
94 // TODO: add origin and line number information, here and in |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
95 // corresponding python code |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
96 write!( |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
97 f, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
98 "config error: {}.{} is not a {} ('{}')", |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
99 String::from_utf8_lossy(&self.section), |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
100 String::from_utf8_lossy(&self.item), |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
101 self.expected_type, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
102 String::from_utf8_lossy(&self.value) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
103 ) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
104 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
105 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
106 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
107 /// Returns true if the config item is disabled by PLAIN or PLAINEXCEPT |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
108 fn should_ignore(plain: &PlainInfo, section: &[u8], item: &[u8]) -> bool { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
109 // duplication with [_applyconfig] in [ui.py], |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
110 if !plain.is_plain() { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
111 return false; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
112 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
113 if section == b"alias" { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
114 return plain.plainalias(); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
115 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
116 if section == b"revsetalias" { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
117 return plain.plainrevsetalias(); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
118 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
119 if section == b"templatealias" { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
120 return plain.plaintemplatealias(); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
121 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
122 if section == b"ui" { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
123 let to_delete: &[&[u8]] = &[ |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
124 b"debug", |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
125 b"fallbackencoding", |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
126 b"quiet", |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
127 b"slash", |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
128 b"logtemplate", |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
129 b"message-output", |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
130 b"statuscopies", |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
131 b"style", |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
132 b"traceback", |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
133 b"verbose", |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
134 ]; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
135 return to_delete.contains(&item); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
136 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
137 let sections_to_delete: &[&[u8]] = |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
138 &[b"defaults", b"commands", b"command-templates"]; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
139 sections_to_delete.contains(§ion) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
140 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
141 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
142 impl Config { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
143 /// The configuration to use when printing configuration-loading errors |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
144 pub fn empty() -> Self { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
145 Self { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
146 layers: Vec::new(), |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
147 plain: PlainInfo::empty(), |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
148 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
149 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
150 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
151 /// Load system and user configuration from various files. |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
152 /// |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
153 /// This is also affected by some environment variables. |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
154 pub fn load_non_repo() -> Result<Self, ConfigError> { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
155 let mut config = Self::empty(); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
156 let opt_rc_path = env::var_os("HGRCPATH"); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
157 // HGRCPATH replaces system config |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
158 if opt_rc_path.is_none() { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
159 config.add_system_config()? |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
160 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
161 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
162 config.add_for_environment_variable("EDITOR", b"ui", b"editor"); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
163 config.add_for_environment_variable("VISUAL", b"ui", b"editor"); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
164 config.add_for_environment_variable("PAGER", b"pager", b"pager"); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
165 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
166 // These are set by `run-tests.py --rhg` to enable fallback for the |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
167 // entire test suite. Alternatives would be setting configuration |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
168 // through `$HGRCPATH` but some tests override that, or changing the |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
169 // `hg` shell alias to include `--config` but that disrupts tests that |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
170 // print command lines and check expected output. |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
171 config.add_for_environment_variable( |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
172 "RHG_ON_UNSUPPORTED", |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
173 b"rhg", |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
174 b"on-unsupported", |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
175 ); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
176 config.add_for_environment_variable( |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
177 "RHG_FALLBACK_EXECUTABLE", |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
178 b"rhg", |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
179 b"fallback-executable", |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
180 ); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
181 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
182 // HGRCPATH replaces user config |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
183 if opt_rc_path.is_none() { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
184 config.add_user_config()? |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
185 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
186 if let Some(rc_path) = &opt_rc_path { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
187 for path in env::split_paths(rc_path) { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
188 if !path.as_os_str().is_empty() { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
189 if path.is_dir() { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
190 config.add_trusted_dir(&path)? |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
191 } else { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
192 config.add_trusted_file(&path)? |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
193 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
194 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
195 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
196 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
197 Ok(config) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
198 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
199 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
200 pub fn load_cli_args( |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
201 &mut self, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
202 cli_config_args: impl IntoIterator<Item = impl AsRef<[u8]>>, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
203 color_arg: Option<Vec<u8>>, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
204 ) -> Result<(), ConfigError> { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
205 if let Some(layer) = ConfigLayer::parse_cli_args(cli_config_args)? { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
206 self.layers.push(layer) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
207 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
208 if let Some(arg) = color_arg { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
209 let mut layer = ConfigLayer::new(ConfigOrigin::CommandLineColor); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
210 layer.add(b"ui"[..].into(), b"color"[..].into(), arg, None); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
211 self.layers.push(layer) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
212 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
213 Ok(()) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
214 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
215 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
216 fn add_trusted_dir(&mut self, path: &Path) -> Result<(), ConfigError> { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
217 if let Some(entries) = std::fs::read_dir(path) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
218 .when_reading_file(path) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
219 .io_not_found_as_none()? |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
220 { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
221 let mut file_paths = entries |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
222 .map(|result| { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
223 result.when_reading_file(path).map(|entry| entry.path()) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
224 }) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
225 .collect::<Result<Vec<_>, _>>()?; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
226 file_paths.sort(); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
227 for file_path in &file_paths { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
228 if file_path.extension() == Some(std::ffi::OsStr::new("rc")) { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
229 self.add_trusted_file(file_path)? |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
230 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
231 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
232 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
233 Ok(()) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
234 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
235 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
236 fn add_trusted_file(&mut self, path: &Path) -> Result<(), ConfigError> { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
237 if let Some(data) = std::fs::read(path) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
238 .when_reading_file(path) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
239 .io_not_found_as_none()? |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
240 { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
241 self.layers.extend(ConfigLayer::parse(path, &data)?) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
242 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
243 Ok(()) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
244 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
245 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
246 fn add_for_environment_variable( |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
247 &mut self, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
248 var: &str, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
249 section: &[u8], |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
250 key: &[u8], |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
251 ) { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
252 if let Some(value) = env::var_os(var) { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
253 let origin = layer::ConfigOrigin::Environment(var.into()); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
254 let mut layer = ConfigLayer::new(origin); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
255 layer.add( |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
256 section.to_owned(), |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
257 key.to_owned(), |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
258 get_bytes_from_os_str(value), |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
259 None, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
260 ); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
261 self.layers.push(layer) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
262 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
263 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
264 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
265 #[cfg(unix)] // TODO: other platforms |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
266 fn add_system_config(&mut self) -> Result<(), ConfigError> { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
267 let mut add_for_prefix = |prefix: &Path| -> Result<(), ConfigError> { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
268 let etc = prefix.join("etc").join("mercurial"); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
269 self.add_trusted_file(&etc.join("hgrc"))?; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
270 self.add_trusted_dir(&etc.join("hgrc.d")) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
271 }; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
272 let root = Path::new("/"); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
273 // TODO: use `std::env::args_os().next().unwrap()` a.k.a. argv[0] |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
274 // instead? TODO: can this be a relative path? |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
275 let hg = crate::utils::current_exe()?; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
276 // TODO: this order (per-installation then per-system) matches |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
277 // `systemrcpath()` in `mercurial/scmposix.py`, but |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
278 // `mercurial/helptext/config.txt` suggests it should be reversed |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
279 if let Some(installation_prefix) = hg.parent().and_then(Path::parent) { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
280 if installation_prefix != root { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
281 add_for_prefix(installation_prefix)? |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
282 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
283 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
284 add_for_prefix(root)?; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
285 Ok(()) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
286 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
287 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
288 #[cfg(unix)] // TODO: other plateforms |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
289 fn add_user_config(&mut self) -> Result<(), ConfigError> { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
290 let opt_home = home::home_dir(); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
291 if let Some(home) = &opt_home { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
292 self.add_trusted_file(&home.join(".hgrc"))? |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
293 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
294 let darwin = cfg!(any(target_os = "macos", target_os = "ios")); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
295 if !darwin { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
296 if let Some(config_home) = env::var_os("XDG_CONFIG_HOME") |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
297 .map(PathBuf::from) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
298 .or_else(|| opt_home.map(|home| home.join(".config"))) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
299 { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
300 self.add_trusted_file(&config_home.join("hg").join("hgrc"))? |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
301 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
302 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
303 Ok(()) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
304 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
305 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
306 /// Loads in order, which means that the precedence is the same |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
307 /// as the order of `sources`. |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
308 pub fn load_from_explicit_sources( |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
309 sources: Vec<ConfigSource>, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
310 ) -> Result<Self, ConfigError> { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
311 let mut layers = vec![]; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
312 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
313 for source in sources.into_iter() { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
314 match source { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
315 ConfigSource::Parsed(c) => layers.push(c), |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
316 ConfigSource::AbsPath(c) => { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
317 // TODO check if it should be trusted |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
318 // mercurial/ui.py:427 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
319 let data = match std::fs::read(&c) { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
320 Err(_) => continue, // same as the python code |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
321 Ok(data) => data, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
322 }; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
323 layers.extend(ConfigLayer::parse(&c, &data)?) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
324 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
325 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
326 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
327 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
328 Ok(Config { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
329 layers, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
330 plain: PlainInfo::empty(), |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
331 }) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
332 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
333 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
334 /// Loads the per-repository config into a new `Config` which is combined |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
335 /// with `self`. |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
336 pub(crate) fn combine_with_repo( |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
337 &self, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
338 repo_config_files: &[PathBuf], |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
339 ) -> Result<Self, ConfigError> { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
340 let (cli_layers, other_layers) = self |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
341 .layers |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
342 .iter() |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
343 .cloned() |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
344 .partition(ConfigLayer::is_from_command_line); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
345 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
346 let mut repo_config = Self { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
347 layers: other_layers, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
348 plain: PlainInfo::empty(), |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
349 }; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
350 for path in repo_config_files { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
351 // TODO: check if this file should be trusted: |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
352 // `mercurial/ui.py:427` |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
353 repo_config.add_trusted_file(path)?; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
354 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
355 repo_config.layers.extend(cli_layers); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
356 Ok(repo_config) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
357 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
358 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
359 pub fn apply_plain(&mut self, plain: PlainInfo) { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
360 self.plain = plain; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
361 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
362 |
50761
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
363 /// Returns the default value for the given config item, if any. |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
364 pub fn get_default( |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
365 &self, |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
366 section: &[u8], |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
367 item: &[u8], |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
368 ) -> Result<Option<&DefaultConfigItem>, HgError> { |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
369 let default_config = DEFAULT_CONFIG.as_ref().map_err(|e| { |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
370 HgError::abort( |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
371 e.to_string(), |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
372 crate::exit_codes::ABORT, |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
373 Some("`mercurial/configitems.toml` is not valid".into()), |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
374 ) |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
375 })?; |
50762
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50761
diff
changeset
|
376 let default_opt = default_config.get(section, item); |
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50761
diff
changeset
|
377 Ok(default_opt.filter(|default| { |
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50761
diff
changeset
|
378 default |
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50761
diff
changeset
|
379 .in_core_extension() |
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50761
diff
changeset
|
380 .map(|extension| { |
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50761
diff
changeset
|
381 // Only return the default for an in-core extension item |
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50761
diff
changeset
|
382 // if said extension is enabled |
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50761
diff
changeset
|
383 self.is_extension_enabled(extension.as_bytes()) |
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50761
diff
changeset
|
384 }) |
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50761
diff
changeset
|
385 .unwrap_or(true) |
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50761
diff
changeset
|
386 })) |
50761
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
387 } |
50760
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50209
diff
changeset
|
388 |
50767
d64df6b35007
rust-config: add docstring to inner `get_parse` method
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50766
diff
changeset
|
389 /// Return the config item that corresponds to a section + item, a function |
d64df6b35007
rust-config: add docstring to inner `get_parse` method
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50766
diff
changeset
|
390 /// to parse from the raw bytes to the expected type (which is passed as |
d64df6b35007
rust-config: add docstring to inner `get_parse` method
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50766
diff
changeset
|
391 /// a string only to make debugging easier). |
d64df6b35007
rust-config: add docstring to inner `get_parse` method
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50766
diff
changeset
|
392 /// Used by higher-level methods like `get_bool`. |
d64df6b35007
rust-config: add docstring to inner `get_parse` method
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50766
diff
changeset
|
393 /// |
d64df6b35007
rust-config: add docstring to inner `get_parse` method
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50766
diff
changeset
|
394 /// `fallback_to_default` controls whether the default value (if any) is |
d64df6b35007
rust-config: add docstring to inner `get_parse` method
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50766
diff
changeset
|
395 /// returned if nothing is found. |
49936
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
396 fn get_parse<'config, T: 'config>( |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
397 &'config self, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
398 section: &[u8], |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
399 item: &[u8], |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
400 expected_type: &'static str, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
401 parse: impl Fn(&'config [u8]) -> Option<T>, |
50761
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
402 fallback_to_default: bool, |
50760
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50209
diff
changeset
|
403 ) -> Result<Option<T>, HgError> |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50209
diff
changeset
|
404 where |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50209
diff
changeset
|
405 Option<T>: TryFrom<&'config DefaultConfigItem, Error = HgError>, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50209
diff
changeset
|
406 { |
49936
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
407 match self.get_inner(section, item) { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
408 Some((layer, v)) => match parse(&v.bytes) { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
409 Some(b) => Ok(Some(b)), |
50209
af9d050f2bb8
rust: box ConfigValueParseError to avoid large result types
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49954
diff
changeset
|
410 None => Err(Box::new(ConfigValueParseErrorDetails { |
49936
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
411 origin: layer.origin.to_owned(), |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
412 line: v.line, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
413 value: v.bytes.to_owned(), |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
414 section: section.to_owned(), |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
415 item: item.to_owned(), |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
416 expected_type, |
50760
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50209
diff
changeset
|
417 }) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50209
diff
changeset
|
418 .into()), |
49936
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
419 }, |
50761
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
420 None => { |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
421 if !fallback_to_default { |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
422 return Ok(None); |
50760
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50209
diff
changeset
|
423 } |
50761
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
424 match self.get_default(section, item)? { |
50978
58390f59826f
rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50977
diff
changeset
|
425 Some(default) => { |
58390f59826f
rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50977
diff
changeset
|
426 // Defaults are TOML values, so they're not in the same |
58390f59826f
rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50977
diff
changeset
|
427 // shape as in the config files. |
58390f59826f
rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50977
diff
changeset
|
428 // First try to convert directly to the expected type |
58390f59826f
rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50977
diff
changeset
|
429 let as_t = default.try_into(); |
58390f59826f
rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50977
diff
changeset
|
430 match as_t { |
58390f59826f
rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50977
diff
changeset
|
431 Ok(t) => Ok(t), |
58390f59826f
rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50977
diff
changeset
|
432 Err(e) => { |
58390f59826f
rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50977
diff
changeset
|
433 // If it fails, it means that... |
58390f59826f
rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50977
diff
changeset
|
434 let as_bytes: Result<Option<&[u8]>, _> = |
58390f59826f
rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50977
diff
changeset
|
435 default.try_into(); |
58390f59826f
rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50977
diff
changeset
|
436 match as_bytes { |
58390f59826f
rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50977
diff
changeset
|
437 Ok(bytes_opt) => { |
58390f59826f
rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50977
diff
changeset
|
438 if let Some(bytes) = bytes_opt { |
58390f59826f
rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50977
diff
changeset
|
439 // ...we should be able to parse it |
58390f59826f
rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50977
diff
changeset
|
440 return Ok(parse(bytes)); |
58390f59826f
rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50977
diff
changeset
|
441 } |
58390f59826f
rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50977
diff
changeset
|
442 Err(e) |
58390f59826f
rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50977
diff
changeset
|
443 } |
58390f59826f
rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50977
diff
changeset
|
444 Err(_) => Err(e), |
58390f59826f
rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50977
diff
changeset
|
445 } |
58390f59826f
rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50977
diff
changeset
|
446 } |
58390f59826f
rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50977
diff
changeset
|
447 } |
58390f59826f
rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50977
diff
changeset
|
448 } |
50766
67faf1bd8acd
rust-config: add devel warning when using undeclared config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50762
diff
changeset
|
449 None => { |
67faf1bd8acd
rust-config: add devel warning when using undeclared config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50762
diff
changeset
|
450 self.print_devel_warning(section, item)?; |
67faf1bd8acd
rust-config: add devel warning when using undeclared config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50762
diff
changeset
|
451 Ok(None) |
67faf1bd8acd
rust-config: add devel warning when using undeclared config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50762
diff
changeset
|
452 } |
50761
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
453 } |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
454 } |
49936
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
455 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
456 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
457 |
50766
67faf1bd8acd
rust-config: add devel warning when using undeclared config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50762
diff
changeset
|
458 fn print_devel_warning( |
67faf1bd8acd
rust-config: add devel warning when using undeclared config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50762
diff
changeset
|
459 &self, |
67faf1bd8acd
rust-config: add devel warning when using undeclared config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50762
diff
changeset
|
460 section: &[u8], |
67faf1bd8acd
rust-config: add devel warning when using undeclared config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50762
diff
changeset
|
461 item: &[u8], |
67faf1bd8acd
rust-config: add devel warning when using undeclared config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50762
diff
changeset
|
462 ) -> Result<(), HgError> { |
67faf1bd8acd
rust-config: add devel warning when using undeclared config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50762
diff
changeset
|
463 let warn_all = self.get_bool(b"devel", b"all-warnings")?; |
67faf1bd8acd
rust-config: add devel warning when using undeclared config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50762
diff
changeset
|
464 let warn_specific = self.get_bool(b"devel", b"warn-config-unknown")?; |
67faf1bd8acd
rust-config: add devel warning when using undeclared config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50762
diff
changeset
|
465 if !warn_all || !warn_specific { |
67faf1bd8acd
rust-config: add devel warning when using undeclared config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50762
diff
changeset
|
466 // We technically shouldn't print anything here since it's not |
67faf1bd8acd
rust-config: add devel warning when using undeclared config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50762
diff
changeset
|
467 // the concern of `hg-core`. |
67faf1bd8acd
rust-config: add devel warning when using undeclared config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50762
diff
changeset
|
468 // |
67faf1bd8acd
rust-config: add devel warning when using undeclared config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50762
diff
changeset
|
469 // We're printing directly to stderr since development warnings |
67faf1bd8acd
rust-config: add devel warning when using undeclared config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50762
diff
changeset
|
470 // are not on by default and surfacing this to consumer crates |
67faf1bd8acd
rust-config: add devel warning when using undeclared config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50762
diff
changeset
|
471 // (like `rhg`) would be more difficult, probably requiring |
67faf1bd8acd
rust-config: add devel warning when using undeclared config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50762
diff
changeset
|
472 // something à la `log` crate. |
67faf1bd8acd
rust-config: add devel warning when using undeclared config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50762
diff
changeset
|
473 // |
67faf1bd8acd
rust-config: add devel warning when using undeclared config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50762
diff
changeset
|
474 // TODO maybe figure out a way of exposing a "warnings" channel |
67faf1bd8acd
rust-config: add devel warning when using undeclared config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50762
diff
changeset
|
475 // that consumer crates can hook into. It would be useful for |
67faf1bd8acd
rust-config: add devel warning when using undeclared config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50762
diff
changeset
|
476 // all other warnings that `hg-core` could expose. |
67faf1bd8acd
rust-config: add devel warning when using undeclared config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50762
diff
changeset
|
477 eprintln!( |
67faf1bd8acd
rust-config: add devel warning when using undeclared config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50762
diff
changeset
|
478 "devel-warn: accessing unregistered config item: '{}.{}'", |
67faf1bd8acd
rust-config: add devel warning when using undeclared config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50762
diff
changeset
|
479 String::from_utf8_lossy(section), |
67faf1bd8acd
rust-config: add devel warning when using undeclared config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50762
diff
changeset
|
480 String::from_utf8_lossy(item), |
67faf1bd8acd
rust-config: add devel warning when using undeclared config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50762
diff
changeset
|
481 ); |
67faf1bd8acd
rust-config: add devel warning when using undeclared config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50762
diff
changeset
|
482 } |
67faf1bd8acd
rust-config: add devel warning when using undeclared config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50762
diff
changeset
|
483 Ok(()) |
67faf1bd8acd
rust-config: add devel warning when using undeclared config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50762
diff
changeset
|
484 } |
67faf1bd8acd
rust-config: add devel warning when using undeclared config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50762
diff
changeset
|
485 |
49936
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
486 /// Returns an `Err` if the first value found is not a valid UTF-8 string. |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
487 /// Otherwise, returns an `Ok(value)` if found, or `None`. |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
488 pub fn get_str( |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
489 &self, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
490 section: &[u8], |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
491 item: &[u8], |
50760
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50209
diff
changeset
|
492 ) -> Result<Option<&str>, HgError> { |
50761
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
493 self.get_parse( |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
494 section, |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
495 item, |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
496 "ASCII or UTF-8 string", |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
497 |value| str::from_utf8(value).ok(), |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
498 true, |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
499 ) |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
500 } |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
501 |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
502 /// Same as `get_str`, but doesn't fall back to the default `configitem` |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
503 /// if not defined in the user config. |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
504 pub fn get_str_no_default( |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
505 &self, |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
506 section: &[u8], |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
507 item: &[u8], |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
508 ) -> Result<Option<&str>, HgError> { |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
509 self.get_parse( |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
510 section, |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
511 item, |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
512 "ASCII or UTF-8 string", |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
513 |value| str::from_utf8(value).ok(), |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
514 false, |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
515 ) |
49936
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
516 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
517 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
518 /// Returns an `Err` if the first value found is not a valid unsigned |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
519 /// integer. Otherwise, returns an `Ok(value)` if found, or `None`. |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
520 pub fn get_u32( |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
521 &self, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
522 section: &[u8], |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
523 item: &[u8], |
50760
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50209
diff
changeset
|
524 ) -> Result<Option<u32>, HgError> { |
50761
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
525 self.get_parse( |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
526 section, |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
527 item, |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
528 "valid integer", |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
529 |value| str::from_utf8(value).ok()?.parse().ok(), |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
530 true, |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
531 ) |
49936
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
532 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
533 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
534 /// Returns an `Err` if the first value found is not a valid file size |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
535 /// value such as `30` (default unit is bytes), `7 MB`, or `42.5 kb`. |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
536 /// Otherwise, returns an `Ok(value_in_bytes)` if found, or `None`. |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
537 pub fn get_byte_size( |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
538 &self, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
539 section: &[u8], |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
540 item: &[u8], |
50760
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50209
diff
changeset
|
541 ) -> Result<Option<u64>, HgError> { |
50761
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
542 self.get_parse( |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
543 section, |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
544 item, |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
545 "byte quantity", |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
546 values::parse_byte_size, |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
547 true, |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
548 ) |
49936
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
549 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
550 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
551 /// Returns an `Err` if the first value found is not a valid boolean. |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
552 /// Otherwise, returns an `Ok(option)`, where `option` is the boolean if |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
553 /// found, or `None`. |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
554 pub fn get_option( |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
555 &self, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
556 section: &[u8], |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
557 item: &[u8], |
50760
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50209
diff
changeset
|
558 ) -> Result<Option<bool>, HgError> { |
50761
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
559 self.get_parse(section, item, "boolean", values::parse_bool, true) |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
560 } |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
561 |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
562 /// Same as `get_option`, but doesn't fall back to the default `configitem` |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
563 /// if not defined in the user config. |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
564 pub fn get_option_no_default( |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
565 &self, |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
566 section: &[u8], |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
567 item: &[u8], |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
568 ) -> Result<Option<bool>, HgError> { |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
569 self.get_parse(section, item, "boolean", values::parse_bool, false) |
49936
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
570 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
571 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
572 /// Returns the corresponding boolean in the config. Returns `Ok(false)` |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
573 /// if the value is not found, an `Err` if it's not a valid boolean. |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
574 pub fn get_bool( |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
575 &self, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
576 section: &[u8], |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
577 item: &[u8], |
50760
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50209
diff
changeset
|
578 ) -> Result<bool, HgError> { |
49936
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
579 Ok(self.get_option(section, item)?.unwrap_or(false)) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
580 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
581 |
50761
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
582 /// Same as `get_bool`, but doesn't fall back to the default `configitem` |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
583 /// if not defined in the user config. |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
584 pub fn get_bool_no_default( |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
585 &self, |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
586 section: &[u8], |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
587 item: &[u8], |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
588 ) -> Result<bool, HgError> { |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
589 Ok(self.get_option_no_default(section, item)?.unwrap_or(false)) |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
590 } |
8ff187fbbfea
rust-config: add config getters that don't fall back to defaults
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
591 |
49936
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
592 /// Returns `true` if the extension is enabled, `false` otherwise |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
593 pub fn is_extension_enabled(&self, extension: &[u8]) -> bool { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
594 let value = self.get(b"extensions", extension); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
595 match value { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
596 Some(c) => !c.starts_with(b"!"), |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
597 None => false, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
598 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
599 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
600 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
601 /// If there is an `item` value in `section`, parse and return a list of |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
602 /// byte strings. |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
603 pub fn get_list( |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
604 &self, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
605 section: &[u8], |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
606 item: &[u8], |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
607 ) -> Option<Vec<Vec<u8>>> { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
608 self.get(section, item).map(values::parse_list) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
609 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
610 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
611 /// Returns the raw value bytes of the first one found, or `None`. |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
612 pub fn get(&self, section: &[u8], item: &[u8]) -> Option<&[u8]> { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
613 self.get_inner(section, item) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
614 .map(|(_, value)| value.bytes.as_ref()) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
615 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
616 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
617 /// Returns the raw value bytes of the first one found, or `None`. |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
618 pub fn get_with_origin( |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
619 &self, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
620 section: &[u8], |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
621 item: &[u8], |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
622 ) -> Option<(&[u8], &ConfigOrigin)> { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
623 self.get_inner(section, item) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
624 .map(|(layer, value)| (value.bytes.as_ref(), &layer.origin)) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
625 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
626 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
627 /// Returns the layer and the value of the first one found, or `None`. |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
628 fn get_inner( |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
629 &self, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
630 section: &[u8], |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
631 item: &[u8], |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
632 ) -> Option<(&ConfigLayer, &ConfigValue)> { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
633 // Filter out the config items that are hidden by [PLAIN]. |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
634 // This differs from python hg where we delete them from the config. |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
635 let should_ignore = should_ignore(&self.plain, section, item); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
636 for layer in self.layers.iter().rev() { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
637 if !layer.trusted { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
638 continue; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
639 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
640 //The [PLAIN] config should not affect the defaults. |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
641 // |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
642 // However, PLAIN should also affect the "tweaked" defaults (unless |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
643 // "tweakdefault" is part of "HGPLAINEXCEPT"). |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
644 // |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
645 // In practice the tweak-default layer is only added when it is |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
646 // relevant, so we can safely always take it into |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
647 // account here. |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
648 if should_ignore && !(layer.origin == ConfigOrigin::Tweakdefaults) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
649 { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
650 continue; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
651 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
652 if let Some(v) = layer.get(section, item) { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
653 return Some((layer, v)); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
654 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
655 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
656 None |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
657 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
658 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
659 /// Return all keys defined for the given section |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
660 pub fn get_section_keys(&self, section: &[u8]) -> HashSet<&[u8]> { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
661 self.layers |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
662 .iter() |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
663 .flat_map(|layer| layer.iter_keys(section)) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
664 .collect() |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
665 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
666 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
667 /// Returns whether any key is defined in the given section |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
668 pub fn has_non_empty_section(&self, section: &[u8]) -> bool { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
669 self.layers |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
670 .iter() |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
671 .any(|layer| layer.has_non_empty_section(section)) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
672 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
673 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
674 /// Yields (key, value) pairs for everything in the given section |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
675 pub fn iter_section<'a>( |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
676 &'a self, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
677 section: &'a [u8], |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
678 ) -> impl Iterator<Item = (&[u8], &[u8])> + 'a { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
679 // Deduplicate keys redefined in multiple layers |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
680 let mut keys_already_seen = HashSet::new(); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
681 let mut key_is_new = |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
682 move |&(key, _value): &(&'a [u8], &'a [u8])| -> bool { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
683 keys_already_seen.insert(key) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
684 }; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
685 // This is similar to `flat_map` + `filter_map`, except with a single |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
686 // closure that owns `key_is_new` (and therefore the |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
687 // `keys_already_seen` set): |
49954
a11237723332
rust: use `peek_mut` from the standard lib now that it's stable
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49936
diff
changeset
|
688 let mut layer_iters = self |
a11237723332
rust: use `peek_mut` from the standard lib now that it's stable
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49936
diff
changeset
|
689 .layers |
a11237723332
rust: use `peek_mut` from the standard lib now that it's stable
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49936
diff
changeset
|
690 .iter() |
a11237723332
rust: use `peek_mut` from the standard lib now that it's stable
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49936
diff
changeset
|
691 .rev() |
a11237723332
rust: use `peek_mut` from the standard lib now that it's stable
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49936
diff
changeset
|
692 .map(move |layer| layer.iter_section(section)) |
a11237723332
rust: use `peek_mut` from the standard lib now that it's stable
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49936
diff
changeset
|
693 .peekable(); |
49936
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
694 std::iter::from_fn(move || loop { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
695 if let Some(pair) = layer_iters.peek_mut()?.find(&mut key_is_new) { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
696 return Some(pair); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
697 } else { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
698 layer_iters.next(); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
699 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
700 }) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
701 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
702 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
703 /// Get raw values bytes from all layers (even untrusted ones) in order |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
704 /// of precedence. |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
705 #[cfg(test)] |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
706 fn get_all(&self, section: &[u8], item: &[u8]) -> Vec<&[u8]> { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
707 let mut res = vec![]; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
708 for layer in self.layers.iter().rev() { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
709 if let Some(v) = layer.get(section, item) { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
710 res.push(v.bytes.as_ref()); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
711 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
712 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
713 res |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
714 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
715 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
716 // a config layer that's introduced by ui.tweakdefaults |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
717 fn tweakdefaults_layer() -> ConfigLayer { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
718 let mut layer = ConfigLayer::new(ConfigOrigin::Tweakdefaults); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
719 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
720 let mut add = |section: &[u8], item: &[u8], value: &[u8]| { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
721 layer.add( |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
722 section[..].into(), |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
723 item[..].into(), |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
724 value[..].into(), |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
725 None, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
726 ); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
727 }; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
728 // duplication of [tweakrc] from [ui.py] |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
729 add(b"ui", b"rollback", b"False"); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
730 add(b"ui", b"statuscopies", b"yes"); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
731 add(b"ui", b"interface", b"curses"); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
732 add(b"ui", b"relative-paths", b"yes"); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
733 add(b"commands", b"grep.all-files", b"True"); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
734 add(b"commands", b"update.check", b"noconflict"); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
735 add(b"commands", b"status.verbose", b"True"); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
736 add(b"commands", b"resolve.explicit-re-merge", b"True"); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
737 add(b"git", b"git", b"1"); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
738 add(b"git", b"showfunc", b"1"); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
739 add(b"git", b"word-diff", b"1"); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
740 layer |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
741 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
742 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
743 // introduce the tweaked defaults as implied by ui.tweakdefaults |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
744 pub fn tweakdefaults(&mut self) { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
745 self.layers.insert(0, Config::tweakdefaults_layer()); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
746 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
747 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
748 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
749 #[cfg(test)] |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
750 mod tests { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
751 use super::*; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
752 use pretty_assertions::assert_eq; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
753 use std::fs::File; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
754 use std::io::Write; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
755 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
756 #[test] |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
757 fn test_include_layer_ordering() { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
758 let tmpdir = tempfile::tempdir().unwrap(); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
759 let tmpdir_path = tmpdir.path(); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
760 let mut included_file = |
51117
532e74ad3ff6
rust: run a clippy pass with the latest stable version
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50980
diff
changeset
|
761 File::create(tmpdir_path.join("included.rc")).unwrap(); |
49936
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
762 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
763 included_file.write_all(b"[section]\nitem=value1").unwrap(); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
764 let base_config_path = tmpdir_path.join("base.rc"); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
765 let mut config_file = File::create(&base_config_path).unwrap(); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
766 let data = |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
767 b"[section]\nitem=value0\n%include included.rc\nitem=value2\n\ |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
768 [section2]\ncount = 4\nsize = 1.5 KB\nnot-count = 1.5\nnot-size = 1 ub"; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
769 config_file.write_all(data).unwrap(); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
770 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
771 let sources = vec![ConfigSource::AbsPath(base_config_path)]; |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
772 let config = Config::load_from_explicit_sources(sources) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
773 .expect("expected valid config"); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
774 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
775 let (_, value) = config.get_inner(b"section", b"item").unwrap(); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
776 assert_eq!( |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
777 value, |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
778 &ConfigValue { |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
779 bytes: b"value2".to_vec(), |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
780 line: Some(4) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
781 } |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
782 ); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
783 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
784 let value = config.get(b"section", b"item").unwrap(); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
785 assert_eq!(value, b"value2",); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
786 assert_eq!( |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
787 config.get_all(b"section", b"item"), |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
788 [b"value2", b"value1", b"value0"] |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
789 ); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
790 |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
791 assert_eq!(config.get_u32(b"section2", b"count").unwrap(), Some(4)); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
792 assert_eq!( |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
793 config.get_byte_size(b"section2", b"size").unwrap(), |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
794 Some(1024 + 512) |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
795 ); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
796 assert!(config.get_u32(b"section2", b"not-count").is_err()); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
797 assert!(config.get_byte_size(b"section2", b"not-size").is_err()); |
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
798 } |
50977
d7b2701f17fa
rust-config: demonstrate a bug when falling back to non-trivial default values
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50767
diff
changeset
|
799 |
d7b2701f17fa
rust-config: demonstrate a bug when falling back to non-trivial default values
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50767
diff
changeset
|
800 #[test] |
d7b2701f17fa
rust-config: demonstrate a bug when falling back to non-trivial default values
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50767
diff
changeset
|
801 fn test_default_parse() { |
d7b2701f17fa
rust-config: demonstrate a bug when falling back to non-trivial default values
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50767
diff
changeset
|
802 let config = Config::load_from_explicit_sources(vec![]) |
d7b2701f17fa
rust-config: demonstrate a bug when falling back to non-trivial default values
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50767
diff
changeset
|
803 .expect("expected valid config"); |
d7b2701f17fa
rust-config: demonstrate a bug when falling back to non-trivial default values
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50767
diff
changeset
|
804 let ret = config.get_byte_size(b"cmdserver", b"max-log-size"); |
50978
58390f59826f
rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50977
diff
changeset
|
805 assert!(ret.is_ok(), "{:?}", ret); |
50979
10e57e3f7276
rust-config: show default `null` is coerced incorrectly to `false`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50978
diff
changeset
|
806 |
10e57e3f7276
rust-config: show default `null` is coerced incorrectly to `false`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50978
diff
changeset
|
807 let ret = config.get_byte_size(b"ui", b"formatted"); |
50980
8343947af6a7
rust-config: fix incorrect coercion of null values to false
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50979
diff
changeset
|
808 assert!(ret.unwrap().is_none()); |
50977
d7b2701f17fa
rust-config: demonstrate a bug when falling back to non-trivial default values
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50767
diff
changeset
|
809 } |
49936
2cd8352f7e11
rust-clippy: merge "config" module definition and struct implementation
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
810 } |