Mercurial > hg
changeset 48729:99b1dfc06571
rhg: Add support for HGPLAINEXPECT
Differential Revision: https://phab.mercurial-scm.org/D12163
author | Simon Sapin <simon.sapin@octobus.net> |
---|---|
date | Thu, 10 Feb 2022 11:58:04 +0100 |
parents | 3199b575375d |
children | 1aaf11e35aec |
files | rust/rhg/src/commands/status.rs rust/rhg/src/main.rs rust/rhg/src/ui.rs |
diffstat | 3 files changed, 19 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/rust/rhg/src/commands/status.rs Thu Feb 10 13:24:38 2022 -0500 +++ b/rust/rhg/src/commands/status.rs Thu Feb 10 11:58:04 2022 +0100 @@ -183,7 +183,7 @@ let config = invocation.config; let args = invocation.subcommand_args; - let verbose = !ui.plain() + let verbose = !ui.plain(None) && !args.is_present("print0") && (config.get_bool(b"ui", b"verbose")? || config.get_bool(b"commands", b"status.verbose")?); @@ -312,7 +312,7 @@ } } } - let relative_paths = (!ui.plain()) + let relative_paths = (!ui.plain(None)) && config .get_option(b"commands", b"status.relative")? .unwrap_or(config.get_bool(b"ui", b"relative-paths")?);
--- a/rust/rhg/src/main.rs Thu Feb 10 13:24:38 2022 -0500 +++ b/rust/rhg/src/main.rs Thu Feb 10 11:58:04 2022 +0100 @@ -669,7 +669,9 @@ } if let Some(color) = config.get(b"ui", b"color") { - if (color == b"always" || color == b"debug") && !ui.plain() { + if (color == b"always" || color == b"debug") + && !ui.plain(Some("color")) + { Err(CommandError::unsupported("colored output"))? } }
--- a/rust/rhg/src/ui.rs Thu Feb 10 13:24:38 2022 -0500 +++ b/rust/rhg/src/ui.rs Thu Feb 10 11:58:04 2022 +0100 @@ -1,4 +1,5 @@ use format_bytes::format_bytes; +use hg::utils::files::get_bytes_from_os_string; use std::borrow::Cow; use std::env; use std::io; @@ -65,8 +66,19 @@ /// - False if HGPLAIN is not set, or feature is in HGPLAINEXCEPT /// - False if feature is disabled by default and not included in HGPLAIN /// - True otherwise - pub fn plain(&self) -> bool { - // TODO: add support for HGPLAINEXCEPT + pub fn plain(&self, feature: Option<&str>) -> bool { + plain(feature) + } +} + +fn plain(opt_feature: Option<&str>) -> bool { + if let Some(except) = env::var_os("HGPLAINEXCEPT") { + opt_feature.map_or(true, |feature| { + get_bytes_from_os_string(except) + .split(|&byte| byte == b',') + .all(|exception| exception != feature.as_bytes()) + }) + } else { env::var_os("HGPLAIN").is_some() } }