Mercurial > public > mercurial-scm > hg-stable
diff rust/rhg/src/commands/status.rs @ 48490:4a983b69e519
rhg: Add support for ui.ignore and ui.ignore.* config
This fixes some but not all failures in `tests/test-hgignore.t` when running
with `rhg status` enabled.
Differential Revision: https://phab.mercurial-scm.org/D11907
author | Simon Sapin <simon.sapin@octobus.net> |
---|---|
date | Fri, 10 Dec 2021 14:27:00 +0100 |
parents | 112184713852 |
children | 2afaa0145584 |
line wrap: on
line diff
--- a/rust/rhg/src/commands/status.rs Fri Dec 10 17:20:21 2021 +0100 +++ b/rust/rhg/src/commands/status.rs Fri Dec 10 14:27:00 2021 +0100 @@ -21,10 +21,12 @@ use hg::matchers::AlwaysMatcher; use hg::repo::Repo; use hg::utils::files::get_bytes_from_os_string; +use hg::utils::files::get_path_from_bytes; use hg::utils::hg_path::{hg_path_to_path_buf, HgPath}; use hg::{HgPathCow, StatusOptions}; use log::{info, warn}; use std::io; +use std::path::PathBuf; pub const HELP_TEXT: &str = " Show changed files in the working directory @@ -213,11 +215,10 @@ list_ignored: display_states.ignored, collect_traversed_dirs: false, }; - let ignore_file = repo.working_directory_vfs().join(".hgignore"); // TODO hardcoded let (mut ds_status, pattern_warnings) = dmap.status( &AlwaysMatcher, repo.working_directory_path().to_owned(), - vec![ignore_file], + ignore_files(repo, config), options, )?; if !pattern_warnings.is_empty() { @@ -396,6 +397,25 @@ Ok(()) } +fn ignore_files(repo: &Repo, config: &Config) -> Vec<PathBuf> { + let mut ignore_files = Vec::new(); + let repo_ignore = repo.working_directory_vfs().join(".hgignore"); + if repo_ignore.exists() { + ignore_files.push(repo_ignore) + } + for (key, value) in config.iter_section(b"ui") { + if key == b"ignore" || key.starts_with(b"ignore.") { + let path = get_path_from_bytes(value); + // TODO: expand "~/" and environment variable here, like Python + // does with `os.path.expanduser` and `os.path.expandvars` + + let joined = repo.working_directory_path().join(path); + ignore_files.push(joined); + } + } + ignore_files +} + // Probably more elegant to use a Deref or Borrow trait rather than // harcode HgPathBuf, but probably not really useful at this point fn display_status_paths(