Mercurial > public > mercurial-scm > hg
annotate rust/hg-core/src/config/config_items.rs @ 50762:7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
In order for the Rust code to gain access to default values of in-core
extensions that have a Rust implementation, we need to centralize them
alongside the core items declarations.
This is the first and so far only one of the extensions that have gained
Rust support, I don't think it's worth the churn to move the rest of the
extension's configitems yet.
author | Rapha?l Gom?s <rgomes@octobus.net> |
---|---|
date | Wed, 05 Jul 2023 23:59:22 +0200 |
parents | f8412da86d05 |
children | 58390f59826f |
rev | line source |
---|---|
50760
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
1 //! Code for parsing default Mercurial config items. |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
2 use itertools::Itertools; |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
3 use serde::Deserialize; |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
4 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
5 use crate::{errors::HgError, exit_codes, FastHashMap}; |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
6 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
7 /// Corresponds to the structure of `mercurial/configitems.toml`. |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
8 #[derive(Debug, Deserialize)] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
9 pub struct ConfigItems { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
10 items: Vec<DefaultConfigItem>, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
11 templates: FastHashMap<String, Vec<TemplateItem>>, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
12 #[serde(rename = "template-applications")] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
13 template_applications: Vec<TemplateApplication>, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
14 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
15 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
16 /// Corresponds to a config item declaration in `mercurial/configitems.toml`. |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
17 #[derive(Clone, Debug, PartialEq, Deserialize)] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
18 #[serde(try_from = "RawDefaultConfigItem")] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
19 pub struct DefaultConfigItem { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
20 /// Section of the config the item is in (e.g. `[merge-tools]`) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
21 section: String, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
22 /// Name of the item (e.g. `meld.gui`) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
23 name: String, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
24 /// Default value (can be dynamic, see [`DefaultConfigItemType`]) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
25 default: Option<DefaultConfigItemType>, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
26 /// If the config option is generic (e.g. `merge-tools.*`), defines |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
27 /// the priority of this item relative to other generic items. |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
28 /// If we're looking for <pattern>, then all generic items within the same |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
29 /// section will be sorted by order of priority, and the first regex match |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
30 /// against `name` is returned. |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
31 #[serde(default)] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
32 priority: Option<isize>, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
33 /// Aliases, if any. Each alias is a tuple of `(section, name)` for each |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
34 /// option that is aliased to this one. |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
35 #[serde(default)] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
36 alias: Vec<(String, String)>, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
37 /// Whether the config item is marked as experimental |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
38 #[serde(default)] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
39 experimental: bool, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
40 /// The (possibly empty) docstring for the item |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
41 #[serde(default)] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
42 documentation: String, |
50762
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
43 /// Whether the item is part of an in-core extension. This allows us to |
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
44 /// hide them if the extension is not enabled, to preserve legacy |
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
45 /// behavior. |
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
46 #[serde(default)] |
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
47 in_core_extension: Option<String>, |
50760
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
48 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
49 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
50 /// Corresponds to the raw (i.e. on disk) structure of config items. Used as |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
51 /// an intermediate step in deserialization. |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
52 #[derive(Clone, Debug, Deserialize)] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
53 struct RawDefaultConfigItem { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
54 section: String, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
55 name: String, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
56 default: Option<toml::Value>, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
57 #[serde(rename = "default-type")] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
58 default_type: Option<String>, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
59 #[serde(default)] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
60 priority: isize, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
61 #[serde(default)] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
62 generic: bool, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
63 #[serde(default)] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
64 alias: Vec<(String, String)>, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
65 #[serde(default)] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
66 experimental: bool, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
67 #[serde(default)] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
68 documentation: String, |
50762
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
69 #[serde(default)] |
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
70 in_core_extension: Option<String>, |
50760
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
71 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
72 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
73 impl TryFrom<RawDefaultConfigItem> for DefaultConfigItem { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
74 type Error = HgError; |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
75 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
76 fn try_from(value: RawDefaultConfigItem) -> Result<Self, Self::Error> { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
77 Ok(Self { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
78 section: value.section, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
79 name: value.name, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
80 default: raw_default_to_concrete( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
81 value.default_type, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
82 value.default, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
83 )?, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
84 priority: if value.generic { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
85 Some(value.priority) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
86 } else { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
87 None |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
88 }, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
89 alias: value.alias, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
90 experimental: value.experimental, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
91 documentation: value.documentation, |
50762
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
92 in_core_extension: value.in_core_extension, |
50760
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
93 }) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
94 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
95 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
96 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
97 impl DefaultConfigItem { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
98 fn is_generic(&self) -> bool { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
99 self.priority.is_some() |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
100 } |
50762
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
101 |
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
102 pub fn in_core_extension(&self) -> Option<&str> { |
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
103 self.in_core_extension.as_deref() |
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
104 } |
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
105 |
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
106 pub fn section(&self) -> &str { |
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
107 self.section.as_ref() |
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
108 } |
50760
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
109 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
110 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
111 impl<'a> TryFrom<&'a DefaultConfigItem> for Option<&'a str> { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
112 type Error = HgError; |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
113 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
114 fn try_from( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
115 value: &'a DefaultConfigItem, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
116 ) -> Result<Option<&'a str>, Self::Error> { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
117 match &value.default { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
118 Some(default) => { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
119 let err = HgError::abort( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
120 format!( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
121 "programming error: wrong query on config item '{}.{}'", |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
122 value.section, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
123 value.name |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
124 ), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
125 exit_codes::ABORT, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
126 Some(format!( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
127 "asked for '&str', type of default is '{}'", |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
128 default.type_str() |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
129 )), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
130 ); |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
131 match default { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
132 DefaultConfigItemType::Primitive(toml::Value::String( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
133 s, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
134 )) => Ok(Some(s)), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
135 _ => Err(err), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
136 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
137 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
138 None => Ok(None), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
139 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
140 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
141 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
142 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
143 impl TryFrom<&DefaultConfigItem> for Option<bool> { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
144 type Error = HgError; |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
145 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
146 fn try_from(value: &DefaultConfigItem) -> Result<Self, Self::Error> { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
147 match &value.default { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
148 Some(default) => { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
149 let err = HgError::abort( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
150 format!( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
151 "programming error: wrong query on config item '{}.{}'", |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
152 value.section, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
153 value.name |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
154 ), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
155 exit_codes::ABORT, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
156 Some(format!( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
157 "asked for 'bool', type of default is '{}'", |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
158 default.type_str() |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
159 )), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
160 ); |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
161 match default { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
162 DefaultConfigItemType::Primitive( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
163 toml::Value::Boolean(b), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
164 ) => Ok(Some(*b)), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
165 _ => Err(err), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
166 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
167 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
168 None => Ok(Some(false)), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
169 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
170 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
171 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
172 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
173 impl TryFrom<&DefaultConfigItem> for Option<u32> { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
174 type Error = HgError; |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
175 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
176 fn try_from(value: &DefaultConfigItem) -> Result<Self, Self::Error> { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
177 match &value.default { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
178 Some(default) => { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
179 let err = HgError::abort( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
180 format!( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
181 "programming error: wrong query on config item '{}.{}'", |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
182 value.section, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
183 value.name |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
184 ), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
185 exit_codes::ABORT, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
186 Some(format!( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
187 "asked for 'u32', type of default is '{}'", |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
188 default.type_str() |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
189 )), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
190 ); |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
191 match default { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
192 DefaultConfigItemType::Primitive( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
193 toml::Value::Integer(b), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
194 ) => { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
195 Ok(Some((*b).try_into().expect("TOML integer to u32"))) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
196 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
197 _ => Err(err), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
198 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
199 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
200 None => Ok(None), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
201 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
202 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
203 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
204 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
205 impl TryFrom<&DefaultConfigItem> for Option<u64> { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
206 type Error = HgError; |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
207 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
208 fn try_from(value: &DefaultConfigItem) -> Result<Self, Self::Error> { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
209 match &value.default { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
210 Some(default) => { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
211 let err = HgError::abort( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
212 format!( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
213 "programming error: wrong query on config item '{}.{}'", |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
214 value.section, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
215 value.name |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
216 ), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
217 exit_codes::ABORT, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
218 Some(format!( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
219 "asked for 'u64', type of default is '{}'", |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
220 default.type_str() |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
221 )), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
222 ); |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
223 match default { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
224 DefaultConfigItemType::Primitive( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
225 toml::Value::Integer(b), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
226 ) => { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
227 Ok(Some((*b).try_into().expect("TOML integer to u64"))) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
228 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
229 _ => Err(err), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
230 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
231 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
232 None => Ok(None), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
233 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
234 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
235 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
236 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
237 /// Allows abstracting over more complex default values than just primitives. |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
238 /// The former `configitems.py` contained some dynamic code that is encoded |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
239 /// in this enum. |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
240 #[derive(Debug, PartialEq, Clone, Deserialize)] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
241 pub enum DefaultConfigItemType { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
242 /// Some primitive type (string, integer, boolean) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
243 Primitive(toml::Value), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
244 /// A dynamic value that will be given by the code at runtime |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
245 Dynamic, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
246 /// An lazily-returned array (possibly only relevant in the Python impl) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
247 /// Example: `lambda: [b"zstd", b"zlib"]` |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
248 Lambda(Vec<String>), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
249 /// For now, a special case for `web.encoding` that points to the |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
250 /// `encoding.encoding` module in the Python impl so that local encoding |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
251 /// is correctly resolved at runtime |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
252 LazyModule(String), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
253 ListType, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
254 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
255 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
256 impl DefaultConfigItemType { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
257 pub fn type_str(&self) -> &str { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
258 match self { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
259 DefaultConfigItemType::Primitive(primitive) => { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
260 primitive.type_str() |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
261 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
262 DefaultConfigItemType::Dynamic => "dynamic", |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
263 DefaultConfigItemType::Lambda(_) => "lambda", |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
264 DefaultConfigItemType::LazyModule(_) => "lazy_module", |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
265 DefaultConfigItemType::ListType => "list_type", |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
266 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
267 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
268 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
269 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
270 /// Most of the fields are shared with [`DefaultConfigItem`]. |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
271 #[derive(Debug, Clone, Deserialize)] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
272 #[serde(try_from = "RawTemplateItem")] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
273 struct TemplateItem { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
274 suffix: String, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
275 default: Option<DefaultConfigItemType>, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
276 priority: Option<isize>, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
277 #[serde(default)] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
278 alias: Vec<(String, String)>, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
279 #[serde(default)] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
280 experimental: bool, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
281 #[serde(default)] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
282 documentation: String, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
283 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
284 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
285 /// Corresponds to the raw (i.e. on disk) representation of a template item. |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
286 /// Used as an intermediate step in deserialization. |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
287 #[derive(Clone, Debug, Deserialize)] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
288 struct RawTemplateItem { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
289 suffix: String, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
290 default: Option<toml::Value>, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
291 #[serde(rename = "default-type")] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
292 default_type: Option<String>, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
293 #[serde(default)] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
294 priority: isize, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
295 #[serde(default)] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
296 generic: bool, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
297 #[serde(default)] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
298 alias: Vec<(String, String)>, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
299 #[serde(default)] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
300 experimental: bool, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
301 #[serde(default)] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
302 documentation: String, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
303 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
304 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
305 impl TemplateItem { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
306 fn into_default_item( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
307 self, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
308 application: TemplateApplication, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
309 ) -> DefaultConfigItem { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
310 DefaultConfigItem { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
311 section: application.section, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
312 name: application |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
313 .prefix |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
314 .map(|prefix| format!("{}.{}", prefix, self.suffix)) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
315 .unwrap_or(self.suffix), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
316 default: self.default, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
317 priority: self.priority, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
318 alias: self.alias, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
319 experimental: self.experimental, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
320 documentation: self.documentation, |
50762
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
321 in_core_extension: None, |
50760
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
322 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
323 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
324 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
325 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
326 impl TryFrom<RawTemplateItem> for TemplateItem { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
327 type Error = HgError; |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
328 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
329 fn try_from(value: RawTemplateItem) -> Result<Self, Self::Error> { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
330 Ok(Self { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
331 suffix: value.suffix, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
332 default: raw_default_to_concrete( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
333 value.default_type, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
334 value.default, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
335 )?, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
336 priority: if value.generic { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
337 Some(value.priority) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
338 } else { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
339 None |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
340 }, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
341 alias: value.alias, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
342 experimental: value.experimental, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
343 documentation: value.documentation, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
344 }) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
345 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
346 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
347 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
348 /// Transforms the on-disk string-based representation of complex default types |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
349 /// to the concrete [`DefaultconfigItemType`]. |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
350 fn raw_default_to_concrete( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
351 default_type: Option<String>, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
352 default: Option<toml::Value>, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
353 ) -> Result<Option<DefaultConfigItemType>, HgError> { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
354 Ok(match default_type.as_deref() { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
355 None => default.as_ref().map(|default| { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
356 DefaultConfigItemType::Primitive(default.to_owned()) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
357 }), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
358 Some("dynamic") => Some(DefaultConfigItemType::Dynamic), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
359 Some("list_type") => Some(DefaultConfigItemType::ListType), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
360 Some("lambda") => match &default { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
361 Some(default) => Some(DefaultConfigItemType::Lambda( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
362 default.to_owned().try_into().map_err(|e| { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
363 HgError::abort( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
364 e.to_string(), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
365 exit_codes::ABORT, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
366 Some("Check 'mercurial/configitems.toml'".into()), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
367 ) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
368 })?, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
369 )), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
370 None => { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
371 return Err(HgError::abort( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
372 "lambda defined with no return value".to_string(), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
373 exit_codes::ABORT, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
374 Some("Check 'mercurial/configitems.toml'".into()), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
375 )) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
376 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
377 }, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
378 Some("lazy_module") => match &default { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
379 Some(default) => { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
380 Some(DefaultConfigItemType::LazyModule(match default { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
381 toml::Value::String(module) => module.to_owned(), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
382 _ => { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
383 return Err(HgError::abort( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
384 "lazy_module module name should be a string" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
385 .to_string(), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
386 exit_codes::ABORT, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
387 Some("Check 'mercurial/configitems.toml'".into()), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
388 )) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
389 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
390 })) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
391 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
392 None => { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
393 return Err(HgError::abort( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
394 "lazy_module should have a default value".to_string(), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
395 exit_codes::ABORT, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
396 Some("Check 'mercurial/configitems.toml'".into()), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
397 )) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
398 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
399 }, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
400 Some(invalid) => { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
401 return Err(HgError::abort( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
402 format!("invalid default_type '{}'", invalid), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
403 exit_codes::ABORT, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
404 Some("Check 'mercurial/configitems.toml'".into()), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
405 )) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
406 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
407 }) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
408 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
409 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
410 #[derive(Debug, Clone, Deserialize)] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
411 struct TemplateApplication { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
412 template: String, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
413 section: String, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
414 #[serde(default)] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
415 prefix: Option<String>, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
416 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
417 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
418 /// Represents the (dynamic) set of default core Mercurial config items from |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
419 /// `mercurial/configitems.toml`. |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
420 #[derive(Clone, Debug, Default)] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
421 pub struct DefaultConfig { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
422 /// Mapping of section -> (mapping of name -> item) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
423 items: FastHashMap<String, FastHashMap<String, DefaultConfigItem>>, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
424 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
425 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
426 impl DefaultConfig { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
427 pub fn empty() -> DefaultConfig { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
428 Self { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
429 items: Default::default(), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
430 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
431 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
432 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
433 /// Returns `Self`, given the contents of `mercurial/configitems.toml` |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
434 #[logging_timer::time("trace")] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
435 pub fn from_contents(contents: &str) -> Result<Self, HgError> { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
436 let mut from_file: ConfigItems = |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
437 toml::from_str(contents).map_err(|e| { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
438 HgError::abort( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
439 e.to_string(), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
440 exit_codes::ABORT, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
441 Some("Check 'mercurial/configitems.toml'".into()), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
442 ) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
443 })?; |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
444 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
445 let mut flat_items = from_file.items; |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
446 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
447 for application in from_file.template_applications.drain(..) { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
448 match from_file.templates.get(&application.template) { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
449 None => return Err( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
450 HgError::abort( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
451 format!( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
452 "template application refers to undefined template '{}'", |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
453 application.template |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
454 ), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
455 exit_codes::ABORT, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
456 Some("Check 'mercurial/configitems.toml'".into()) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
457 ) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
458 ), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
459 Some(template_items) => { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
460 for template_item in template_items { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
461 flat_items.push( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
462 template_item |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
463 .clone() |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
464 .into_default_item(application.clone()), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
465 ) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
466 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
467 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
468 }; |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
469 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
470 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
471 let items = flat_items.into_iter().fold( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
472 FastHashMap::default(), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
473 |mut acc, item| { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
474 acc.entry(item.section.to_owned()) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
475 .or_insert_with(|| { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
476 let mut section = FastHashMap::default(); |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
477 section.insert(item.name.to_owned(), item.to_owned()); |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
478 section |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
479 }) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
480 .insert(item.name.to_owned(), item); |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
481 acc |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
482 }, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
483 ); |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
484 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
485 Ok(Self { items }) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
486 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
487 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
488 /// Return the default config item that matches `section` and `item`. |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
489 pub fn get( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
490 &self, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
491 section: &[u8], |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
492 item: &[u8], |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
493 ) -> Option<&DefaultConfigItem> { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
494 // Core items must be valid UTF-8 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
495 let section = String::from_utf8_lossy(section); |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
496 let section_map = self.items.get(section.as_ref())?; |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
497 let item_name_lossy = String::from_utf8_lossy(item); |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
498 match section_map.get(item_name_lossy.as_ref()) { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
499 Some(item) => Some(item), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
500 None => { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
501 for generic_item in section_map |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
502 .values() |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
503 .filter(|item| item.is_generic()) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
504 .sorted_by_key(|item| match item.priority { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
505 Some(priority) => (priority, &item.name), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
506 _ => unreachable!(), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
507 }) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
508 { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
509 if regex::bytes::Regex::new(&generic_item.name) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
510 .expect("invalid regex in configitems") |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
511 .is_match(item) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
512 { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
513 return Some(generic_item); |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
514 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
515 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
516 None |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
517 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
518 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
519 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
520 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
521 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
522 #[cfg(test)] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
523 mod tests { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
524 use crate::config::config_items::{ |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
525 DefaultConfigItem, DefaultConfigItemType, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
526 }; |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
527 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
528 use super::DefaultConfig; |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
529 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
530 #[test] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
531 fn test_config_read() { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
532 let contents = r#" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
533 [[items]] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
534 section = "alias" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
535 name = "abcd.*" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
536 default = 3 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
537 generic = true |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
538 priority = -1 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
539 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
540 [[items]] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
541 section = "alias" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
542 name = ".*" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
543 default-type = "dynamic" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
544 generic = true |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
545 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
546 [[items]] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
547 section = "cmdserver" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
548 name = "track-log" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
549 default-type = "lambda" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
550 default = [ "chgserver", "cmdserver", "repocache",] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
551 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
552 [[items]] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
553 section = "chgserver" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
554 name = "idletimeout" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
555 default = 3600 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
556 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
557 [[items]] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
558 section = "cmdserver" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
559 name = "message-encodings" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
560 default-type = "list_type" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
561 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
562 [[items]] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
563 section = "web" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
564 name = "encoding" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
565 default-type = "lazy_module" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
566 default = "encoding.encoding" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
567 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
568 [[items]] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
569 section = "command-templates" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
570 name = "graphnode" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
571 alias = [["ui", "graphnodetemplate"]] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
572 documentation = """This is a docstring. |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
573 This is another line \ |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
574 but this is not.""" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
575 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
576 [[items]] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
577 section = "censor" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
578 name = "policy" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
579 default = "abort" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
580 experimental = true |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
581 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
582 [[template-applications]] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
583 template = "diff-options" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
584 section = "commands" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
585 prefix = "revert.interactive" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
586 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
587 [[template-applications]] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
588 template = "diff-options" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
589 section = "diff" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
590 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
591 [templates] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
592 [[templates.diff-options]] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
593 suffix = "nodates" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
594 default = false |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
595 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
596 [[templates.diff-options]] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
597 suffix = "showfunc" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
598 default = false |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
599 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
600 [[templates.diff-options]] |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
601 suffix = "unified" |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
602 "#; |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
603 let res = DefaultConfig::from_contents(contents); |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
604 let config = match res { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
605 Ok(config) => config, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
606 Err(e) => panic!("{}", e), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
607 }; |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
608 let expected = DefaultConfigItem { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
609 section: "censor".into(), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
610 name: "policy".into(), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
611 default: Some(DefaultConfigItemType::Primitive("abort".into())), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
612 priority: None, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
613 alias: vec![], |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
614 experimental: true, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
615 documentation: "".into(), |
50762
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
616 in_core_extension: None, |
50760
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
617 }; |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
618 assert_eq!(config.get(b"censor", b"policy"), Some(&expected)); |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
619 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
620 // Test generic priority. The `.*` pattern is wider than `abcd.*`, but |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
621 // `abcd.*` has priority, so it should match first. |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
622 let expected = DefaultConfigItem { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
623 section: "alias".into(), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
624 name: "abcd.*".into(), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
625 default: Some(DefaultConfigItemType::Primitive(3.into())), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
626 priority: Some(-1), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
627 alias: vec![], |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
628 experimental: false, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
629 documentation: "".into(), |
50762
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
630 in_core_extension: None, |
50760
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
631 }; |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
632 assert_eq!(config.get(b"alias", b"abcdsomething"), Some(&expected)); |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
633 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
634 //... but if it doesn't, we should fallback to `.*` |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
635 let expected = DefaultConfigItem { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
636 section: "alias".into(), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
637 name: ".*".into(), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
638 default: Some(DefaultConfigItemType::Dynamic), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
639 priority: Some(0), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
640 alias: vec![], |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
641 experimental: false, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
642 documentation: "".into(), |
50762
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
643 in_core_extension: None, |
50760
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
644 }; |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
645 assert_eq!(config.get(b"alias", b"something"), Some(&expected)); |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
646 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
647 let expected = DefaultConfigItem { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
648 section: "chgserver".into(), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
649 name: "idletimeout".into(), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
650 default: Some(DefaultConfigItemType::Primitive(3600.into())), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
651 priority: None, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
652 alias: vec![], |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
653 experimental: false, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
654 documentation: "".into(), |
50762
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
655 in_core_extension: None, |
50760
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
656 }; |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
657 assert_eq!(config.get(b"chgserver", b"idletimeout"), Some(&expected)); |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
658 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
659 let expected = DefaultConfigItem { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
660 section: "cmdserver".into(), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
661 name: "track-log".into(), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
662 default: Some(DefaultConfigItemType::Lambda(vec![ |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
663 "chgserver".into(), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
664 "cmdserver".into(), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
665 "repocache".into(), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
666 ])), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
667 priority: None, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
668 alias: vec![], |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
669 experimental: false, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
670 documentation: "".into(), |
50762
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
671 in_core_extension: None, |
50760
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
672 }; |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
673 assert_eq!(config.get(b"cmdserver", b"track-log"), Some(&expected)); |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
674 |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
675 let expected = DefaultConfigItem { |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
676 section: "command-templates".into(), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
677 name: "graphnode".into(), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
678 default: None, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
679 priority: None, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
680 alias: vec![("ui".into(), "graphnodetemplate".into())], |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
681 experimental: false, |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
682 documentation: |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
683 "This is a docstring.\nThis is another line but this is not." |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
684 .into(), |
50762
7f8f6fe13fa9
configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50760
diff
changeset
|
685 in_core_extension: None, |
50760
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
686 }; |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
687 assert_eq!( |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
688 config.get(b"command-templates", b"graphnode"), |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
689 Some(&expected) |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
690 ); |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
691 } |
f8412da86d05
rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
692 } |