diff options
author | Junio C Hamano <gitster@pobox.com> | 2011-05-02 15:58:27 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-05-02 15:58:27 -0700 |
commit | 2db8926236406a4e4cb17d1b9c4b791706fb0512 (patch) | |
tree | 2156bd237ac11f679bbc3bb9e085cae81d12e441 | |
parent | 791a765e54b9b4c8d2cf4f069222e31cef8aa24e (diff) | |
parent | d7c9bf22351e39756f93f09b4251a6b5861d9cc0 (diff) | |
download | git-2db8926236406a4e4cb17d1b9c4b791706fb0512.tar.gz |
Merge branch 'mz/maint-rename-unmerged'
* mz/maint-rename-unmerged:
diffcore-rename: don't consider unmerged path as source
-rw-r--r-- | diffcore-rename.c | 7 | ||||
-rwxr-xr-x | t/t7060-wtstatus.sh | 62 |
2 files changed, 67 insertions, 2 deletions
diff --git a/diffcore-rename.c b/diffcore-rename.c index 3d65bb370d..f639601c76 100644 --- a/diffcore-rename.c +++ b/diffcore-rename.c @@ -515,7 +515,7 @@ void diffcore_rename(struct diff_options *options) else locate_rename_dst(p->two, 1); } - else if (!DIFF_FILE_VALID(p->two)) { + else if (!DIFF_PAIR_UNMERGED(p) && !DIFF_FILE_VALID(p->two)) { /* * If the source is a broken "delete", and * they did not really want to get broken, @@ -631,7 +631,10 @@ void diffcore_rename(struct diff_options *options) struct diff_filepair *p = q->queue[i]; struct diff_filepair *pair_to_free = NULL; - if (!DIFF_FILE_VALID(p->one) && DIFF_FILE_VALID(p->two)) { + if (DIFF_PAIR_UNMERGED(p)) { + diff_q(&outq, p); + } + else if (!DIFF_FILE_VALID(p->one) && DIFF_FILE_VALID(p->two)) { /* * Creation * diff --git a/t/t7060-wtstatus.sh b/t/t7060-wtstatus.sh index b4fcc86a10..3a5d927f83 100755 --- a/t/t7060-wtstatus.sh +++ b/t/t7060-wtstatus.sh @@ -56,4 +56,66 @@ test_expect_success C_LOCALE_OUTPUT 'M/D conflict does not segfault' ' ) ' +test_expect_success 'rename & unmerged setup' ' + git rm -f -r . && + cat "$TEST_DIRECTORY/README" >ONE && + git add ONE && + test_tick && + git commit -m "One commit with ONE" && + + echo Modified >TWO && + cat ONE >>TWO && + cat ONE >>THREE && + git add TWO THREE && + sha1=$(git rev-parse :ONE) && + git rm --cached ONE && + ( + echo "100644 $sha1 1 ONE" && + echo "100644 $sha1 2 ONE" && + echo "100644 $sha1 3 ONE" + ) | git update-index --index-info && + echo Further >>THREE +' + +test_expect_success 'rename & unmerged status' ' + git status -suno >actual && + cat >expect <<-EOF && + UU ONE + AM THREE + A TWO + EOF + test_cmp expect actual +' + +test_expect_success 'git diff-index --cached shows 2 added + 1 unmerged' ' + cat >expected <<-EOF && + U ONE + A THREE + A TWO + EOF + git diff-index --cached --name-status HEAD >actual && + test_cmp expected actual +' + +test_expect_success 'git diff-index --cached -M shows 2 added + 1 unmerged' ' + cat >expected <<-EOF && + U ONE + A THREE + A TWO + EOF + git diff-index --cached --name-status HEAD >actual && + test_cmp expected actual +' + +test_expect_success 'git diff-index --cached -C shows 2 copies + 1 unmerged' ' + cat >expected <<-EOF && + U ONE + C ONE THREE + C ONE TWO + EOF + git diff-index --cached -C --name-status HEAD | + sed "s/^C[0-9]*/C/g" >actual && + test_cmp expected actual +' + test_done |