Mercurial > hg
changeset 47405:88119fffecc8
rhg: look for repository in ancestors also instead of cwd only
Last patch introduced config reading at startup to parse value of `--repository`
flag. However, that patch only tried to check for current repository at current
working directory and not it's ancestors. This patch fixes that.
Differential Revision: https://phab.mercurial-scm.org/D10767
author | Pulkit Goyal <7895pulkit@gmail.com> |
---|---|
date | Mon, 24 May 2021 16:27:54 +0530 |
parents | ebdef6283798 |
children | 3237ed4dcda4 |
files | rust/hg-core/src/repo.rs rust/rhg/src/main.rs |
diffstat | 2 files changed, 20 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/rust/hg-core/src/repo.rs Sun Apr 11 00:50:10 2021 +0530 +++ b/rust/hg-core/src/repo.rs Mon May 24 16:27:54 2021 +0530 @@ -43,6 +43,22 @@ } impl Repo { + /// tries to find nearest repository root in current working directory or + /// its ancestors + pub fn find_repo_root() -> Result<PathBuf, RepoError> { + let current_directory = crate::utils::current_dir()?; + // ancestors() is inclusive: it first yields `current_directory` + // as-is. + for ancestor in current_directory.ancestors() { + if ancestor.join(".hg").is_dir() { + return Ok(ancestor.to_path_buf()); + } + } + return Err(RepoError::NotFound { + at: current_directory, + }); + } + /// Find a repository, either at the given path (which must contain a `.hg` /// sub-directory) or by searching the current directory and its /// ancestors. @@ -66,17 +82,8 @@ }) } } else { - let current_directory = crate::utils::current_dir()?; - // ancestors() is inclusive: it first yields `current_directory` - // as-is. - for ancestor in current_directory.ancestors() { - if ancestor.join(".hg").is_dir() { - return Self::new_at_path(ancestor.to_owned(), config); - } - } - Err(RepoError::NotFound { - at: current_directory, - }) + let root = Self::find_repo_root()?; + Self::new_at_path(root, config) } }
--- a/rust/rhg/src/main.rs Sun Apr 11 00:50:10 2021 +0530 +++ b/rust/rhg/src/main.rs Mon May 24 16:27:54 2021 +0530 @@ -174,9 +174,8 @@ } else { let local_config = { if std::env::var_os("HGRCSKIPREPO").is_none() { - let current_dir = hg::utils::current_dir(); - // TODO: handle errors from current_dir - if let Ok(current_dir_path) = current_dir { + // TODO: handle errors from find_repo_root + if let Ok(current_dir_path) = Repo::find_repo_root() { let config_files = vec![ ConfigSource::AbsPath( current_dir_path.join(".hg/hgrc"),