Mercurial > hg-stable
diff rust/rhg/src/main.rs @ 46761:bde90e9b4507
rhg: Remove `rhg.fallback-executable=hg` default configuration
When `rhg.on-unsupported` is configured to `fallback` and an unsupported
feature is encountered, the previous default was to look for an `hg`
executable in `$PATH`.
This default was fragile since it was easy to end up accidentally using
an older version of Mercurial installed system-wide,
when a local (perhaps patched) installation was intended.
Instead, it is now an error to have `rhg.on-unsupported=fallback`
without also configuring an explicit path or the fallback executable.
Differential Revision: https://phab.mercurial-scm.org/D10189
author | Simon Sapin <simon.sapin@octobus.net> |
---|---|
date | Fri, 12 Mar 2021 21:44:07 +0100 |
parents | eb14264b98e8 |
children | 821929d59e01 |
line wrap: on
line diff
--- a/rust/rhg/src/main.rs Tue Mar 09 09:17:24 2021 +0100 +++ b/rust/rhg/src/main.rs Fri Mar 12 21:44:07 2021 +0100 @@ -138,7 +138,7 @@ exit( &initial_current_dir, &ui, - OnUnsupported::from_config(&non_repo_config), + OnUnsupported::from_config(&ui, &non_repo_config), Err(CommandError::UnsupportedFeature { message: format_bytes!( b"URL-like --repository {}", @@ -158,7 +158,7 @@ Err(error) => exit( &initial_current_dir, &ui, - OnUnsupported::from_config(&non_repo_config), + OnUnsupported::from_config(&ui, &non_repo_config), Err(error.into()), ), }; @@ -168,6 +168,7 @@ } else { &non_repo_config }; + let on_unsupported = OnUnsupported::from_config(&ui, config); let result = main_with_result( &process_start_time, @@ -175,12 +176,7 @@ repo_result.as_ref(), config, ); - exit( - &initial_current_dir, - &ui, - OnUnsupported::from_config(config), - result, - ) + exit(&initial_current_dir, &ui, on_unsupported, result) } fn exit_code(result: &Result<(), CommandError>) -> i32 { @@ -242,6 +238,14 @@ } } } + exit_no_fallback(ui, on_unsupported, result) +} + +fn exit_no_fallback( + ui: &Ui, + on_unsupported: OnUnsupported, + result: Result<(), CommandError>, +) -> ! { match &result { Ok(_) => {} Err(CommandError::Unsuccessful) => {} @@ -387,9 +391,8 @@ impl OnUnsupported { const DEFAULT: Self = OnUnsupported::Abort; - const DEFAULT_FALLBACK_EXECUTABLE: &'static [u8] = b"hg"; - fn from_config(config: &Config) -> Self { + fn from_config(ui: &Ui, config: &Config) -> Self { match config .get(b"rhg", b"on-unsupported") .map(|value| value.to_ascii_lowercase()) @@ -400,7 +403,16 @@ Some(b"fallback") => OnUnsupported::Fallback { executable: config .get(b"rhg", b"fallback-executable") - .unwrap_or(Self::DEFAULT_FALLBACK_EXECUTABLE) + .unwrap_or_else(|| { + exit_no_fallback( + ui, + Self::Abort, + Err(CommandError::abort( + "abort: 'rhg.on-unsupported=fallback' without \ + 'rhg.fallback-executable' set." + )), + ) + }) .to_owned(), }, None => Self::DEFAULT,