diff --git a/src/git.rs b/src/git.rs index 8bb6a28..1771e25 100644 --- a/src/git.rs +++ b/src/git.rs @@ -138,7 +138,7 @@ pub fn find_parent_repository(path: impl AsRef) -> Option { let mut path = path.as_ref(); loop { - if path.join(DOT_GIT_DIRECTORY_NAME).is_dir() { + if path.join(DOT_GIT_DIRECTORY_NAME).exists() { return Some(path.to_path_buf()); } @@ -282,7 +282,7 @@ mod tests { } #[test] - fn test_find_parent_directory_success() { + fn test_find_parent_repository_success() { let temp_dir = TempDirectoryBuilder::default() .add_directory("repository/suddir/subsub") .add_directory("repository/.git") @@ -305,6 +305,22 @@ mod tests { assert_eq!(find_parent_repository(¬_a_repo_sub), None); } + #[test] + fn test_find_parent_repository_worktree() { + let temp_dir = TempDirectoryBuilder::default() + .add_directory("worktree/subdir") + .add_empty_file("worktree/.git") + .build() + .unwrap(); + let worktree_path = temp_dir.path().join("worktree"); + let subdir_path = worktree_path.join("subdir"); + + assert_eq!( + find_parent_repository(&subdir_path).as_ref(), + Some(&worktree_path) + ); + } + #[test] fn test_find_ignored_files_not_a_git_repository() { let temp_dir = TempDirectoryBuilder::default().build().unwrap();