Skip to content
Snippets Groups Projects
Commit cff41e16 authored by Simon Sapin's avatar Simon Sapin
Browse files

rhg: Switch rhg.ignored-extensions config to Python-compatible list syntax

This includes the ability to have an extension name/path that contains a comma,
by double-quoting it.

Differential Revision: https://phab.mercurial-scm.org/D11390
parent 6961eca0
No related branches found
No related tags found
No related merge requests found
......@@ -13,7 +13,6 @@
ConfigError, ConfigLayer, ConfigOrigin, ConfigValue,
};
use crate::utils::files::get_bytes_from_os_str;
use crate::utils::SliceExt;
use format_bytes::{write_bytes, DisplayBytes};
use std::collections::HashSet;
use std::env;
......@@ -362,32 +361,6 @@
Ok(self.get_option(section, item)?.unwrap_or(false))
}
/// Returns the corresponding list-value in the config if found, or `None`.
///
/// This is appropriate for new configuration keys. The value syntax is
/// **not** the same as most existing list-valued config, which has Python
/// parsing implemented in `parselist()` in
/// `mercurial/utils/stringutil.py`. Faithfully porting that parsing
/// algorithm to Rust (including behavior that are arguably bugs)
/// turned out to be non-trivial and hasn’t been completed as of this
/// writing.
///
/// Instead, the "simple" syntax is: split on comma, then trim leading and
/// trailing whitespace of each component. Quotes or backslashes are not
/// interpreted in any way. Commas are mandatory between values. Values
/// that contain a comma are not supported.
pub fn get_simple_list(
&self,
section: &[u8],
item: &[u8],
) -> Option<impl Iterator<Item = &[u8]>> {
self.get(section, item).map(|value| {
value
.split(|&byte| byte == b',')
.map(|component| component.trim())
})
}
/// If there is an `item` value in `section`, parse and return a list of
/// byte strings.
pub fn get_list(
......
......@@ -567,7 +567,6 @@
unsupported.remove(supported);
}
if let Some(ignored_list) =
config.get_simple_list(b"rhg", b"ignored-extensions")
if let Some(ignored_list) = config.get_list(b"rhg", b"ignored-extensions")
{
for ignored in ignored_list {
......@@ -572,6 +571,6 @@
{
for ignored in ignored_list {
unsupported.remove(ignored);
unsupported.remove(ignored.as_slice());
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment