mirror of
https://github.com/git-for-windows/git.git
synced 2025-12-12 04:41:35 -06:00
Protect get_author_ident_from_commit() from filenames in work tree
We used to use "cat-file commit $commit" to extract the original author information from existing commit, but an earlier commit 5ac2715 (Consistent message encoding while reusing log from an existing commit) changed it to use "git show -s $commit". If you have a file in your work tree that can be interpreted as a valid object name (e.g. "HEAD"), this conversion will not work. Disambiguate by marking the end of revision parameter on the comand line with an explicit "--" to fix this. This breakage is most visible with rebase when a file called "HEAD" exists in the worktree. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
04b330551e
commit
077b725f0b
@ -119,7 +119,7 @@ get_author_ident_from_commit () {
|
||||
}
|
||||
'
|
||||
encoding=$(git config i18n.commitencoding || echo UTF-8)
|
||||
git show -s --pretty=raw --encoding="$encoding" "$1" |
|
||||
git show -s --pretty=raw --encoding="$encoding" "$1" -- |
|
||||
LANG=C LC_ALL=C sed -ne "$pick_author_script"
|
||||
}
|
||||
|
||||
|
||||
@ -340,4 +340,26 @@ test_expect_success 'rebase a commit violating pre-commit' '
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'rebase with a file named HEAD in worktree' '
|
||||
|
||||
rm -fr .git/hooks &&
|
||||
git reset --hard &&
|
||||
git checkout -b branch3 A &&
|
||||
|
||||
(
|
||||
GIT_AUTHOR_NAME="Squashed Away" &&
|
||||
export GIT_AUTHOR_NAME &&
|
||||
>HEAD &&
|
||||
git add HEAD &&
|
||||
git commit -m "Add head" &&
|
||||
>BODY &&
|
||||
git add BODY &&
|
||||
git commit -m "Add body"
|
||||
) &&
|
||||
|
||||
FAKE_LINES="1 squash 2" git rebase -i to-be-rebased &&
|
||||
test "$(git show -s --pretty=format:%an)" = "Squashed Away"
|
||||
|
||||
'
|
||||
|
||||
test_done
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user