From: Junio C Hamano Date: Mon, 19 Dec 2016 22:45:33 +0000 (-0800) Subject: Merge branch 'jk/stash-disable-renames-internally' X-Git-Tag: v2.12.0-rc0~136 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/db09f21bbd74d87ef26c059d39442518c44a422c?hp=da72ee87fb5f27f44b1b48a18765ab1c6280f070 Merge branch 'jk/stash-disable-renames-internally' When diff.renames configuration is on (and with Git 2.9 and later, it is enabled by default, which made it worse), "git stash" misbehaved if a file is removed and another file with a very similar content is added. * jk/stash-disable-renames-internally: stash: prefer plumbing over git-diff --- diff --git a/git-stash.sh b/git-stash.sh index 4546abaaef..10c284d1aa 100755 --- a/git-stash.sh +++ b/git-stash.sh @@ -115,7 +115,7 @@ create_stash () { git read-tree --index-output="$TMPindex" -m $i_tree && GIT_INDEX_FILE="$TMPindex" && export GIT_INDEX_FILE && - git diff --name-only -z HEAD -- >"$TMP-stagenames" && + git diff-index --name-only -z HEAD -- >"$TMP-stagenames" && git update-index -z --add --remove --stdin <"$TMP-stagenames" && git write-tree && rm -f "$TMPindex" diff --git a/t/t3903-stash.sh b/t/t3903-stash.sh index e1a6ccc00c..2de3e18ce6 100755 --- a/t/t3903-stash.sh +++ b/t/t3903-stash.sh @@ -766,4 +766,13 @@ test_expect_success 'stash list --cc shows combined diff' ' test_cmp expect actual ' +test_expect_success 'stash is not confused by partial renames' ' + mv file renamed && + git add renamed && + git stash && + git stash apply && + test_path_is_file renamed && + test_path_is_missing file +' + test_done