summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2017-01-17 14:49:30 -0800
committerJunio C Hamano <gitster@pobox.com>2017-01-17 14:49:30 -0800
commit12361d025fe0752342dabb06d79ff541eb081002 (patch)
tree1e21891f5db927b2bc7293cd81d003d8c03f0292
parent5ce6f51ff78bcb847c6c4835d80f6b58d730a8de (diff)
parent9d4e28ead5bf133d014dfc9e9345f6bf083eefea (diff)
downloadgit-12361d025fe0752342dabb06d79ff541eb081002.tar.gz
Merge branch 'jk/stash-disable-renames-internally' into maint
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
-rwxr-xr-xgit-stash.sh2
-rwxr-xr-xt/t3903-stash.sh9
2 files changed, 10 insertions, 1 deletions
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