[Updated] D10767: rhg: look for repository in ancestors also instead of cwd only

pulkit (Pulkit Goyal) phabricator at mercurial-scm.org
Wed Jun 9 09:37:31 UTC 2021


Closed by commit rHG88119fffecc8: rhg: look for repository in ancestors also instead of cwd only (authored by pulkit).
This revision was automatically updated to reflect the committed changes.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D10767?vs=28514&id=28516

CHANGES SINCE LAST ACTION
  https://phab.mercurial-scm.org/D10767/new/

REVISION DETAIL
  https://phab.mercurial-scm.org/D10767

AFFECTED FILES
  rust/hg-core/src/repo.rs
  rust/rhg/src/main.rs

CHANGE DETAILS

diff --git a/rust/rhg/src/main.rs b/rust/rhg/src/main.rs
--- a/rust/rhg/src/main.rs
+++ b/rust/rhg/src/main.rs
@@ -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"),
diff --git a/rust/hg-core/src/repo.rs b/rust/hg-core/src/repo.rs
--- a/rust/hg-core/src/repo.rs
+++ b/rust/hg-core/src/repo.rs
@@ -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)
         }
     }
 



To: pulkit, #hg-reviewers, Alphare
Cc: SimonSapin, mercurial-patches
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mercurial-scm.org/pipermail/mercurial-patches/attachments/20210609/2f10affc/attachment-0002.html>


More information about the Mercurial-patches mailing list