aboutsummaryrefslogtreecommitdiff
path: root/read-cache.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2009-02-03 00:26:17 -0800
committerJunio C Hamano <gitster@pobox.com>2009-02-03 00:26:17 -0800
commitf39e4cfa2ec2bab4175cee3a9e806d8b65161c75 (patch)
tree080aa6dcd4d42ef5e4583b7ea84f33d97efd7c1f /read-cache.c
parent1487eb68f7fd145151caa9a11ee00283629b75ef (diff)
parent4cc8d6c62db1f82b3c98468806d2ee54c7e037ca (diff)
downloadgit-f39e4cfa2ec2bab4175cee3a9e806d8b65161c75.tar.gz
git-f39e4cfa2ec2bab4175cee3a9e806d8b65161c75.tar.xz
Merge branch 'jc/maint-add-u-remove-conflicted'
* jc/maint-add-u-remove-conflicted: add -u: do not fail to resolve a path as deleted
Diffstat (limited to 'read-cache.c')
-rw-r--r--read-cache.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/read-cache.c b/read-cache.c
index b1475ffa0..940ec76fd 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -1574,6 +1574,26 @@ static void update_callback(struct diff_queue_struct *q,
default:
die("unexpected diff status %c", p->status);
case DIFF_STATUS_UNMERGED:
+ /*
+ * ADD_CACHE_IGNORE_REMOVAL is unset if "git
+ * add -u" is calling us, In such a case, a
+ * missing work tree file needs to be removed
+ * if there is an unmerged entry at stage #2,
+ * but such a diff record is followed by
+ * another with DIFF_STATUS_DELETED (and if
+ * there is no stage #2, we won't see DELETED
+ * nor MODIFIED). We can simply continue
+ * either way.
+ */
+ if (!(data->flags & ADD_CACHE_IGNORE_REMOVAL))
+ continue;
+ /*
+ * Otherwise, it is "git add path" is asking
+ * to explicitly add it; we fall through. A
+ * missing work tree file is an error and is
+ * caught by add_file_to_index() in such a
+ * case.
+ */
case DIFF_STATUS_MODIFIED:
case DIFF_STATUS_TYPE_CHANGED:
if (add_file_to_index(&the_index, path, data->flags)) {