Commit 9bda5fb8c1fa5d69616477f43b511b6f717115ec

Ben Straub 2014-02-18T14:05:30

Improve error propagation in shallow call

diff --git a/src/repository.c b/src/repository.c
index 9f0c2f6..89ae324 100644
--- a/src/repository.c
+++ b/src/repository.c
@@ -2001,9 +2001,10 @@ int git_repository_is_shallow(git_repository *repo)
 	error = git_path_lstat(path.ptr, &st);
 	git_buf_free(&path);
 
-	if (error == GIT_ENOTFOUND)
+	if (error == GIT_ENOTFOUND) {
+		giterr_clear();
 		return 0;
-	if (error < 0)
-		return -1;
-	return st.st_size == 0 ? 0 : 1;
+	}
+
+	return error < 0 ? error : st.st_size == 0 ? 0 : 1;
 }
diff --git a/tests/repo/shallow.c b/tests/repo/shallow.c
index 1cc66ae..5aeaf2d 100644
--- a/tests/repo/shallow.c
+++ b/tests/repo/shallow.c
@@ -31,3 +31,9 @@ void test_repo_shallow__shallow_repo(void)
 	cl_assert_equal_i(1, git_repository_is_shallow(g_repo));
 }
 
+void test_repo_shallow__clears_errors(void)
+{
+	g_repo = cl_git_sandbox_init("testrepo.git");
+	cl_assert_equal_i(0, git_repository_is_shallow(g_repo));
+	cl_assert_equal_p(NULL, giterr_last());
+}