# HG changeset patch # User Raphaël Gomès # Date 1638876898 -3600 # Node ID 9cf5ac8c71097959e638612c3544c9e8a41140cd # Parent 715e4e81e39a677b86be9f499cba8f3dacc148eb rhg: support the new extension suboptions syntax See inline comments Differential Revision: https://phab.mercurial-scm.org/D11874 diff -r 715e4e81e39a -r 9cf5ac8c7109 rust/rhg/src/main.rs --- a/rust/rhg/src/main.rs Wed Dec 08 10:14:37 2021 +0100 +++ b/rust/rhg/src/main.rs Tue Dec 07 12:34:58 2021 +0100 @@ -11,6 +11,7 @@ use hg::repo::{Repo, RepoError}; use hg::utils::files::{get_bytes_from_os_str, get_path_from_bytes}; use hg::utils::SliceExt; +use std::collections::HashSet; use std::ffi::OsString; use std::path::PathBuf; use std::process::Command; @@ -598,11 +599,23 @@ } } +/// The `*` extension is an edge-case for config sub-options that apply to all +/// extensions. For now, only `:required` exists, but that may change in the +/// future. const SUPPORTED_EXTENSIONS: &[&[u8]] = - &[b"blackbox", b"share", b"sparse", b"narrow"]; + &[b"blackbox", b"share", b"sparse", b"narrow", b"*"]; fn check_extensions(config: &Config) -> Result<(), CommandError> { - let enabled = config.get_section_keys(b"extensions"); + let enabled: HashSet<&[u8]> = config + .get_section_keys(b"extensions") + .into_iter() + .map(|extension| { + // Ignore extension suboptions. Only `required` exists for now. + // `rhg` either supports an extension or doesn't, so it doesn't + // make sense to consider the loading of an extension. + extension.split_2(b':').unwrap_or((extension, b"")).0 + }) + .collect(); let mut unsupported = enabled; for supported in SUPPORTED_EXTENSIONS { diff -r 715e4e81e39a -r 9cf5ac8c7109 tests/test-rhg.t --- a/tests/test-rhg.t Wed Dec 08 10:14:37 2021 +0100 +++ b/tests/test-rhg.t Tue Dec 07 12:34:58 2021 +0100 @@ -380,3 +380,13 @@ $ rhg files a $ rm .hgsub + +The `:required` extension suboptions are correctly ignored + + $ echo "[extensions]" >> $HGRCPATH + $ echo "blackbox:required = yes" >> $HGRCPATH + $ rhg files + a + $ echo "*:required = yes" >> $HGRCPATH + $ rhg files + a