зеркало из https://github.com/microsoft/git.git
mergetool: respect autocrlf by using checkout-index
Previously, git mergetool used cat-file which does not perform git to worktree conversion. This changes mergetool to use git checkout-index instead which means that the temporary files used for mergetool use the correct line endings for the platform. Signed-off-by: Charles Bailey <charles@hashpling.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
b80da424a1
Коммит
0ec7b6c26d
|
@ -127,6 +127,14 @@ check_unchanged () {
|
|||
fi
|
||||
}
|
||||
|
||||
checkout_staged_file () {
|
||||
tmpfile=$(expr "$(git checkout-index --temp --stage="$1" "$2")" : '\([^ ]*\) ')
|
||||
|
||||
if test $? -eq 0 -a -n "$tmpfile" ; then
|
||||
mv -- "$tmpfile" "$3"
|
||||
fi
|
||||
}
|
||||
|
||||
merge_file () {
|
||||
MERGED="$1"
|
||||
|
||||
|
@ -153,9 +161,9 @@ merge_file () {
|
|||
local_mode=`git ls-files -u -- "$MERGED" | awk '{if ($3==2) print $1;}'`
|
||||
remote_mode=`git ls-files -u -- "$MERGED" | awk '{if ($3==3) print $1;}'`
|
||||
|
||||
base_present && git cat-file blob ":1:$prefix$MERGED" >"$BASE" 2>/dev/null
|
||||
local_present && git cat-file blob ":2:$prefix$MERGED" >"$LOCAL" 2>/dev/null
|
||||
remote_present && git cat-file blob ":3:$prefix$MERGED" >"$REMOTE" 2>/dev/null
|
||||
base_present && checkout_staged_file 1 "$prefix$MERGED" "$BASE"
|
||||
local_present && checkout_staged_file 2 "$prefix$MERGED" "$LOCAL"
|
||||
remote_present && checkout_staged_file 3 "$prefix$MERGED" "$REMOTE"
|
||||
|
||||
if test -z "$local_mode" -o -z "$remote_mode"; then
|
||||
echo "Deleted merge conflict for '$MERGED':"
|
||||
|
|
|
@ -43,4 +43,15 @@ test_expect_success 'custom mergetool' '
|
|||
git commit -m "branch1 resolved with mergetool"
|
||||
'
|
||||
|
||||
test_expect_success 'mergetool crlf' '
|
||||
git config core.autocrlf true &&
|
||||
git reset --hard HEAD^
|
||||
test_must_fail git merge master >/dev/null 2>&1 &&
|
||||
( yes "" | git mergetool file1>/dev/null 2>&1 ) &&
|
||||
( yes "" | git mergetool file2>/dev/null 2>&1 ) &&
|
||||
test "$(printf x | cat file1 -)" = "$(printf "master updated\r\nx")" &&
|
||||
test "$(printf x | cat file2 -)" = "$(printf "master new\r\nx")" &&
|
||||
git commit -m "branch1 resolved with mergetool - autocrlf"
|
||||
'
|
||||
|
||||
test_done
|
||||
|
|
Загрузка…
Ссылка в новой задаче