mirror of
https://github.com/git/git
synced 2024-08-27 11:39:22 +00:00
stash: prefer plumbing over git-diff
When creating a stash, we need to look at the diff between the working tree and HEAD, and do so using the git-diff porcelain. Because git-diff enables porcelain config like renames by default, this causes at least one problem. The --name-only format will not mention the source side of a rename, meaning we will fail to stash a deletion that is part of a rename. We could fix that case by passing --no-renames, but this is a symptom of a larger problem. We should be using the diff-index plumbing here, which does not have renames enabled by default, and also does not respect any potentially confusing config options. Reported-by: Matthew Patey <matthew.patey2167@gmail.com> Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
05219a1276
commit
9d4e28ead5
|
@ -116,7 +116,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"
|
||||
|
|
|
@ -731,4 +731,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
|
||||
|
|
Loading…
Reference in a new issue