Commit 5c8bb98ce9c4e5bb6527c8ffc274c8b3e0755fa7

Russell Belfer 2013-01-08T13:45:06

Fix err msg for ambiguous path in git_status_file Returning GIT_EAMBIGUOUS from inside the status callback gets overridden with GIT_EUSER. `git_status_file` accounted for this via the callback payload, but was allowing the error message to be cleared. Move the `giterr_set` call outside the callback to where the EUSER case was being dealt with.

diff --git a/src/status.c b/src/status.c
index 777d850..5b89e8c 100644
--- a/src/status.c
+++ b/src/status.c
@@ -208,9 +208,8 @@ static int get_one_status(const char *path, unsigned int status, void *data)
 
 	if (sfi->count > 1 ||
 		(strcmp(sfi->expected, path) != 0 &&
-		p_fnmatch(sfi->expected, path, 0) != 0)) {
-		giterr_set(GITERR_INVALID,
-			"Ambiguous path '%s' given to git_status_file", sfi->expected);
+		p_fnmatch(sfi->expected, path, 0) != 0))
+	{
 		sfi->ambiguous = true;
 		return GIT_EAMBIGUOUS;
 	}
@@ -242,8 +241,11 @@ int git_status_file(
 
 	error = git_status_foreach_ext(repo, &opts, get_one_status, &sfi);
 
-	if (error < 0 && sfi.ambiguous)
+	if (error < 0 && sfi.ambiguous) {
+		giterr_set(GITERR_INVALID,
+			"Ambiguous path '%s' given to git_status_file", sfi.expected);
 		error = GIT_EAMBIGUOUS;
+	}
 
 	if (!error && !sfi.count) {
 		git_buf full = GIT_BUF_INIT;