mirror of
https://github.com/git/git
synced 2024-11-05 01:58:18 +00:00
12dfc2475c
When merging file pairs after they have been broken up we queue a new file pair and discard the broken-up ones. The newly-queued file pair reuses one filespec of the broken up pairs each, where the respective other filespec gets discarded. But we only end up freeing the filespec's data, not the filespec itself, and thus leak memory. Fix these leaks by using `free_filespec()` instead. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
89 lines
1.7 KiB
Bash
Executable file
89 lines
1.7 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
test_description='typechange rename detection'
|
|
|
|
TEST_PASSES_SANITIZE_LEAK=true
|
|
. ./test-lib.sh
|
|
. "$TEST_DIRECTORY"/lib-diff.sh
|
|
|
|
test_expect_success setup '
|
|
|
|
rm -f foo bar &&
|
|
COPYING_test_data >foo &&
|
|
test_ln_s_add linklink bar &&
|
|
git add foo &&
|
|
git commit -a -m Initial &&
|
|
git tag one &&
|
|
|
|
git rm -f foo bar &&
|
|
COPYING_test_data >bar &&
|
|
test_ln_s_add linklink foo &&
|
|
git add bar &&
|
|
git commit -a -m Second &&
|
|
git tag two &&
|
|
|
|
git rm -f foo bar &&
|
|
COPYING_test_data >foo &&
|
|
git add foo &&
|
|
git commit -a -m Third &&
|
|
git tag three &&
|
|
|
|
mv foo bar &&
|
|
test_ln_s_add linklink foo &&
|
|
git add bar &&
|
|
git commit -a -m Fourth &&
|
|
git tag four &&
|
|
|
|
# This is purely for sanity check
|
|
|
|
git rm -f foo bar &&
|
|
COPYING_test_data >foo &&
|
|
cat "$TEST_DIRECTORY"/../Makefile >bar &&
|
|
git add foo bar &&
|
|
git commit -a -m Fifth &&
|
|
git tag five &&
|
|
|
|
git rm -f foo bar &&
|
|
cat "$TEST_DIRECTORY"/../Makefile >foo &&
|
|
COPYING_test_data >bar &&
|
|
git add foo bar &&
|
|
git commit -a -m Sixth &&
|
|
git tag six
|
|
|
|
'
|
|
|
|
test_expect_success 'cross renames to be detected for regular files' '
|
|
git diff-tree five six -r --name-status -B -M >out &&
|
|
sort out >actual &&
|
|
{
|
|
echo "R100 foo bar" &&
|
|
echo "R100 bar foo"
|
|
} | sort >expect &&
|
|
test_cmp expect actual
|
|
|
|
'
|
|
|
|
test_expect_success 'cross renames to be detected for typechange' '
|
|
git diff-tree one two -r --name-status -B -M >out &&
|
|
sort out >actual &&
|
|
{
|
|
echo "R100 foo bar" &&
|
|
echo "R100 bar foo"
|
|
} | sort >expect &&
|
|
test_cmp expect actual
|
|
|
|
'
|
|
|
|
test_expect_success 'moves and renames' '
|
|
git diff-tree three four -r --name-status -B -M >out &&
|
|
sort out >actual &&
|
|
{
|
|
# see -B -M (#6) in t4008
|
|
echo "C100 foo bar" &&
|
|
echo "T100 foo"
|
|
} | sort >expect &&
|
|
test_cmp expect actual
|
|
|
|
'
|
|
|
|
test_done
|