mirror of
https://github.com/git/git
synced 2024-08-25 10:45:59 +00:00
![Taylor Blau](/assets/img/avatar_default.png)
This test was leak-free when t3321 was originally introduced, but never marked as such: $ rev="$(git log --format='%H' --reverse -1 HEAD^ -- t/t3321-notes-stripspace.sh)" $ git checkout $rev $ make SANITIZE=leak [...] $ make -C t GIT_TEST_PASSING_SANITIZE_LEAK=check GIT_TEST_OPTS=--immediate t3321-notes-stripspace.sh [...] # passed all 27 test(s) 1..27 # faking up non-zero exit with --invert-exit-code make: *** [Makefile:66: t3321-notes-stripspace.sh] Error 1 make: Leaving directory '/home/ttaylorr/src/git/t' Mark this test as leak-free accordingly. Signed-off-by: Taylor Blau <me@ttaylorr.com> Acked-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
579 lines
11 KiB
Bash
Executable file
579 lines
11 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
# Copyright (c) 2023 Teng Long
|
|
#
|
|
|
|
test_description='Test commit notes with stripspace behavior'
|
|
|
|
TEST_PASSES_SANITIZE_LEAK=true
|
|
. ./test-lib.sh
|
|
|
|
MULTI_LF="$LF$LF$LF"
|
|
write_script fake_editor <<\EOF
|
|
echo "$MSG" >"$1"
|
|
echo "$MSG" >&2
|
|
EOF
|
|
GIT_EDITOR=./fake_editor
|
|
export GIT_EDITOR
|
|
|
|
test_expect_success 'setup the commit' '
|
|
test_commit 1st
|
|
'
|
|
|
|
test_expect_success 'add note by editor' '
|
|
test_when_finished "git notes remove" &&
|
|
cat >expect <<-EOF &&
|
|
first-line
|
|
|
|
second-line
|
|
EOF
|
|
|
|
MSG="${LF}first-line${MULTI_LF}second-line${LF}" git notes add &&
|
|
git notes show >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'add note by specifying single "-m", "--stripspace" is the default behavior' '
|
|
test_when_finished "git notes remove" &&
|
|
cat >expect <<-EOF &&
|
|
first-line
|
|
|
|
second-line
|
|
EOF
|
|
|
|
git notes add -m "${LF}first-line${MULTI_LF}second-line${LF}" &&
|
|
git notes show >actual &&
|
|
test_cmp expect actual &&
|
|
git notes remove &&
|
|
git notes add --stripspace -m "${LF}first-line${MULTI_LF}second-line${LF}" &&
|
|
git notes show >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'add note by specifying single "-m" and "--no-stripspace" ' '
|
|
test_when_finished "git notes remove" &&
|
|
cat >expect <<-EOF &&
|
|
${LF}first-line${MULTI_LF}second-line
|
|
EOF
|
|
|
|
git notes add --no-stripspace \
|
|
-m "${LF}first-line${MULTI_LF}second-line${LF}" &&
|
|
git notes show >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'add note by specifying multiple "-m", "--stripspace" is the default behavior' '
|
|
test_when_finished "git notes remove" &&
|
|
cat >expect <<-EOF &&
|
|
first-line
|
|
|
|
second-line
|
|
EOF
|
|
|
|
git notes add -m "${LF}" \
|
|
-m "first-line" \
|
|
-m "${MULTI_LF}" \
|
|
-m "second-line" \
|
|
-m "${LF}" &&
|
|
git notes show >actual &&
|
|
test_cmp expect actual &&
|
|
git notes remove &&
|
|
git notes add --stripspace -m "${LF}" \
|
|
-m "first-line" \
|
|
-m "${MULTI_LF}" \
|
|
-m "second-line" \
|
|
-m "${LF}" &&
|
|
git notes show >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'add notes by specifying multiple "-m" and "--no-stripspace"' '
|
|
test_when_finished "git notes remove" &&
|
|
cat >expect <<-EOF &&
|
|
${LF}
|
|
first-line
|
|
${MULTI_LF}
|
|
second-line${LF}
|
|
EOF
|
|
|
|
git notes add --no-stripspace \
|
|
-m "${LF}" \
|
|
-m "first-line" \
|
|
-m "${MULTI_LF}" \
|
|
-m "second-line" \
|
|
-m "${LF}" &&
|
|
git notes show >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'add note by specifying single "-F", "--stripspace" is the default behavior' '
|
|
test_when_finished "git notes remove" &&
|
|
cat >expect <<-EOF &&
|
|
first-line
|
|
|
|
second-line
|
|
EOF
|
|
|
|
cat >note-file <<-EOF &&
|
|
${LF}
|
|
first-line
|
|
${MULTI_LF}
|
|
second-line
|
|
${LF}
|
|
EOF
|
|
|
|
git notes add -F note-file &&
|
|
git notes show >actual &&
|
|
test_cmp expect actual &&
|
|
git notes remove &&
|
|
git notes add --stripspace -F note-file &&
|
|
git notes show >actual
|
|
'
|
|
|
|
test_expect_success 'add note by specifying single "-F" and "--no-stripspace"' '
|
|
test_when_finished "git notes remove" &&
|
|
cat >expect <<-EOF &&
|
|
${LF}
|
|
first-line
|
|
${MULTI_LF}
|
|
second-line
|
|
${LF}
|
|
EOF
|
|
|
|
cat >note-file <<-EOF &&
|
|
${LF}
|
|
first-line
|
|
${MULTI_LF}
|
|
second-line
|
|
${LF}
|
|
EOF
|
|
|
|
git notes add --no-stripspace -F note-file &&
|
|
git notes show >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'add note by specifying multiple "-F", "--stripspace" is the default behavior' '
|
|
test_when_finished "git notes remove" &&
|
|
cat >expect <<-EOF &&
|
|
file-1-first-line
|
|
|
|
file-1-second-line
|
|
|
|
file-2-first-line
|
|
|
|
file-2-second-line
|
|
EOF
|
|
|
|
cat >note-file-1 <<-EOF &&
|
|
${LF}
|
|
file-1-first-line
|
|
${MULTI_LF}
|
|
file-1-second-line
|
|
${LF}
|
|
EOF
|
|
|
|
cat >note-file-2 <<-EOF &&
|
|
${LF}
|
|
file-2-first-line
|
|
${MULTI_LF}
|
|
file-2-second-line
|
|
${LF}
|
|
EOF
|
|
|
|
git notes add -F note-file-1 -F note-file-2 &&
|
|
git notes show >actual &&
|
|
test_cmp expect actual &&
|
|
git notes remove &&
|
|
git notes add --stripspace -F note-file-1 -F note-file-2 &&
|
|
git notes show >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'add note by specifying multiple "-F" with "--no-stripspace"' '
|
|
test_when_finished "git notes remove" &&
|
|
cat >expect <<-EOF &&
|
|
${LF}
|
|
file-1-first-line
|
|
${MULTI_LF}
|
|
file-1-second-line
|
|
${LF}
|
|
|
|
${LF}
|
|
file-2-first-line
|
|
${MULTI_LF}
|
|
file-2-second-line
|
|
${LF}
|
|
EOF
|
|
|
|
cat >note-file-1 <<-EOF &&
|
|
${LF}
|
|
file-1-first-line
|
|
${MULTI_LF}
|
|
file-1-second-line
|
|
${LF}
|
|
EOF
|
|
|
|
cat >note-file-2 <<-EOF &&
|
|
${LF}
|
|
file-2-first-line
|
|
${MULTI_LF}
|
|
file-2-second-line
|
|
${LF}
|
|
EOF
|
|
|
|
git notes add --no-stripspace -F note-file-1 -F note-file-2 &&
|
|
git notes show >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'append note by editor' '
|
|
test_when_finished "git notes remove" &&
|
|
cat >expect <<-EOF &&
|
|
first-line
|
|
|
|
second-line
|
|
EOF
|
|
|
|
git notes add -m "first-line" &&
|
|
MSG="${MULTI_LF}second-line${LF}" git notes append &&
|
|
git notes show >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'append note by specifying single "-m"' '
|
|
test_when_finished "git notes remove" &&
|
|
cat >expect <<-EOF &&
|
|
first-line
|
|
|
|
second-line
|
|
EOF
|
|
|
|
git notes add -m "${LF}first-line" &&
|
|
git notes append -m "${MULTI_LF}second-line${LF}" &&
|
|
git notes show >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'append note by specifying multiple "-m"' '
|
|
test_when_finished "git notes remove" &&
|
|
cat >expect <<-EOF &&
|
|
first-line
|
|
|
|
second-line
|
|
EOF
|
|
|
|
git notes add -m "${LF}first-line" &&
|
|
git notes append -m "${MULTI_LF}" \
|
|
-m "second-line" \
|
|
-m "${LF}" &&
|
|
git notes show >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'add note by specifying single "-F"' '
|
|
test_when_finished "git notes remove" &&
|
|
cat >expect <<-EOF &&
|
|
first-line
|
|
|
|
second-line
|
|
EOF
|
|
|
|
cat >note-file <<-EOF &&
|
|
${LF}
|
|
first-line
|
|
${MULTI_LF}
|
|
second-line
|
|
${LF}
|
|
EOF
|
|
|
|
git notes add -F note-file &&
|
|
git notes show >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'add notes by specifying multiple "-F"' '
|
|
test_when_finished "git notes remove" &&
|
|
cat >expect <<-EOF &&
|
|
file-1-first-line
|
|
|
|
file-1-second-line
|
|
|
|
file-2-first-line
|
|
|
|
file-2-second-line
|
|
EOF
|
|
|
|
cat >note-file-1 <<-EOF &&
|
|
${LF}
|
|
file-1-first-line
|
|
${MULTI_LF}
|
|
file-1-second-line
|
|
${LF}
|
|
EOF
|
|
|
|
cat >note-file-2 <<-EOF &&
|
|
${LF}
|
|
file-2-first-line
|
|
${MULTI_LF}
|
|
file-2-second-line
|
|
${LF}
|
|
EOF
|
|
|
|
git notes add -F note-file-1 -F note-file-2 &&
|
|
git notes show >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'append note by specifying single "-F"' '
|
|
test_when_finished "git notes remove" &&
|
|
cat >expect <<-EOF &&
|
|
initial-line
|
|
|
|
first-line
|
|
|
|
second-line
|
|
EOF
|
|
|
|
cat >note-file <<-EOF &&
|
|
${LF}
|
|
first-line
|
|
${MULTI_LF}
|
|
second-line
|
|
${LF}
|
|
EOF
|
|
|
|
git notes add -m "initial-line" &&
|
|
git notes append -F note-file &&
|
|
git notes show >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'append notes by specifying multiple "-F"' '
|
|
test_when_finished "git notes remove" &&
|
|
cat >expect <<-EOF &&
|
|
initial-line
|
|
|
|
file-1-first-line
|
|
|
|
file-1-second-line
|
|
|
|
file-2-first-line
|
|
|
|
file-2-second-line
|
|
EOF
|
|
|
|
cat >note-file-1 <<-EOF &&
|
|
${LF}
|
|
file-1-first-line
|
|
${MULTI_LF}
|
|
file-1-second-line
|
|
${LF}
|
|
EOF
|
|
|
|
cat >note-file-2 <<-EOF &&
|
|
${LF}
|
|
file-2-first-line
|
|
${MULTI_LF}
|
|
file-2-second-line
|
|
${LF}
|
|
EOF
|
|
|
|
git notes add -m "initial-line" &&
|
|
git notes append -F note-file-1 -F note-file-2 &&
|
|
git notes show >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'append note by specifying multiple "-F" with "--no-stripspace"' '
|
|
test_when_finished "git notes remove" &&
|
|
cat >expect <<-EOF &&
|
|
initial-line
|
|
${LF}${LF}
|
|
file-1-first-line
|
|
${MULTI_LF}
|
|
file-1-second-line
|
|
${LF}
|
|
|
|
${LF}
|
|
file-2-first-line
|
|
${MULTI_LF}
|
|
file-2-second-line
|
|
${LF}
|
|
EOF
|
|
|
|
cat >note-file-1 <<-EOF &&
|
|
${LF}
|
|
file-1-first-line
|
|
${MULTI_LF}
|
|
file-1-second-line
|
|
${LF}
|
|
EOF
|
|
|
|
cat >note-file-2 <<-EOF &&
|
|
${LF}
|
|
file-2-first-line
|
|
${MULTI_LF}
|
|
file-2-second-line
|
|
${LF}
|
|
EOF
|
|
|
|
git notes add -m "initial-line" &&
|
|
git notes append --no-stripspace -F note-file-1 -F note-file-2 &&
|
|
git notes show >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'add notes with empty messages' '
|
|
rev=$(git rev-parse HEAD) &&
|
|
git notes add -m "${LF}" \
|
|
-m "${MULTI_LF}" \
|
|
-m "${LF}" >actual 2>&1 &&
|
|
test_i18ngrep "Removing note for object" actual
|
|
'
|
|
|
|
test_expect_success 'add note by specifying "-C", "--no-stripspace" is the default behavior' '
|
|
test_when_finished "git notes remove" &&
|
|
cat >expect <<-EOF &&
|
|
${LF}
|
|
first-line
|
|
${MULTI_LF}
|
|
second-line
|
|
${LF}
|
|
EOF
|
|
|
|
cat expect | git hash-object -w --stdin >blob &&
|
|
git notes add -C $(cat blob) &&
|
|
git notes show >actual &&
|
|
test_cmp expect actual &&
|
|
git notes remove &&
|
|
git notes add --no-stripspace -C $(cat blob) &&
|
|
git notes show >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'reuse note by specifying "-C" and "--stripspace"' '
|
|
test_when_finished "git notes remove" &&
|
|
cat >data <<-EOF &&
|
|
${LF}
|
|
first-line
|
|
${MULTI_LF}
|
|
second-line
|
|
${LF}
|
|
EOF
|
|
|
|
cat >expect <<-EOF &&
|
|
first-line
|
|
|
|
second-line
|
|
EOF
|
|
|
|
cat data | git hash-object -w --stdin >blob &&
|
|
git notes add --stripspace -C $(cat blob) &&
|
|
git notes show >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'reuse with "-C" and add note with "-m", "-m" will stripspace all together' '
|
|
test_when_finished "git notes remove" &&
|
|
cat >data <<-EOF &&
|
|
${LF}
|
|
first-line
|
|
${MULTI_LF}
|
|
second-line
|
|
${LF}
|
|
EOF
|
|
|
|
cat >expect <<-EOF &&
|
|
first-line
|
|
|
|
second-line
|
|
|
|
third-line
|
|
EOF
|
|
|
|
cat data | git hash-object -w --stdin >blob &&
|
|
git notes add -C $(cat blob) -m "third-line" &&
|
|
git notes show >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'add note with "-m" and reuse note with "-C", "-C" will not stripspace all together' '
|
|
test_when_finished "git notes remove" &&
|
|
cat >data <<-EOF &&
|
|
|
|
second-line
|
|
EOF
|
|
|
|
cat >expect <<-EOF &&
|
|
first-line
|
|
${LF}
|
|
second-line
|
|
EOF
|
|
|
|
cat data | git hash-object -w --stdin >blob &&
|
|
git notes add -m "first-line" -C $(cat blob) &&
|
|
git notes show >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'add note by specifying "-c", "--stripspace" is the default behavior' '
|
|
test_when_finished "git notes remove" &&
|
|
cat >expect <<-EOF &&
|
|
first-line
|
|
|
|
second-line
|
|
EOF
|
|
|
|
echo "initial-line" | git hash-object -w --stdin >blob &&
|
|
MSG="${LF}first-line${MULTI_LF}second-line${LF}" git notes add -c $(cat blob) &&
|
|
git notes show >actual &&
|
|
test_cmp expect actual &&
|
|
git notes remove &&
|
|
MSG="${LF}first-line${MULTI_LF}second-line${LF}" git notes add --stripspace -c $(cat blob) &&
|
|
git notes show >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'add note by specifying "-c" with "--no-stripspace"' '
|
|
test_when_finished "git notes remove" &&
|
|
cat >expect <<-EOF &&
|
|
${LF}first-line${MULTI_LF}second-line${LF}
|
|
EOF
|
|
|
|
echo "initial-line" | git hash-object -w --stdin >blob &&
|
|
MSG="${LF}first-line${MULTI_LF}second-line${LF}" git notes add --no-stripspace -c $(cat blob) &&
|
|
git notes show >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'edit note by specifying "-c", "--stripspace" is the default behavior' '
|
|
test_when_finished "git notes remove" &&
|
|
cat >expect <<-EOF &&
|
|
first-line
|
|
|
|
second-line
|
|
EOF
|
|
|
|
MSG="${LF}first-line${MULTI_LF}second-line${LF}" git notes edit &&
|
|
git notes show >actual &&
|
|
test_cmp expect actual &&
|
|
git notes remove &&
|
|
MSG="${LF}first-line${MULTI_LF}second-line${LF}" git notes edit --stripspace &&
|
|
git notes show >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'edit note by specifying "-c" with "--no-stripspace"' '
|
|
test_when_finished "git notes remove" &&
|
|
cat >expect <<-EOF &&
|
|
${LF}first-line${MULTI_LF}second-line${LF}
|
|
EOF
|
|
|
|
MSG="${LF}first-line${MULTI_LF}second-line${LF}" git notes add --no-stripspace &&
|
|
git notes show >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_done
|