author | Junio C Hamano <gitster@pobox.com> | |
Mon, 1 Aug 2011 22:00:08 +0000 (15:00 -0700) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Mon, 1 Aug 2011 22:00:08 +0000 (15:00 -0700) |
* jc/maint-reset-unmerged-path:
reset [<commit>] paths...: do not mishandle unmerged paths
reset [<commit>] paths...: do not mishandle unmerged paths
builtin/reset.c | patch | blob | history | |
diff-lib.c | patch | blob | history | |
t/t7102-reset.sh | patch | blob | history |
diff --git a/builtin/reset.c b/builtin/reset.c
index 98bca044c1267fa63cb084a45aaf621e85f7d9b6..777e7c612900f867c5a52723ebdd56c9db793489 100644 (file)
--- a/builtin/reset.c
+++ b/builtin/reset.c
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 2e09500c8210e22d6c81484aa198f1d811a9933d..b3797592c63a86b46a3af0d875b6fe04ea43f536 100644 (file)
--- a/diff-lib.c
+++ b/diff-lib.c
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 f1cfc9ac959ee281d50f7b8a51fdcefd2d0670e7..b096dc88c2f4caf28887cf8fea5d700f0132f5a3 100755 (executable)
--- a/t/t7102-reset.sh
+++ b/t/t7102-reset.sh
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 &&