git-commit-vandalism/builtin
Junio C Hamano 75973b2cb5 Fix "add -u" that sometimes fails to resolve unmerged paths
"git add -u" updates the index with the updated contents from the working
tree by internally running "diff-files" to grab the set of paths that are
different from the index. Then it updates the index entries for the paths
that are modified in the working tree, and deletes the index entries for
the paths that are deleted in the working tree.

It ignored the output from the diff-files that indicated that a path is
unmerged.  For these paths, it instead relied on the fact that an unmerged
path is followed by the result of comparison between stage #2 (ours) and
the working tree, and used that to update or delete such a path when it is
used to record the resolution of a conflict.

As the result, when a path did not have stage #2 (e.g. "we deleted while
the other side added"), these unmerged stages were left behind, instead of
recording what the user resolved in the working tree.

Since we recently fixed "diff-files" to indicate if the corresponding path
exists on the working tree for an unmerged path, we do not have to rely on
the comparison with stage #2 anymore. We can instead tell the diff-files
not to compare with higher stages, and use the unmerged output to update
the index to reflect the state of the working tree.

The changes to the test vector in t2200 illustrates the nature of the bug
and the fix.  The test expected stage #1 and #3 entries be left behind,
but it was codifying the buggy behaviour.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2011-04-23 23:13:28 -07:00
..
add.c Fix "add -u" that sometimes fails to resolve unmerged paths 2011-04-23 23:13:28 -07:00
annotate.c
apply.c Merge branch 'jn/apply-filename-with-sp' 2010-09-03 09:43:44 -07:00
archive.c
bisect--helper.c
blame.c Merge branch 'maint' 2010-08-22 20:18:37 -07:00
branch.c
bundle.c bundle: run setup_git_directory_gently() sooner 2010-08-15 19:57:33 -07:00
cat-file.c
check-attr.c
check-ref-format.c Allow "check-ref-format --branch" from subdirectory 2010-08-06 10:01:45 -07:00
checkout-index.c
checkout.c Merge branch 'jl/submodule-ignore-diff' 2010-09-04 08:17:09 -07:00
clean.c builtin/clean.c: Use STRING_LIST_INIT_NODUP. 2010-09-06 16:56:51 -07:00
clone.c clone: warn users --depth is ignored in local clones 2010-08-24 09:28:02 -07:00
commit-tree.c
commit.c Merge branch 'jn/fix-abbrev' into maint 2010-08-20 12:53:09 -07:00
config.c Merge branch 'jn/paginate-fix' 2010-08-31 16:23:31 -07:00
count-objects.c
describe.c
diff-files.c Submodules: Use "ignore" settings from .gitmodules too for diff and status 2010-08-09 09:11:44 -07:00
diff-index.c Submodules: Use "ignore" settings from .gitmodules too for diff and status 2010-08-09 09:11:44 -07:00
diff-tree.c Submodules: Use "ignore" settings from .gitmodules too for diff and status 2010-08-09 09:11:44 -07:00
diff.c Submodules: Use "ignore" settings from .gitmodules too for diff and status 2010-08-09 09:11:44 -07:00
fast-export.c Merge branch 'en/d-f-conflict-fix' 2010-09-08 08:54:01 -07:00
fetch-pack.c
fetch.c builtin/fetch.c: comment that branch->remote_name is usable when has_merge 2010-09-09 17:15:58 -07:00
fmt-merge-msg.c Merge branch 'jn/update-contrib-example-merge' 2010-09-03 09:43:42 -07:00
for-each-ref.c for-each-ref: fix objectname:short bug 2010-08-26 16:42:25 -07:00
fsck.c
gc.c
grep.c Merge branch 'jn/paginate-fix' 2010-08-31 16:23:31 -07:00
hash-object.c
help.c Cast execl*() NULL sentinels to (char *) 2010-07-25 23:14:18 -07:00
index-pack.c Merge branch 'jn/paginate-fix' 2010-08-31 16:23:31 -07:00
init-db.c
log.c Fix 'git log' early pager startup error case 2010-08-25 12:11:59 -07:00
ls-files.c Merge branch 'ar/string-list-foreach' 2010-08-18 12:14:38 -07:00
ls-remote.c ls-remote: run setup_git_directory_gently() sooner 2010-08-15 20:00:02 -07:00
ls-tree.c ls-tree $di $dir: do not mistakenly recurse into directories 2010-09-12 13:52:03 -07:00
mailinfo.c
mailsplit.c
merge-base.c merge-base --independent to print reduced parent list in a merge 2010-08-18 14:02:03 -07:00
merge-file.c merge-file: run setup_git_directory_gently() sooner 2010-08-15 20:00:03 -07:00
merge-index.c
merge-ours.c
merge-recursive.c Merge branch 'jn/merge-renormalize' 2010-09-03 09:43:41 -07:00
merge-tree.c
merge.c Merge branch 'dg/local-mod-error-messages' 2010-09-03 22:23:49 -07:00
mktag.c
mktree.c
mv.c
name-rev.c object.h: Add OBJECT_ARRAY_INIT macro and make use of it. 2010-08-29 22:42:49 -07:00
notes.c notes: Don't create (empty) commit when removing non-existing notes 2010-08-31 11:07:34 -07:00
pack-objects.c
pack-redundant.c
pack-refs.c
patch-id.c
prune-packed.c
prune.c prune: allow --dry-run for -n and --verbose for -v 2010-08-09 10:13:18 -07:00
push.c Merge branch 'maint' 2010-08-12 18:07:09 -07:00
read-tree.c
receive-pack.c
reflog.c
remote.c
replace.c
rerere.c Merge branch 'jn/merge-renormalize' 2010-09-03 09:43:41 -07:00
reset.c reset: suggest what to do upon "git reset --mixed <paths>" 2010-08-21 23:17:35 -07:00
rev-list.c
rev-parse.c
revert.c revert: Fix trivial comment style issue 2010-09-06 17:33:59 -07:00
rm.c
send-pack.c
shortlog.c shortlog: run setup_git_directory_gently() sooner 2010-08-11 09:24:01 -07:00
show-branch.c
show-ref.c
stripspace.c
symbolic-ref.c
tag.c
tar-tree.c
unpack-file.c
unpack-objects.c
update-index.c
update-ref.c
update-server-info.c
upload-archive.c
var.c var: run setup_git_directory_gently() sooner 2010-08-15 20:00:02 -07:00
verify-pack.c
verify-tag.c
write-tree.c