Merge pull request #5692 from rbmclean/master Add missing worktree_dir check and test case
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
diff --git a/src/worktree.c b/src/worktree.c
index fda9b0b..5b1e279 100644
--- a/src/worktree.c
+++ b/src/worktree.c
@@ -259,7 +259,14 @@ int git_worktree_validate(const git_worktree *wt)
wt->commondir_path);
return GIT_ERROR;
}
-
+
+ if (!git_path_exists(wt->worktree_path)) {
+ git_error_set(GIT_ERROR_WORKTREE,
+ "worktree directory '%s' does not exist",
+ wt->worktree_path);
+ return GIT_ERROR;
+ }
+
return 0;
}
diff --git a/tests/worktree/worktree.c b/tests/worktree/worktree.c
index cd20bed..f2078a3 100644
--- a/tests/worktree/worktree.c
+++ b/tests/worktree/worktree.c
@@ -610,3 +610,15 @@ void test_worktree_worktree__foreach_worktree_lists_all_worktrees(void)
int counter = 0;
cl_git_pass(git_repository_foreach_worktree(fixture.repo, foreach_worktree_cb, &counter));
}
+
+void test_worktree_worktree__validate_invalid_worktreedir(void)
+{
+ git_worktree *wt;
+
+ cl_git_pass(git_worktree_lookup(&wt, fixture.repo, "testrepo-worktree"));
+ p_rename("testrepo-worktree", "testrepo-worktree-tmp");
+ cl_git_fail(git_worktree_validate(wt));
+ p_rename("testrepo-worktree-tmp", "testrepo-worktree");
+
+ git_worktree_free(wt);
+}