Просмотр исходного кода

feat: Use GIT_DIR env var to find the repo

Christina Sørensen 2 лет назад
Родитель
Сommit
fbd0fdc7de
1 измененных файлов с 17 добавлено и 3 удалено
  1. 17 3
      src/fs/feature/git.rs

+ 17 - 3
src/fs/feature/git.rs

@@ -162,11 +162,25 @@ impl GitRepo {
     /// Returns the original buffer if none is found.
     fn discover(path: PathBuf) -> Result<Self, PathBuf> {
         info!("Searching for Git repository above {:?}", path);
-        let repo = match git2::Repository::discover(&path) {
+        // Search with GIT_DIR env variable first if set
+        let repo = match git2::Repository::open_from_env() {
             Ok(r) => r,
             Err(e) => {
-                error!("Error discovering Git repositories: {:?}", e);
-                return Err(path);
+                // anything other than NotFound implies GIT_DIR was set and we got actual error
+                if e.code() != git2::ErrorCode::NotFound {
+                    error!("Error opening Git repo from env using GIT_DIR: {:?}", e);
+                    return Err(path);
+                } else {
+                    // nothing found, search using discover
+                    match git2::Repository::discover(&path) {
+                        Ok(r) => r,
+                        Err(e) => {
+                            error!("Error discovering Git repositories: {:?}", e);
+                            return Err(path);
+
+                        }
+                    }
+                }
             }
         };