Details
Details
- Reviewers
Alphare - Group Reviewers
hg-reviewers - Commits
- rHG99b1dfc06571: rhg: Add support for HGPLAINEXPECT
Diff Detail
Diff Detail
- Repository
- rHG Mercurial
- Branch
- default
- Lint
No Linters Available - Unit
No Unit Test Coverage
( )
| Alphare |
| hg-reviewers |
| No Linters Available |
| No Unit Test Coverage |
| Path | Packages | |||
|---|---|---|---|---|
| M | rust/rhg/src/commands/status.rs (4 lines) | |||
| M | rust/rhg/src/main.rs (4 lines) | |||
| M | rust/rhg/src/ui.rs (16 lines) |
| Commit | Parents | Author | Summary | Date |
|---|---|---|---|---|
| c993e1ddd263 | 3199b575375d | Simon Sapin | Feb 10 2022, 5:58 AM |
| Status | Author | Revision | |
|---|---|---|---|
| Closed | SimonSapin | ||
| Closed | SimonSapin | ||
| Closed | SimonSapin | ||
| Closed | SimonSapin | ||
| Closed | SimonSapin | ||
| Closed | SimonSapin | ||
| Closed | SimonSapin |
| "status.terse is not yet supported with rhg status", | "status.terse is not yet supported with rhg status", | ||||
| )); | )); | ||||
| } | } | ||||
| let ui = invocation.ui; | let ui = invocation.ui; | ||||
| let config = invocation.config; | let config = invocation.config; | ||||
| let args = invocation.subcommand_args; | let args = invocation.subcommand_args; | ||||
| let verbose = !ui.plain() | let verbose = !ui.plain(None) | ||||
| && !args.is_present("print0") | && !args.is_present("print0") | ||||
| && (config.get_bool(b"ui", b"verbose")? | && (config.get_bool(b"ui", b"verbose")? | ||||
| || config.get_bool(b"commands", b"status.verbose")?); | || config.get_bool(b"commands", b"status.verbose")?); | ||||
| if verbose { | if verbose { | ||||
| return Err(CommandError::unsupported( | return Err(CommandError::unsupported( | ||||
| "verbose status is not supported yet", | "verbose status is not supported yet", | ||||
| )); | )); | ||||
| } | } | ||||
| } else { | } else { | ||||
| if display_states.clean { | if display_states.clean { | ||||
| ds_status.clean.push(to_check.clone()); | ds_status.clean.push(to_check.clone()); | ||||
| } | } | ||||
| fixup.push(to_check.path.into_owned()) | fixup.push(to_check.path.into_owned()) | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| let relative_paths = (!ui.plain()) | let relative_paths = (!ui.plain(None)) | ||||
| && config | && config | ||||
| .get_option(b"commands", b"status.relative")? | .get_option(b"commands", b"status.relative")? | ||||
| .unwrap_or(config.get_bool(b"ui", b"relative-paths")?); | .unwrap_or(config.get_bool(b"ui", b"relative-paths")?); | ||||
| let output = DisplayStatusPaths { | let output = DisplayStatusPaths { | ||||
| ui, | ui, | ||||
| no_status, | no_status, | ||||
| relativize: if relative_paths { | relativize: if relative_paths { | ||||
| Some(RelativizePaths::new(repo)?) | Some(RelativizePaths::new(repo)?) | ||||
| Err(CommandError::unsupported("[encode] config"))? | Err(CommandError::unsupported("[encode] config"))? | ||||
| } | } | ||||
| if config.has_non_empty_section(b"decode") { | if config.has_non_empty_section(b"decode") { | ||||
| Err(CommandError::unsupported("[decode] config"))? | Err(CommandError::unsupported("[decode] config"))? | ||||
| } | } | ||||
| if let Some(color) = config.get(b"ui", b"color") { | 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"))? | Err(CommandError::unsupported("colored output"))? | ||||
| } | } | ||||
| } | } | ||||
| Ok(()) | Ok(()) | ||||
| } | } | ||||
| use format_bytes::format_bytes; | use format_bytes::format_bytes; | ||||
| use hg::utils::files::get_bytes_from_os_string; | |||||
| use std::borrow::Cow; | use std::borrow::Cow; | ||||
| use std::env; | use std::env; | ||||
| use std::io; | use std::io; | ||||
| use std::io::{ErrorKind, Write}; | use std::io::{ErrorKind, Write}; | ||||
| #[derive(Debug)] | #[derive(Debug)] | ||||
| pub struct Ui { | pub struct Ui { | ||||
| stdout: std::io::Stdout, | stdout: std::io::Stdout, | ||||
| /// | /// | ||||
| /// The only way to trigger plain mode is by setting either the | /// The only way to trigger plain mode is by setting either the | ||||
| /// `HGPLAIN' or `HGPLAINEXCEPT' environment variables. | /// `HGPLAIN' or `HGPLAINEXCEPT' environment variables. | ||||
| /// | /// | ||||
| /// The return value can either be | /// The return value can either be | ||||
| /// - False if HGPLAIN is not set, or feature is in HGPLAINEXCEPT | /// - False if HGPLAIN is not set, or feature is in HGPLAINEXCEPT | ||||
| /// - False if feature is disabled by default and not included in HGPLAIN | /// - False if feature is disabled by default and not included in HGPLAIN | ||||
| /// - True otherwise | /// - True otherwise | ||||
| pub fn plain(&self) -> bool { | pub fn plain(&self, feature: Option<&str>) -> bool { | ||||
| // TODO: add support for HGPLAINEXCEPT | 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() | env::var_os("HGPLAIN").is_some() | ||||
| } | } | ||||
| } | } | ||||
| /// A buffered stdout writer for faster batch printing operations. | /// A buffered stdout writer for faster batch printing operations. | ||||
| pub struct StdoutBuffer<W: Write> { | pub struct StdoutBuffer<W: Write> { | ||||
| buf: io::BufWriter<W>, | buf: io::BufWriter<W>, | ||||
| } | } | ||||