Commit a565f364aba55c730908f80e63c90d9432667075

Jacques Germishuys 2014-09-12T22:53:56

Only check for workdir conflicts if the index has merged files Passing 0 as the length of the paths to check to git_diff_index_to_workdir results in all files being treated as conflicting, that is, all untracked or modified files in the worktree is reported as conflicting

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
diff --git a/src/merge.c b/src/merge.c
index 926a600..341f9a6 100644
--- a/src/merge.c
+++ b/src/merge.c
@@ -2347,6 +2347,16 @@ static int merge_check_workdir(size_t *conflicts, git_repository *repo, git_inde
 
 	*conflicts = 0;
 
+	/* We need to have merged at least 1 file for the possibility to exist to
+	 * have conflicts with the workdir. Passing 0 as the pathspec count paramter
+	 * will consider all files in the working directory, that is, we may detect
+	 * a conflict if there were untracked files in the workdir prior to starting
+	 * the merge. This typically happens when cherry-picking a commmit whose
+	 * changes have already been applied.
+	 */
+	if (merged_paths->length == 0)
+		return 0;
+
 	opts.flags |= GIT_DIFF_INCLUDE_UNTRACKED;
 
 	/* Workdir changes may exist iff they do not conflict with changes that