diff options
author | Junio C Hamano <gitster@pobox.com> | 2011-08-16 11:41:28 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-08-16 11:41:28 -0700 |
commit | 7aa50897dda0360b9cbbe23e723a5aee461e1d71 (patch) | |
tree | faa92da7147f6ffee7057a9e3afeaa2a6fca398c | |
parent | b5e104a0e69f224b89a849fa1e9b4064a36c2f4b (diff) | |
parent | ff00b682f203eb39876b57404916b4c54b6032c6 (diff) | |
download | git-7aa50897dda0360b9cbbe23e723a5aee461e1d71.tar.gz git-7aa50897dda0360b9cbbe23e723a5aee461e1d71.tar.xz |
Merge branch 'jc/maint-reset-unmerged-path' into maint
* jc/maint-reset-unmerged-path:
reset [<commit>] paths...: do not mishandle unmerged paths
-rw-r--r-- | builtin/reset.c | 2 | ||||
-rw-r--r-- | diff-lib.c | 3 | ||||
-rwxr-xr-x | t/t7102-reset.sh | 15 |
3 files changed, 18 insertions, 2 deletions
diff --git a/builtin/reset.c b/builtin/reset.c index 98bca044c..777e7c612 100644 --- a/builtin/reset.c +++ b/builtin/reset.c @@ -162,7 +162,7 @@ static void update_index_from_diff(struct diff_queue_struct *q, for (i = 0; i < q->nr; i++) { struct diff_filespec *one = q->queue[i]->one; - if (one->mode) { + if (one->mode && !is_null_sha1(one->sha1)) { struct cache_entry *ce; ce = make_cache_entry(one->mode, one->sha1, one->path, 0, 0); diff --git a/diff-lib.c b/diff-lib.c index 2e09500c8..b3797592c 100644 --- a/diff-lib.c +++ b/diff-lib.c @@ -379,7 +379,8 @@ static void do_oneway_diff(struct unpack_trees_options *o, if (cached && idx && ce_stage(idx)) { struct diff_filepair *pair; pair = diff_unmerge(&revs->diffopt, idx->name); - fill_filespec(pair->one, idx->sha1, idx->ce_mode); + if (tree) + fill_filespec(pair->one, tree->sha1, tree->ce_mode); return; } diff --git a/t/t7102-reset.sh b/t/t7102-reset.sh index f1cfc9ac9..b096dc88c 100755 --- a/t/t7102-reset.sh +++ b/t/t7102-reset.sh @@ -429,6 +429,21 @@ test_expect_success '--mixed refreshes the index' ' test_i18ncmp expect output ' +test_expect_success 'resetting specific path that is unmerged' ' + git rm --cached file2 && + F1=$(git rev-parse HEAD:file1) && + F2=$(git rev-parse HEAD:file2) && + F3=$(git rev-parse HEAD:secondfile) && + { + echo "100644 $F1 1 file2" && + echo "100644 $F2 2 file2" && + echo "100644 $F3 3 file2" + } | git update-index --index-info && + git ls-files -u && + test_must_fail git reset HEAD file2 && + git diff-index --exit-code --cached HEAD +' + test_expect_success 'disambiguation (1)' ' git reset --hard && |