git/t/t3417-rebase-whitespace-fix.sh
Patrick Steinhardt 4806c55c86 apply: fix leaking string in match_fragment()
Before calling `update_pre_post_images()`, we call `strbuf_detach()` to
put its buffer into a new string variable that we then pass to that
function. Besides being rather pointless, it also causes us to leak
memory of that variable because we never free it.

Get rid of the variable altogether and instead reach into the `strbuf`
directly. While at it, refactor the code to have a common exit path and
mark string that do not contain allocated memory as constant.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2024-06-11 13:15:07 -07:00

125 lines
1.9 KiB
Bash
Executable file

#!/bin/sh
test_description='git rebase --whitespace=fix
This test runs git rebase --whitespace=fix and make sure that it works.
'
TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh
# prepare initial revision of "file" with a blank line at the end
cat >file <<EOF
a
b
c
EOF
# expected contents in "file" after rebase
cat >expect-first <<EOF
a
b
c
EOF
# prepare second revision of "file"
cat >second <<EOF
a
b
c
d
e
f
EOF
# expected contents in second revision after rebase
cat >expect-second <<EOF
a
b
c
d
e
f
EOF
test_expect_success 'blank line at end of file; extend at end of file' '
git commit --allow-empty -m "Initial empty commit" &&
git add file && git commit -m first &&
mv second file &&
git add file && git commit -m second &&
git rebase --whitespace=fix HEAD^^ &&
git diff --exit-code HEAD^:file expect-first &&
test_cmp expect-second file
'
# prepare third revision of "file"
sed -e's/Z//' >third <<EOF
a
b
c
d
e
f
Z
Z
h
i
j
k
l
EOF
sed -e's/ //g' <third >expect-third
test_expect_success 'two blanks line at end of file; extend at end of file' '
cp third file && git add file && git commit -m third &&
git rebase --whitespace=fix HEAD^^ &&
git diff --exit-code HEAD^:file expect-second &&
test_cmp expect-third file
'
test_expect_success 'same, but do not remove trailing spaces' '
git config core.whitespace "-blank-at-eol" &&
git reset --hard HEAD^ &&
cp third file && git add file && git commit -m third &&
git rebase --whitespace=fix HEAD^^ &&
git diff --exit-code HEAD^:file expect-second &&
test_cmp file third
'
sed -e's/Z//' >beginning <<EOF
a
Z
Z
EOF
cat >expect-beginning <<EOF
a
1
2
3
4
5
EOF
test_expect_success 'at beginning of file' '
git config core.whitespace "blank-at-eol" &&
cp beginning file &&
git commit -m beginning file &&
test_write_lines 1 2 3 4 5 >>file &&
git commit -m more file &&
git rebase --whitespace=fix HEAD^^ &&
test_cmp expect-beginning file
'
test_done