2011-10-09 13:36:57 +02:00
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
test_description='diff function context'
|
|
|
|
|
leak tests: mark passing SANITIZE=leak tests as leak-free
Mark those remaining tests that pass when run under SANITIZE=leak with
TEST_PASSES_SANITIZE_LEAK=true, these were either omitted in
f346fcb62a0 (Merge branch 'ab/mark-leak-free-tests-even-more',
2021-12-15) and 5a4f8381b68 (Merge branch 'ab/mark-leak-free-tests',
2021-10-25), or have had their memory leaks fixed since then.
With this change there's now a a one-to-one mapping between those
tests that we have opted-in via "TEST_PASSES_SANITIZE_LEAK=true", and
those that pass with the new "check" mode:
GIT_TEST_PASSING_SANITIZE_LEAK=check \
GIT_TEST_SANITIZE_LEAK_LOG=true \
make test SANITIZE=leak
Note that the "GIT_TEST_SANITIZE_LEAK_LOG=true" is needed due to the
edge cases noted in a preceding commit, i.e. in some cases we'd pass
the test itself, but still have outstanding leaks due to ignored exit
codes.
The "GIT_TEST_SANITIZE_LEAK_LOG=true" corrects for that, we're only
marking those tests as passing that really don't have any leaks,
whether that was reflected in their exit code or not.
Note that the change here to "t9100-git-svn-basic.sh" is marking that
test as passing under SANITIZE=leak, we're removing a
"TEST_FAILS_SANITIZE_LEAK=true" line, not
"TEST_PASSES_SANITIZE_LEAK=true". See 7a98d9ab00d (revisions API: have
release_revisions() release "cmdline", 2022-04-13) for the
introduction of that t/lib-git-svn.sh-specific variable.
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-07-28 01:13:41 +02:00
|
|
|
TEST_PASSES_SANITIZE_LEAK=true
|
2011-10-09 13:36:57 +02:00
|
|
|
. ./test-lib.sh
|
|
|
|
|
2016-05-31 22:00:38 +02:00
|
|
|
dir="$TEST_DIRECTORY/t4051"
|
2011-10-09 13:36:57 +02:00
|
|
|
|
2016-05-31 22:00:38 +02:00
|
|
|
commit_and_tag () {
|
|
|
|
tag=$1 &&
|
|
|
|
shift &&
|
|
|
|
git add "$@" &&
|
|
|
|
test_tick &&
|
|
|
|
git commit -m "$tag" &&
|
|
|
|
git tag "$tag"
|
2011-10-09 13:36:57 +02:00
|
|
|
}
|
|
|
|
|
2016-05-31 22:00:38 +02:00
|
|
|
first_context_line () {
|
|
|
|
awk '
|
|
|
|
found {print; exit}
|
|
|
|
/^@@/ {found = 1}
|
|
|
|
'
|
2011-10-09 13:36:57 +02:00
|
|
|
}
|
2016-05-31 22:00:38 +02:00
|
|
|
|
|
|
|
last_context_line () {
|
|
|
|
sed -ne \$p
|
2011-10-09 13:36:57 +02:00
|
|
|
}
|
|
|
|
|
2016-05-31 22:00:38 +02:00
|
|
|
check_diff () {
|
|
|
|
name=$1
|
|
|
|
desc=$2
|
|
|
|
options="-W $3"
|
|
|
|
|
|
|
|
test_expect_success "$desc" '
|
|
|
|
git diff $options "$name^" "$name" >"$name.diff"
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success ' diff applies' '
|
|
|
|
test_when_finished "git reset --hard" &&
|
|
|
|
git checkout --detach "$name^" &&
|
|
|
|
git apply --index "$name.diff" &&
|
|
|
|
git diff --exit-code "$name"
|
|
|
|
'
|
2011-10-09 13:36:57 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
test_expect_success 'setup' '
|
2016-05-31 22:00:38 +02:00
|
|
|
cat "$dir/includes.c" "$dir/dummy.c" "$dir/dummy.c" "$dir/hello.c" \
|
|
|
|
"$dir/dummy.c" "$dir/dummy.c" >file.c &&
|
|
|
|
commit_and_tag initial file.c &&
|
|
|
|
|
|
|
|
grep -v "delete me from hello" <file.c >file.c.new &&
|
|
|
|
mv file.c.new file.c &&
|
|
|
|
commit_and_tag changed_hello file.c &&
|
|
|
|
|
|
|
|
grep -v "delete me from includes" <file.c >file.c.new &&
|
|
|
|
mv file.c.new file.c &&
|
|
|
|
commit_and_tag changed_includes file.c &&
|
|
|
|
|
|
|
|
cat "$dir/appended1.c" >>file.c &&
|
|
|
|
commit_and_tag appended file.c &&
|
|
|
|
|
|
|
|
cat "$dir/appended2.c" >>file.c &&
|
|
|
|
commit_and_tag extended file.c &&
|
|
|
|
|
|
|
|
grep -v "Begin of second part" <file.c >file.c.new &&
|
|
|
|
mv file.c.new file.c &&
|
2016-06-09 23:54:48 +02:00
|
|
|
commit_and_tag long_common_tail file.c &&
|
|
|
|
|
2016-09-14 18:05:27 +02:00
|
|
|
git checkout initial &&
|
|
|
|
cat "$dir/hello.c" "$dir/dummy.c" >file.c &&
|
|
|
|
commit_and_tag hello_dummy file.c &&
|
|
|
|
|
|
|
|
# overlap function context of 1st change and -u context of 2nd change
|
|
|
|
grep -v "delete me from hello" <"$dir/hello.c" >file.c &&
|
2017-05-08 18:03:38 +02:00
|
|
|
sed "2a\\
|
|
|
|
extra line" <"$dir/dummy.c" >>file.c &&
|
2016-09-14 18:05:27 +02:00
|
|
|
commit_and_tag changed_hello_dummy file.c &&
|
|
|
|
|
2016-06-09 23:54:48 +02:00
|
|
|
git checkout initial &&
|
|
|
|
grep -v "delete me from hello" <file.c >file.c.new &&
|
|
|
|
mv file.c.new file.c &&
|
|
|
|
cat "$dir/appended1.c" >>file.c &&
|
|
|
|
commit_and_tag changed_hello_appended file.c
|
2016-05-31 22:00:38 +02:00
|
|
|
'
|
|
|
|
|
|
|
|
check_diff changed_hello 'changed function'
|
|
|
|
|
2017-11-18 19:05:19 +01:00
|
|
|
test_expect_success ' context includes comment' '
|
2017-11-18 19:04:00 +01:00
|
|
|
grep "^ .*Hello comment" changed_hello.diff
|
|
|
|
'
|
|
|
|
|
2016-05-31 22:00:38 +02:00
|
|
|
test_expect_success ' context includes begin' '
|
|
|
|
grep "^ .*Begin of hello" changed_hello.diff
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success ' context includes end' '
|
|
|
|
grep "^ .*End of hello" changed_hello.diff
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success ' context does not include other functions' '
|
|
|
|
test $(grep -c "^[ +-].*Begin" changed_hello.diff) -le 1
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success ' context does not include preceding empty lines' '
|
|
|
|
test "$(first_context_line <changed_hello.diff)" != " "
|
|
|
|
'
|
|
|
|
|
2016-05-28 17:03:16 +02:00
|
|
|
test_expect_success ' context does not include trailing empty lines' '
|
2016-05-31 22:00:38 +02:00
|
|
|
test "$(last_context_line <changed_hello.diff)" != " "
|
|
|
|
'
|
|
|
|
|
|
|
|
check_diff changed_includes 'changed includes'
|
|
|
|
|
|
|
|
test_expect_success ' context includes begin' '
|
|
|
|
grep "^ .*Begin.h" changed_includes.diff
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success ' context includes end' '
|
|
|
|
grep "^ .*End.h" changed_includes.diff
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success ' context does not include other functions' '
|
|
|
|
test $(grep -c "^[ +-].*Begin" changed_includes.diff) -le 1
|
|
|
|
'
|
|
|
|
|
2016-05-28 17:03:16 +02:00
|
|
|
test_expect_success ' context does not include trailing empty lines' '
|
2016-05-31 22:00:38 +02:00
|
|
|
test "$(last_context_line <changed_includes.diff)" != " "
|
|
|
|
'
|
|
|
|
|
|
|
|
check_diff appended 'appended function'
|
|
|
|
|
|
|
|
test_expect_success ' context includes begin' '
|
|
|
|
grep "^[+].*Begin of first part" appended.diff
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success ' context includes end' '
|
|
|
|
grep "^[+].*End of first part" appended.diff
|
|
|
|
'
|
|
|
|
|
2016-05-28 17:02:24 +02:00
|
|
|
test_expect_success ' context does not include other functions' '
|
2016-05-31 22:00:38 +02:00
|
|
|
test $(grep -c "^[ +-].*Begin" appended.diff) -le 1
|
|
|
|
'
|
|
|
|
|
|
|
|
check_diff extended 'appended function part'
|
|
|
|
|
|
|
|
test_expect_success ' context includes begin' '
|
|
|
|
grep "^ .*Begin of first part" extended.diff
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success ' context includes end' '
|
|
|
|
grep "^[+].*End of second part" extended.diff
|
|
|
|
'
|
|
|
|
|
2016-05-28 17:00:28 +02:00
|
|
|
test_expect_success ' context does not include other functions' '
|
2016-05-31 22:00:38 +02:00
|
|
|
test $(grep -c "^[ +-].*Begin" extended.diff) -le 2
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success ' context does not include preceding empty lines' '
|
|
|
|
test "$(first_context_line <extended.diff)" != " "
|
|
|
|
'
|
|
|
|
|
|
|
|
check_diff long_common_tail 'change with long common tail and no context' -U0
|
|
|
|
|
|
|
|
test_expect_success ' context includes begin' '
|
|
|
|
grep "^ .*Begin of first part" long_common_tail.diff
|
|
|
|
'
|
|
|
|
|
2016-05-28 17:04:31 +02:00
|
|
|
test_expect_success ' context includes end' '
|
2016-05-31 22:00:38 +02:00
|
|
|
grep "^ .*End of second part" long_common_tail.diff
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success ' context does not include other functions' '
|
|
|
|
test $(grep -c "^[ +-].*Begin" long_common_tail.diff) -le 2
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success ' context does not include preceding empty lines' '
|
t4051-diff-function-context: read the right file
The test ' context does not include preceding empty lines' in the
block of tests 'change with long common tail and no context' in
't4051-diff-function-context.sh' tries to read the file
'long_common_tail.diff.diff', but that file doesn't exist as its name
contains one more '.diff' suffixes than necessary.
Despite this error the test still succeeded without checking what it's
supposed to, because this erroneous read is done on the line:
test "$(first_context_line <long_common_tail.diff.diff)" != " "
which means that:
- the command substitution hides the error, so it won't fail the
test, and
- the result of the command substitution is the empty string, which
is, of course, not equal to a single space character, so the
condition is fulfilled, and the test succeeds.
As a minimal fix, fix the name of the file to be read.
In the future we might want to reorganize this test script (1) to use
'test_cmp' instead of 'test's and command substitutions to catch
failing commands and to provide helpful error messages, and (2) to
specify what the expected result actually _is_ instead of what it
isn't.
Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-08-22 14:44:37 +02:00
|
|
|
test "$(first_context_line <long_common_tail.diff)" != " "
|
2011-10-09 13:36:57 +02:00
|
|
|
'
|
|
|
|
|
2016-06-09 23:54:48 +02:00
|
|
|
check_diff changed_hello_appended 'changed function plus appended function'
|
|
|
|
|
|
|
|
test_expect_success ' context includes begin' '
|
|
|
|
grep "^ .*Begin of hello" changed_hello_appended.diff &&
|
|
|
|
grep "^[+].*Begin of first part" changed_hello_appended.diff
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success ' context includes end' '
|
|
|
|
grep "^ .*End of hello" changed_hello_appended.diff &&
|
|
|
|
grep "^[+].*End of first part" changed_hello_appended.diff
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success ' context does not include other functions' '
|
|
|
|
test $(grep -c "^[ +-].*Begin" changed_hello_appended.diff) -le 2
|
|
|
|
'
|
|
|
|
|
2016-09-14 18:05:27 +02:00
|
|
|
check_diff changed_hello_dummy 'changed two consecutive functions'
|
|
|
|
|
|
|
|
test_expect_success ' context includes begin' '
|
|
|
|
grep "^ .*Begin of hello" changed_hello_dummy.diff &&
|
|
|
|
grep "^ .*Begin of dummy" changed_hello_dummy.diff
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success ' context includes end' '
|
|
|
|
grep "^ .*End of hello" changed_hello_dummy.diff &&
|
|
|
|
grep "^ .*End of dummy" changed_hello_dummy.diff
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success ' overlapping hunks are merged' '
|
|
|
|
test $(grep -c "^@@" changed_hello_dummy.diff) -eq 1
|
|
|
|
'
|
|
|
|
|
2011-10-09 13:36:57 +02:00
|
|
|
test_done
|