Merge branch 'master' of git://repo.or.cz/git into devel

This commit is contained in:
Johannes Schindelin
2009-03-19 00:56:54 +01:00
136 changed files with 2993 additions and 885 deletions

View File

@@ -38,4 +38,7 @@ full-svn-test:
$(MAKE) $(TSVN) GIT_SVN_NO_OPTIMIZE_COMMITS=1 LC_ALL=C
$(MAKE) $(TSVN) GIT_SVN_NO_OPTIMIZE_COMMITS=0 LC_ALL=en_US.UTF-8
.PHONY: pre-clean $(T) aggregate-results clean
valgrind:
GIT_TEST_OPTS=--valgrind $(MAKE)
.PHONY: pre-clean $(T) aggregate-results clean valgrind

View File

@@ -39,7 +39,8 @@ this:
* passed all 3 test(s)
You can pass --verbose (or -v), --debug (or -d), and --immediate
(or -i) command line argument to the test.
(or -i) command line argument to the test, or by setting GIT_TEST_OPTS
appropriately before running "make".
--verbose::
This makes the test more verbose. Specifically, the
@@ -58,6 +59,21 @@ You can pass --verbose (or -v), --debug (or -d), and --immediate
This causes additional long-running tests to be run (where
available), for more exhaustive testing.
--valgrind::
Execute all Git binaries with valgrind and exit with status
126 on errors (just like regular tests, this will only stop
the test script when running under -i). Valgrind errors
go to stderr, so you might want to pass the -v option, too.
Since it makes no sense to run the tests with --valgrind and
not see any output, this option implies --verbose. For
convenience, it also implies --tee.
--tee::
In addition to printing the test output to the terminal,
write it to files named 't/test-results/$TEST_NAME.out'.
As the names depend on the tests' file names, it is safe to
run the tests with this option in parallel.
Skipping Tests
--------------

View File

@@ -4,6 +4,9 @@ DocumentRoot www
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog access.log common
ErrorLog error.log
<IfModule !mod_log_config.c>
LoadModule log_config_module modules/mod_log_config.so
</IfModule>
<IfDefine Darwin>
LoadModule log_config_module modules/mod_log_config.so

View File

@@ -336,10 +336,10 @@ test_expect_success 'get bool variable with empty value' \
'git config --bool emptyvalue.variable > output &&
cmp output expect'
git config > output 2>&1
test_expect_success 'no arguments, but no crash' \
"test $? = 129 && grep usage output"
test_expect_success 'no arguments, but no crash' '
test_must_fail git config >output 2>&1 &&
grep usage output
'
cat > .git/config << EOF
[a.b]
@@ -373,7 +373,7 @@ EOF
test_expect_success 'new variable inserts into proper section' 'cmp .git/config expect'
test_expect_success 'alternative GIT_CONFIG (non-existing file should fail)' \
'git config --file non-existing-config -l; test $? != 0'
'test_must_fail git config --file non-existing-config -l'
cat > other-config << EOF
[ein]

View File

@@ -28,4 +28,71 @@ test_expect_success 'loose objects borrowed from alternate are not missing' '
)
'
# Corruption tests follow. Make sure to remove all traces of the
# specific corruption you test afterwards, lest a later test trip over
# it.
test_expect_success 'object with bad sha1' '
sha=$(echo blob | git hash-object -w --stdin) &&
echo $sha &&
old=$(echo $sha | sed "s+^..+&/+") &&
new=$(dirname $old)/ffffffffffffffffffffffffffffffffffffff &&
sha="$(dirname $new)$(basename $new)"
mv .git/objects/$old .git/objects/$new &&
git update-index --add --cacheinfo 100644 $sha foo &&
tree=$(git write-tree) &&
cmt=$(echo bogus | git commit-tree $tree) &&
git update-ref refs/heads/bogus $cmt &&
(git fsck 2>out; true) &&
grep "$sha.*corrupt" out &&
rm -f .git/objects/$new &&
git update-ref -d refs/heads/bogus &&
git read-tree -u --reset HEAD
'
test_expect_success 'branch pointing to non-commit' '
git rev-parse HEAD^{tree} > .git/refs/heads/invalid &&
git fsck 2>out &&
grep "not a commit" out &&
git update-ref -d refs/heads/invalid
'
cat > invalid-tag <<EOF
object ffffffffffffffffffffffffffffffffffffffff
type commit
tag invalid
tagger T A Gger <tagger@example.com> 1234567890 -0000
This is an invalid tag.
EOF
test_expect_failure 'tag pointing to nonexistent' '
tag=$(git hash-object -w --stdin < invalid-tag) &&
echo $tag > .git/refs/tags/invalid &&
git fsck --tags 2>out &&
cat out &&
grep "could not load tagged object" out &&
rm .git/refs/tags/invalid
'
cat > wrong-tag <<EOF
object $(echo blob | git hash-object -w --stdin)
type commit
tag wrong
tagger T A Gger <tagger@example.com> 1234567890 -0000
This is an invalid tag.
EOF
test_expect_failure 'tag pointing to something else than its type' '
tag=$(git hash-object -w --stdin < wrong-tag) &&
echo $tag > .git/refs/tags/wrong &&
git fsck --tags 2>out &&
cat out &&
grep "some sane error message" out &&
rm .git/refs/tags/wrong
'
test_done

View File

@@ -19,6 +19,9 @@ do
>$dir/a.$i
done
done
>"#ignore1"
>"#ignore2"
>"#hidden"
cat >expect <<EOF
a.2
@@ -42,6 +45,9 @@ three/a.8
EOF
echo '.gitignore
\#ignore1
\#ignore2*
\#hid*n
output
expect
.gitignore
@@ -79,9 +85,10 @@ test_expect_success \
>output &&
test_cmp expect output'
cat > excludes-file << EOF
cat > excludes-file <<\EOF
*.[1-8]
e*
\#*
EOF
git config core.excludesFile excludes-file

81
t/t3203-branch-output.sh Executable file
View File

@@ -0,0 +1,81 @@
#!/bin/sh
test_description='git branch display tests'
. ./test-lib.sh
test_expect_success 'make commits' '
echo content >file &&
git add file &&
git commit -m one &&
echo content >>file &&
git commit -a -m two
'
test_expect_success 'make branches' '
git branch branch-one
git branch branch-two HEAD^
'
test_expect_success 'make remote branches' '
git update-ref refs/remotes/origin/branch-one branch-one
git update-ref refs/remotes/origin/branch-two branch-two
git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/branch-one
'
cat >expect <<'EOF'
branch-one
branch-two
* master
EOF
test_expect_success 'git branch shows local branches' '
git branch >actual &&
test_cmp expect actual
'
cat >expect <<'EOF'
origin/HEAD -> origin/branch-one
origin/branch-one
origin/branch-two
EOF
test_expect_success 'git branch -r shows remote branches' '
git branch -r >actual &&
test_cmp expect actual
'
cat >expect <<'EOF'
branch-one
branch-two
* master
remotes/origin/HEAD -> origin/branch-one
remotes/origin/branch-one
remotes/origin/branch-two
EOF
test_expect_success 'git branch -a shows local and remote branches' '
git branch -a >actual &&
test_cmp expect actual
'
cat >expect <<'EOF'
two
one
two
EOF
test_expect_success 'git branch -v shows branch summaries' '
git branch -v >tmp &&
awk "{print \$NF}" <tmp >actual &&
test_cmp expect actual
'
cat >expect <<'EOF'
* (no branch)
branch-one
branch-two
master
EOF
test_expect_success 'git branch shows detached HEAD properly' '
git checkout HEAD^0 &&
git branch >actual &&
test_cmp expect actual
'
test_done

View File

@@ -22,7 +22,8 @@ test_expect_success setup '
git checkout topic &&
quick_one A &&
quick_one B &&
quick_one Z
quick_one Z &&
git tag start
'
@@ -41,4 +42,24 @@ test_expect_success 'rebase -m' '
'
test_expect_success 'rebase --stat' '
git reset --hard start
git rebase --stat master >diffstat.txt &&
grep "^ fileX | *1 +$" diffstat.txt
'
test_expect_success 'rebase w/config rebase.stat' '
git reset --hard start
git config rebase.stat true &&
git rebase master >diffstat.txt &&
grep "^ fileX | *1 +$" diffstat.txt
'
test_expect_success 'rebase -n overrides config rebase.stat config' '
git reset --hard start
git config rebase.stat true &&
git rebase -n master >diffstat.txt &&
! grep "^ fileX | *1 +$" diffstat.txt
'
test_done

33
t/t3505-cherry-pick-empty.sh Executable file
View File

@@ -0,0 +1,33 @@
#!/bin/sh
test_description='test cherry-picking an empty commit'
. ./test-lib.sh
test_expect_success setup '
echo first > file1 &&
git add file1 &&
test_tick &&
git commit -m "first" &&
git checkout -b empty-branch &&
test_tick &&
git commit --allow-empty -m "empty"
'
test_expect_code 1 'cherry-pick an empty commit' '
git checkout master &&
git cherry-pick empty-branch
'
test_expect_success 'index lockfile was removed' '
test ! -f .git/index.lock
'
test_done

View File

@@ -258,4 +258,12 @@ test_expect_success \
git diff-tree -r -R $tree_A $tree_B >.test-b &&
cmp -s .test-a .test-b'
test_expect_success \
'diff can read from stdin' \
'test_must_fail git diff --no-index -- MN - < NN |
grep -v "^index" | sed "s#/-#/NN#" >.test-a &&
test_must_fail git diff --no-index -- MN NN |
grep -v "^index" >.test-b &&
test_cmp .test-a .test-b'
test_done

View File

@@ -207,6 +207,10 @@ log --root -c --patch-with-stat --summary master
log --root --cc --patch-with-stat --summary master
log -SF master
log -SF -p master
log --decorate --all
rev-list --parents HEAD
rev-list --children HEAD
whatchanged master
whatchanged -p master
@@ -268,6 +272,7 @@ diff --no-index --name-status dir2 dir
diff --no-index --name-status -- dir2 dir
diff --no-index dir dir3
diff master master^ side
diff --dirstat master~1 master~2
EOF
test_done

View File

@@ -0,0 +1,3 @@
$ git diff --dirstat master~1 master~2
40.0% dir/
$

View File

@@ -0,0 +1,34 @@
$ git log --decorate --all
commit 59d314ad6f356dd08601a4cd5e530381da3e3c64 (refs/heads/master)
Merge: 9a6d494 c7a2ab9
Author: A U Thor <author@example.com>
Date: Mon Jun 26 00:04:00 2006 +0000
Merge branch 'side'
commit c7a2ab9e8eac7b117442a607d5a9b3950ae34d5a (refs/heads/side)
Author: A U Thor <author@example.com>
Date: Mon Jun 26 00:03:00 2006 +0000
Side
commit 9a6d4949b6b76956d9d5e26f2791ec2ceff5fdc0
Author: A U Thor <author@example.com>
Date: Mon Jun 26 00:02:00 2006 +0000
Third
commit 1bde4ae5f36c8d9abe3a0fce0c6aab3c4a12fe44
Author: A U Thor <author@example.com>
Date: Mon Jun 26 00:01:00 2006 +0000
Second
This is the second commit.
commit 444ac553ac7612cc88969031b02b3767fb8a353a (refs/heads/initial)
Author: A U Thor <author@example.com>
Date: Mon Jun 26 00:00:00 2006 +0000
Initial
$

View File

@@ -0,0 +1,7 @@
$ git rev-list --children HEAD
59d314ad6f356dd08601a4cd5e530381da3e3c64
c7a2ab9e8eac7b117442a607d5a9b3950ae34d5a 59d314ad6f356dd08601a4cd5e530381da3e3c64
9a6d4949b6b76956d9d5e26f2791ec2ceff5fdc0 59d314ad6f356dd08601a4cd5e530381da3e3c64
1bde4ae5f36c8d9abe3a0fce0c6aab3c4a12fe44 9a6d4949b6b76956d9d5e26f2791ec2ceff5fdc0
444ac553ac7612cc88969031b02b3767fb8a353a 1bde4ae5f36c8d9abe3a0fce0c6aab3c4a12fe44 c7a2ab9e8eac7b117442a607d5a9b3950ae34d5a
$

View File

@@ -0,0 +1,7 @@
$ git rev-list --parents HEAD
59d314ad6f356dd08601a4cd5e530381da3e3c64 9a6d4949b6b76956d9d5e26f2791ec2ceff5fdc0 c7a2ab9e8eac7b117442a607d5a9b3950ae34d5a
c7a2ab9e8eac7b117442a607d5a9b3950ae34d5a 444ac553ac7612cc88969031b02b3767fb8a353a
9a6d4949b6b76956d9d5e26f2791ec2ceff5fdc0 1bde4ae5f36c8d9abe3a0fce0c6aab3c4a12fe44
1bde4ae5f36c8d9abe3a0fce0c6aab3c4a12fe44 444ac553ac7612cc88969031b02b3767fb8a353a
444ac553ac7612cc88969031b02b3767fb8a353a
$

View File

@@ -138,56 +138,243 @@ test_expect_success 'multiple files' '
ls patches/0001-Side-changes-1.patch patches/0002-Side-changes-2.patch patches/0003-Side-changes-3-with-n-backslash-n-in-it.patch
'
test_expect_success 'thread' '
check_threading () {
expect="$1" &&
shift &&
(git format-patch --stdout "$@"; echo $? > status.out) |
# Prints everything between the Message-ID and In-Reply-To,
# and replaces all Message-ID-lookalikes by a sequence number
perl -ne '
if (/^(message-id|references|in-reply-to)/i) {
$printing = 1;
} elsif (/^\S/) {
$printing = 0;
}
if ($printing) {
$h{$1}=$i++ if (/<([^>]+)>/ and !exists $h{$1});
for $k (keys %h) {s/$k/$h{$k}/};
print;
}
print "---\n" if /^From /i;
' > actual &&
test 0 = "$(cat status.out)" &&
test_cmp "$expect" actual
}
rm -rf patches/ &&
cat >> expect.no-threading <<EOF
---
---
---
EOF
test_expect_success 'no threading' '
git checkout side &&
git format-patch --thread -o patches/ master &&
FIRST_MID=$(grep "Message-Id:" patches/0001-* | sed "s/^[^<]*\(<[^>]*>\).*$/\1/") &&
for i in patches/0002-* patches/0003-*
do
grep "References: $FIRST_MID" $i &&
grep "In-Reply-To: $FIRST_MID" $i || break
done
check_threading expect.no-threading master
'
cat > expect.thread <<EOF
---
Message-Id: <0>
---
Message-Id: <1>
In-Reply-To: <0>
References: <0>
---
Message-Id: <2>
In-Reply-To: <0>
References: <0>
EOF
test_expect_success 'thread' '
check_threading expect.thread --thread master
'
cat > expect.in-reply-to <<EOF
---
Message-Id: <0>
In-Reply-To: <1>
References: <1>
---
Message-Id: <2>
In-Reply-To: <1>
References: <1>
---
Message-Id: <3>
In-Reply-To: <1>
References: <1>
EOF
test_expect_success 'thread in-reply-to' '
rm -rf patches/ &&
git checkout side &&
git format-patch --in-reply-to="<test.message>" --thread -o patches/ master &&
FIRST_MID="<test.message>" &&
for i in patches/*
do
grep "References: $FIRST_MID" $i &&
grep "In-Reply-To: $FIRST_MID" $i || break
done
check_threading expect.in-reply-to --in-reply-to="<test.message>" \
--thread master
'
cat > expect.cover-letter <<EOF
---
Message-Id: <0>
---
Message-Id: <1>
In-Reply-To: <0>
References: <0>
---
Message-Id: <2>
In-Reply-To: <0>
References: <0>
---
Message-Id: <3>
In-Reply-To: <0>
References: <0>
EOF
test_expect_success 'thread cover-letter' '
rm -rf patches/ &&
git checkout side &&
git format-patch --cover-letter --thread -o patches/ master &&
FIRST_MID=$(grep "Message-Id:" patches/0000-* | sed "s/^[^<]*\(<[^>]*>\).*$/\1/") &&
for i in patches/0001-* patches/0002-* patches/0003-*
do
grep "References: $FIRST_MID" $i &&
grep "In-Reply-To: $FIRST_MID" $i || break
done
check_threading expect.cover-letter --cover-letter --thread master
'
test_expect_success 'thread cover-letter in-reply-to' '
cat > expect.cl-irt <<EOF
---
Message-Id: <0>
In-Reply-To: <1>
References: <1>
---
Message-Id: <2>
In-Reply-To: <0>
References: <1>
<0>
---
Message-Id: <3>
In-Reply-To: <0>
References: <1>
<0>
---
Message-Id: <4>
In-Reply-To: <0>
References: <1>
<0>
EOF
rm -rf patches/ &&
git checkout side &&
git format-patch --cover-letter --in-reply-to="<test.message>" --thread -o patches/ master &&
FIRST_MID="<test.message>" &&
for i in patches/*
do
grep "References: $FIRST_MID" $i &&
grep "In-Reply-To: $FIRST_MID" $i || break
done
test_expect_success 'thread cover-letter in-reply-to' '
check_threading expect.cl-irt --cover-letter \
--in-reply-to="<test.message>" --thread master
'
test_expect_success 'thread explicit shallow' '
check_threading expect.cl-irt --cover-letter \
--in-reply-to="<test.message>" --thread=shallow master
'
cat > expect.deep <<EOF
---
Message-Id: <0>
---
Message-Id: <1>
In-Reply-To: <0>
References: <0>
---
Message-Id: <2>
In-Reply-To: <1>
References: <0>
<1>
EOF
test_expect_success 'thread deep' '
check_threading expect.deep --thread=deep master
'
cat > expect.deep-irt <<EOF
---
Message-Id: <0>
In-Reply-To: <1>
References: <1>
---
Message-Id: <2>
In-Reply-To: <0>
References: <1>
<0>
---
Message-Id: <3>
In-Reply-To: <2>
References: <1>
<0>
<2>
EOF
test_expect_success 'thread deep in-reply-to' '
check_threading expect.deep-irt --thread=deep \
--in-reply-to="<test.message>" master
'
cat > expect.deep-cl <<EOF
---
Message-Id: <0>
---
Message-Id: <1>
In-Reply-To: <0>
References: <0>
---
Message-Id: <2>
In-Reply-To: <1>
References: <0>
<1>
---
Message-Id: <3>
In-Reply-To: <2>
References: <0>
<1>
<2>
EOF
test_expect_success 'thread deep cover-letter' '
check_threading expect.deep-cl --cover-letter --thread=deep master
'
cat > expect.deep-cl-irt <<EOF
---
Message-Id: <0>
In-Reply-To: <1>
References: <1>
---
Message-Id: <2>
In-Reply-To: <0>
References: <1>
<0>
---
Message-Id: <3>
In-Reply-To: <2>
References: <1>
<0>
<2>
---
Message-Id: <4>
In-Reply-To: <3>
References: <1>
<0>
<2>
<3>
EOF
test_expect_success 'thread deep cover-letter in-reply-to' '
check_threading expect.deep-cl-irt --cover-letter \
--in-reply-to="<test.message>" --thread=deep master
'
test_expect_success 'thread via config' '
git config format.thread true &&
check_threading expect.thread master
'
test_expect_success 'thread deep via config' '
git config format.thread deep &&
check_threading expect.deep master
'
test_expect_success 'thread config + override' '
git config format.thread deep &&
check_threading expect.thread --thread master
'
test_expect_success 'thread config + --no-thread' '
git config format.thread deep &&
check_threading expect.no-threading --no-thread master
'
test_expect_success 'excessive subject' '

View File

@@ -37,6 +37,46 @@ test_expect_success setup '
'
printf "sixth\nfifth\nfourth\nthird\nsecond\ninitial" > expect
test_expect_success 'pretty' '
git log --pretty="format:%s" > actual &&
test_cmp expect actual
'
printf "sixth\nfifth\nfourth\nthird\nsecond\ninitial\n" > expect
test_expect_success 'pretty (tformat)' '
git log --pretty="tformat:%s" > actual &&
test_cmp expect actual
'
test_expect_success 'pretty (shortcut)' '
git log --pretty="%s" > actual &&
test_cmp expect actual
'
test_expect_success 'format' '
git log --format="%s" > actual &&
test_cmp expect actual
'
cat > expect << EOF
804a787 sixth
394ef78 fifth
5d31159 fourth
2fbe8c0 third
f7dab8e second
3a2fdcb initial
EOF
test_expect_success 'oneline' '
git log --oneline > actual &&
test_cmp expect actual
'
test_expect_success 'diff-filter=A' '
actual=$(git log --pretty="format:%s" --diff-filter=A HEAD) &&
@@ -134,5 +174,153 @@ test_expect_success 'log --grep -i' '
test_cmp expect actual
'
cat > expect <<EOF
* Second
* sixth
* fifth
* fourth
* third
* second
* initial
EOF
test_expect_success 'simple log --graph' '
git log --graph --pretty=tformat:%s >actual &&
test_cmp expect actual
'
test_expect_success 'set up merge history' '
git checkout -b side HEAD~4 &&
test_commit side-1 1 1 &&
test_commit side-2 2 2 &&
git checkout master &&
git merge side
'
cat > expect <<\EOF
* Merge branch 'side'
|\
| * side-2
| * side-1
* | Second
* | sixth
* | fifth
* | fourth
|/
* third
* second
* initial
EOF
test_expect_success 'log --graph with merge' '
git log --graph --date-order --pretty=tformat:%s |
sed "s/ *$//" >actual &&
test_cmp expect actual
'
cat > expect <<\EOF
* commit master
|\ Merge: A B
| | Author: A U Thor <author@example.com>
| |
| | Merge branch 'side'
| |
| * commit side
| | Author: A U Thor <author@example.com>
| |
| | side-2
| |
| * commit tags/side-1
| | Author: A U Thor <author@example.com>
| |
| | side-1
| |
* | commit master~1
| | Author: A U Thor <author@example.com>
| |
| | Second
| |
* | commit master~2
| | Author: A U Thor <author@example.com>
| |
| | sixth
| |
* | commit master~3
| | Author: A U Thor <author@example.com>
| |
| | fifth
| |
* | commit master~4
|/ Author: A U Thor <author@example.com>
|
| fourth
|
* commit tags/side-1~1
| Author: A U Thor <author@example.com>
|
| third
|
* commit tags/side-1~2
| Author: A U Thor <author@example.com>
|
| second
|
* commit tags/side-1~3
Author: A U Thor <author@example.com>
initial
EOF
test_expect_success 'log --graph with full output' '
git log --graph --date-order --pretty=short |
git name-rev --name-only --stdin |
sed "s/Merge:.*/Merge: A B/;s/ *$//" >actual &&
test_cmp expect actual
'
test_expect_success 'set up more tangled history' '
git checkout -b tangle HEAD~6 &&
test_commit tangle-a tangle-a a &&
git merge master~3 &&
git merge side~1 &&
git checkout master &&
git merge tangle
'
cat > expect <<\EOF
* Merge branch 'tangle'
|\
| * Merge branch 'side' (early part) into tangle
| |\
| * \ Merge branch 'master' (early part) into tangle
| |\ \
| * | | tangle-a
* | | | Merge branch 'side'
|\ \ \ \
| * | | | side-2
| | | |/
| | |/|
| |/| |
| * | | side-1
* | | | Second
* | | | sixth
| | |/
| |/|
|/| |
* | | fifth
* | | fourth
|/ /
* | third
|/
* second
* initial
EOF
test_expect_success 'log --graph with merge' '
git log --graph --date-order --pretty=tformat:%s |
sed "s/ *$//" >actual &&
test_cmp expect actual
'
test_done

38
t/t4204-patch-id.sh Executable file
View File

@@ -0,0 +1,38 @@
#!/bin/sh
test_description='git patch-id'
. ./test-lib.sh
test_expect_success 'setup' '
test_commit initial foo a &&
test_commit first foo b &&
git checkout -b same HEAD^ &&
test_commit same-msg foo b &&
git checkout -b notsame HEAD^ &&
test_commit notsame-msg foo c
'
test_expect_success 'patch-id output is well-formed' '
git log -p -1 | git patch-id > output &&
grep "^[a-f0-9]\{40\} $(git rev-parse HEAD)$" output
'
get_patch_id () {
git log -p -1 "$1" | git patch-id |
sed "s# .*##" > patch-id_"$1"
}
test_expect_success 'patch-id detects equality' '
get_patch_id master &&
get_patch_id same &&
test_cmp patch-id_master patch-id_same
'
test_expect_success 'patch-id detects inequality' '
get_patch_id master &&
get_patch_id notsame &&
! test_cmp patch-id_master patch-id_notsame
'
test_done

View File

@@ -93,6 +93,10 @@ test_expect_success \
'git archive vs. the same in a bare repo' \
'test_cmp b.tar b3.tar'
test_expect_success 'git archive with --output' \
'git archive --output=b4.tar HEAD &&
test_cmp b.tar b4.tar'
test_expect_success \
'validate file modification time' \
'mkdir extract &&
@@ -179,6 +183,10 @@ test_expect_success \
'git archive --format=zip vs. the same in a bare repo' \
'test_cmp d.zip d1.zip'
test_expect_success 'git archive --format=zip with --output' \
'git archive --format=zip --output=d2.zip HEAD &&
test_cmp d.zip d2.zip'
$UNZIP -v >/dev/null 2>&1
if [ $? -eq 127 ]; then
echo "Skipping ZIP tests, because unzip was not found"

View File

@@ -71,4 +71,16 @@ test_expect_success 'post-checkout receives the right args when not switching br
test $old = $new -a $flag = 0
'
mkdir -p templates/hooks
cat >templates/hooks/post-checkout <<'EOF'
#!/bin/sh
echo $@ > $GIT_DIR/post-checkout.args
EOF
chmod +x templates/hooks/post-checkout
test_expect_success 'post-checkout hook is triggered by clone' '
git clone --template=templates . clone3 &&
test -f clone3/.git/post-checkout.args
'
test_done

View File

@@ -47,6 +47,55 @@ test_expect_success 'Prepare submodule testing' '
GIT_CONFIG=.gitmodules git config submodule.example.url git://example.com/init.git
'
test_expect_success 'Prepare submodule add testing' '
submodurl=$(pwd)
(
mkdir addtest &&
cd addtest &&
git init
)
'
test_expect_success 'submodule add' '
(
cd addtest &&
git submodule add "$submodurl" submod &&
git submodule init
)
'
test_expect_success 'submodule add with ./ in path' '
(
cd addtest &&
git submodule add "$submodurl" ././dotsubmod/./frotz/./ &&
git submodule init
)
'
test_expect_success 'submodule add with // in path' '
(
cd addtest &&
git submodule add "$submodurl" slashslashsubmod///frotz// &&
git submodule init
)
'
test_expect_success 'submodule add with /.. in path' '
(
cd addtest &&
git submodule add "$submodurl" dotdotsubmod/../realsubmod/frotz/.. &&
git submodule init
)
'
test_expect_success 'submodule add with ./, /.. and // in path' '
(
cd addtest &&
git submodule add "$submodurl" dot/dotslashsubmod/./../..////realsubmod2/a/b/c/d/../../../../frotz//.. &&
git submodule init
)
'
test_expect_success 'status should fail for unmapped paths' '
if git submodule status
then

View File

@@ -36,16 +36,59 @@ clean_fake_sendmail() {
}
test_expect_success 'Extract patches' '
patches=`git format-patch -n HEAD^1`
patches=`git format-patch -s --cc="One <one@example.com>" --cc=two@example.com -n HEAD^1`
'
# Test no confirm early to ensure remaining tests will not hang
test_no_confirm () {
rm -f no_confirm_okay
echo n | \
GIT_SEND_EMAIL_NOTTY=1 \
git send-email \
--from="Example <from@example.com>" \
--to=nobody@example.com \
--smtp-server="$(pwd)/fake.sendmail" \
$@ \
$patches > stdout &&
test_must_fail grep "Send this email" stdout &&
> no_confirm_okay
}
# Exit immediately to prevent hang if a no-confirm test fails
check_no_confirm () {
test -f no_confirm_okay || {
say 'No confirm test failed; skipping remaining tests to prevent hanging'
test_done
}
}
test_expect_success 'No confirm with --suppress-cc' '
test_no_confirm --suppress-cc=sob
'
check_no_confirm
test_expect_success 'No confirm with --confirm=never' '
test_no_confirm --confirm=never
'
check_no_confirm
# leave sendemail.confirm set to never after this so that none of the
# remaining tests prompt unintentionally.
test_expect_success 'No confirm with sendemail.confirm=never' '
git config sendemail.confirm never &&
test_no_confirm --compose --subject=foo
'
check_no_confirm
test_expect_success 'Send patches' '
git send-email --from="Example <nobody@example.com>" --to=nobody@example.com --smtp-server="$(pwd)/fake.sendmail" $patches 2>errors
git send-email --suppress-cc=sob --from="Example <nobody@example.com>" --to=nobody@example.com --smtp-server="$(pwd)/fake.sendmail" $patches 2>errors
'
cat >expected <<\EOF
!nobody@example.com!
!author@example.com!
!one@example.com!
!two@example.com!
EOF
test_expect_success \
'Verify commandline' \
@@ -54,13 +97,15 @@ test_expect_success \
cat >expected-show-all-headers <<\EOF
0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
Dry-OK. Log says:
Server: relay.example.com
MAIL FROM:<from@example.com>
RCPT TO:<to@example.com>,<cc@example.com>,<author@example.com>,<bcc@example.com>
RCPT TO:<to@example.com>,<cc@example.com>,<author@example.com>,<one@example.com>,<two@example.com>,<bcc@example.com>
From: Example <from@example.com>
To: to@example.com
Cc: cc@example.com, A <author@example.com>
Cc: cc@example.com, A <author@example.com>, One <one@example.com>, two@example.com
Subject: [PATCH 1/1] Second.
Date: DATE-STRING
Message-Id: MESSAGE-ID-STRING
@@ -74,6 +119,7 @@ EOF
test_expect_success 'Show all headers' '
git send-email \
--dry-run \
--suppress-cc=sob \
--from="Example <from@example.com>" \
--to=to@example.com \
--cc=cc@example.com \
@@ -108,6 +154,28 @@ test_expect_success 'no patch was sent' '
! test -e commandline1
'
test_expect_success 'Author From: in message body' '
clean_fake_sendmail &&
git send-email \
--from="Example <nobody@example.com>" \
--to=nobody@example.com \
--smtp-server="$(pwd)/fake.sendmail" \
$patches &&
sed "1,/^$/d" < msgtxt1 > msgbody1
grep "From: A <author@example.com>" msgbody1
'
test_expect_success 'Author From: not in message body' '
clean_fake_sendmail &&
git send-email \
--from="A <author@example.com>" \
--to=nobody@example.com \
--smtp-server="$(pwd)/fake.sendmail" \
$patches &&
sed "1,/^$/d" < msgtxt1 > msgbody1
! grep "From: A <author@example.com>" msgbody1
'
test_expect_success 'allow long lines with --no-validate' '
git send-email \
--from="Example <nobody@example.com>" \
@@ -152,15 +220,13 @@ test_set_editor "$(pwd)/fake-editor"
test_expect_success '--compose works' '
clean_fake_sendmail &&
echo y | \
GIT_SEND_EMAIL_NOTTY=1 \
git send-email \
--compose --subject foo \
--from="Example <nobody@example.com>" \
--to=nobody@example.com \
--smtp-server="$(pwd)/fake.sendmail" \
$patches \
2>errors
git send-email \
--compose --subject foo \
--from="Example <nobody@example.com>" \
--to=nobody@example.com \
--smtp-server="$(pwd)/fake.sendmail" \
$patches \
2>errors
'
test_expect_success 'first message is compose text' '
@@ -171,16 +237,18 @@ test_expect_success 'second message is patch' '
grep "Subject:.*Second" msgtxt2
'
cat >expected-show-all-headers <<\EOF
cat >expected-suppress-sob <<\EOF
0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
Dry-OK. Log says:
Server: relay.example.com
MAIL FROM:<from@example.com>
RCPT TO:<to@example.com>,<cc@example.com>,<author@example.com>
RCPT TO:<to@example.com>,<cc@example.com>,<author@example.com>,<one@example.com>,<two@example.com>
From: Example <from@example.com>
To: to@example.com
Cc: cc@example.com, A <author@example.com>
Cc: cc@example.com, A <author@example.com>, One <one@example.com>, two@example.com
Subject: [PATCH 1/1] Second.
Date: DATE-STRING
Message-Id: MESSAGE-ID-STRING
@@ -189,10 +257,10 @@ X-Mailer: X-MAILER-STRING
Result: OK
EOF
test_expect_success 'sendemail.cc set' '
git config sendemail.cc cc@example.com &&
test_suppression () {
git send-email \
--dry-run \
--suppress-cc=$1 \
--from="Example <from@example.com>" \
--to=to@example.com \
--smtp-server relay.example.com \
@@ -200,20 +268,27 @@ test_expect_success 'sendemail.cc set' '
sed -e "s/^\(Date:\).*/\1 DATE-STRING/" \
-e "s/^\(Message-Id:\).*/\1 MESSAGE-ID-STRING/" \
-e "s/^\(X-Mailer:\).*/\1 X-MAILER-STRING/" \
>actual-show-all-headers &&
test_cmp expected-show-all-headers actual-show-all-headers
>actual-suppress-$1 &&
test_cmp expected-suppress-$1 actual-suppress-$1
}
test_expect_success 'sendemail.cc set' '
git config sendemail.cc cc@example.com &&
test_suppression sob
'
cat >expected-show-all-headers <<\EOF
cat >expected-suppress-sob <<\EOF
0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
Dry-OK. Log says:
Server: relay.example.com
MAIL FROM:<from@example.com>
RCPT TO:<to@example.com>,<author@example.com>
RCPT TO:<to@example.com>,<author@example.com>,<one@example.com>,<two@example.com>
From: Example <from@example.com>
To: to@example.com
Cc: A <author@example.com>
Cc: A <author@example.com>, One <one@example.com>, two@example.com
Subject: [PATCH 1/1] Second.
Date: DATE-STRING
Message-Id: MESSAGE-ID-STRING
@@ -224,17 +299,166 @@ EOF
test_expect_success 'sendemail.cc unset' '
git config --unset sendemail.cc &&
git send-email \
--dry-run \
--from="Example <from@example.com>" \
--to=to@example.com \
--smtp-server relay.example.com \
$patches |
sed -e "s/^\(Date:\).*/\1 DATE-STRING/" \
-e "s/^\(Message-Id:\).*/\1 MESSAGE-ID-STRING/" \
-e "s/^\(X-Mailer:\).*/\1 X-MAILER-STRING/" \
>actual-show-all-headers &&
test_cmp expected-show-all-headers actual-show-all-headers
test_suppression sob
'
cat >expected-suppress-all <<\EOF
0001-Second.patch
Dry-OK. Log says:
Server: relay.example.com
MAIL FROM:<from@example.com>
RCPT TO:<to@example.com>
From: Example <from@example.com>
To: to@example.com
Subject: [PATCH 1/1] Second.
Date: DATE-STRING
Message-Id: MESSAGE-ID-STRING
X-Mailer: X-MAILER-STRING
Result: OK
EOF
test_expect_success '--suppress-cc=all' '
test_suppression all
'
cat >expected-suppress-body <<\EOF
0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
Dry-OK. Log says:
Server: relay.example.com
MAIL FROM:<from@example.com>
RCPT TO:<to@example.com>,<author@example.com>,<one@example.com>,<two@example.com>
From: Example <from@example.com>
To: to@example.com
Cc: A <author@example.com>, One <one@example.com>, two@example.com
Subject: [PATCH 1/1] Second.
Date: DATE-STRING
Message-Id: MESSAGE-ID-STRING
X-Mailer: X-MAILER-STRING
Result: OK
EOF
test_expect_success '--suppress-cc=body' '
test_suppression body
'
cat >expected-suppress-sob <<\EOF
0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
Dry-OK. Log says:
Server: relay.example.com
MAIL FROM:<from@example.com>
RCPT TO:<to@example.com>,<author@example.com>,<one@example.com>,<two@example.com>
From: Example <from@example.com>
To: to@example.com
Cc: A <author@example.com>, One <one@example.com>, two@example.com
Subject: [PATCH 1/1] Second.
Date: DATE-STRING
Message-Id: MESSAGE-ID-STRING
X-Mailer: X-MAILER-STRING
Result: OK
EOF
test_expect_success '--suppress-cc=sob' '
test_suppression sob
'
cat >expected-suppress-bodycc <<\EOF
0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
Dry-OK. Log says:
Server: relay.example.com
MAIL FROM:<from@example.com>
RCPT TO:<to@example.com>,<author@example.com>,<one@example.com>,<two@example.com>,<committer@example.com>
From: Example <from@example.com>
To: to@example.com
Cc: A <author@example.com>, One <one@example.com>, two@example.com, C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: DATE-STRING
Message-Id: MESSAGE-ID-STRING
X-Mailer: X-MAILER-STRING
Result: OK
EOF
test_expect_success '--suppress-cc=bodycc' '
test_suppression bodycc
'
cat >expected-suppress-cc <<\EOF
0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
Dry-OK. Log says:
Server: relay.example.com
MAIL FROM:<from@example.com>
RCPT TO:<to@example.com>,<author@example.com>,<committer@example.com>
From: Example <from@example.com>
To: to@example.com
Cc: A <author@example.com>, C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: DATE-STRING
Message-Id: MESSAGE-ID-STRING
X-Mailer: X-MAILER-STRING
Result: OK
EOF
test_expect_success '--suppress-cc=cc' '
test_suppression cc
'
test_confirm () {
echo y | \
GIT_SEND_EMAIL_NOTTY=1 \
git send-email \
--from="Example <nobody@example.com>" \
--to=nobody@example.com \
--smtp-server="$(pwd)/fake.sendmail" \
$@ \
$patches | grep "Send this email"
}
test_expect_success '--confirm=always' '
test_confirm --confirm=always --suppress-cc=all
'
test_expect_success '--confirm=auto' '
test_confirm --confirm=auto
'
test_expect_success '--confirm=cc' '
test_confirm --confirm=cc
'
test_expect_success '--confirm=compose' '
test_confirm --confirm=compose --compose
'
test_expect_success 'confirm by default (due to cc)' '
CONFIRM=$(git config --get sendemail.confirm) &&
git config --unset sendemail.confirm &&
test_confirm &&
git config sendemail.confirm $CONFIRM
'
test_expect_success 'confirm by default (due to --compose)' '
CONFIRM=$(git config --get sendemail.confirm) &&
git config --unset sendemail.confirm &&
test_confirm --suppress-cc=all --compose
ret="$?"
git config sendemail.confirm ${CONFIRM:-never}
test $ret = "0"
'
test_expect_success '--compose adds MIME for utf8 body' '
@@ -243,9 +467,7 @@ test_expect_success '--compose adds MIME for utf8 body' '
echo "echo utf8 body: àéìöú >>\"\$1\""
) >fake-editor-utf8 &&
chmod +x fake-editor-utf8 &&
echo y | \
GIT_EDITOR="\"$(pwd)/fake-editor-utf8\"" \
GIT_SEND_EMAIL_NOTTY=1 \
git send-email \
--compose --subject foo \
--from="Example <nobody@example.com>" \
@@ -267,9 +489,7 @@ test_expect_success '--compose respects user mime type' '
echo " echo utf8 body: àéìöú) >\"\$1\""
) >fake-editor-utf8-mime &&
chmod +x fake-editor-utf8-mime &&
echo y | \
GIT_EDITOR="\"$(pwd)/fake-editor-utf8-mime\"" \
GIT_SEND_EMAIL_NOTTY=1 \
git send-email \
--compose --subject foo \
--from="Example <nobody@example.com>" \
@@ -283,9 +503,7 @@ test_expect_success '--compose respects user mime type' '
test_expect_success '--compose adds MIME for utf8 subject' '
clean_fake_sendmail &&
echo y | \
GIT_EDITOR="\"$(pwd)/fake-editor\"" \
GIT_SEND_EMAIL_NOTTY=1 \
git send-email \
--compose --subject utf8-sübjëct \
--from="Example <nobody@example.com>" \
@@ -307,7 +525,7 @@ test_expect_success 'detects ambiguous reference/file conflict' '
test_expect_success 'feed two files' '
rm -fr outdir &&
git format-patch -2 -o outdir &&
GIT_SEND_EMAIL_NOTTY=1 git send-email \
git send-email \
--dry-run \
--from="Example <nobody@example.com>" \
--to=nobody@example.com \

View File

@@ -3,6 +3,22 @@
# Copyright (c) 2005 Junio C Hamano
#
# if --tee was passed, write the output not only to the terminal, but
# additionally to the file test-results/$BASENAME.out, too.
case "$GIT_TEST_TEE_STARTED, $* " in
done,*)
# do not redirect again
;;
*' --tee '*|*' --va'*)
mkdir -p test-results
BASE=test-results/$(basename "$0" .sh)
(GIT_TEST_TEE_STARTED=done ${SHELL-sh} "$0" "$@" 2>&1;
echo $? > $BASE.exit) | tee $BASE.out
test "$(cat $BASE.exit)" = 0
exit
;;
esac
# Keep the original TERM for say_color
ORIGINAL_TERM=$TERM
@@ -94,6 +110,10 @@ do
--no-python)
# noop now...
shift ;;
--va|--val|--valg|--valgr|--valgri|--valgrin|--valgrind)
valgrind=t; verbose=t; shift ;;
--tee)
shift ;; # was handled already
*)
break ;;
esac
@@ -434,7 +454,7 @@ test_create_repo () {
repo="$1"
mkdir -p "$repo"
cd "$repo" || error "Cannot setup test environment"
"$GIT_EXEC_PATH/git" init "--template=$GIT_EXEC_PATH/templates/blt/" >&3 2>&4 ||
"$GIT_EXEC_PATH/git" init "--template=$owd/../templates/blt/" >&3 2>&4 ||
error "cannot run git init -- have you built things yet?"
mv .git/hooks .git/hooks-disabled
cd "$owd"
@@ -444,7 +464,7 @@ test_done () {
trap - EXIT
test_results_dir="$TEST_DIRECTORY/test-results"
mkdir -p "$test_results_dir"
test_results_path="$test_results_dir/${0%-*}-$$"
test_results_path="$test_results_dir/${0%.sh}-$$"
echo "total $test_count" >> $test_results_path
echo "success $test_success" >> $test_results_path
@@ -492,8 +512,73 @@ test_done () {
# Test the binaries we have just built. The tests are kept in
# t/ subdirectory and are run in 'trash directory' subdirectory.
TEST_DIRECTORY=$(pwd)
PATH=$TEST_DIRECTORY/..:$PATH
GIT_EXEC_PATH=$(pwd)/..
if test -z "$valgrind"
then
PATH=$TEST_DIRECTORY/..:$PATH
GIT_EXEC_PATH=$TEST_DIRECTORY/..
else
make_symlink () {
test -h "$2" &&
test "$1" = "$(readlink "$2")" || {
# be super paranoid
if mkdir "$2".lock
then
rm -f "$2" &&
ln -s "$1" "$2" &&
rm -r "$2".lock
else
while test -d "$2".lock
do
say "Waiting for lock on $2."
sleep 1
done
fi
}
}
make_valgrind_symlink () {
# handle only executables
test -x "$1" || return
base=$(basename "$1")
symlink_target=$TEST_DIRECTORY/../$base
# do not override scripts
if test -x "$symlink_target" &&
test ! -d "$symlink_target" &&
test "#!" != "$(head -c 2 < "$symlink_target")"
then
symlink_target=../valgrind.sh
fi
case "$base" in
*.sh|*.perl)
symlink_target=../unprocessed-script
esac
# create the link, or replace it if it is out of date
make_symlink "$symlink_target" "$GIT_VALGRIND/bin/$base" || exit
}
# override all git executables in TEST_DIRECTORY/..
GIT_VALGRIND=$TEST_DIRECTORY/valgrind
mkdir -p "$GIT_VALGRIND"/bin
for file in $TEST_DIRECTORY/../git* $TEST_DIRECTORY/../test-*
do
make_valgrind_symlink $file
done
OLDIFS=$IFS
IFS=:
for path in $PATH
do
ls "$path"/git-* 2> /dev/null |
while read file
do
make_valgrind_symlink "$file"
done
done
IFS=$OLDIFS
PATH=$GIT_VALGRIND/bin:$PATH
GIT_EXEC_PATH=$GIT_VALGRIND/bin
export GIT_VALGRIND
fi
GIT_TEMPLATE_DIR=$(pwd)/../templates/blt
unset GIT_CONFIG
GIT_CONFIG_NOSYSTEM=1

2
t/valgrind/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
/bin/
/templates

123
t/valgrind/analyze.sh Executable file
View File

@@ -0,0 +1,123 @@
#!/bin/sh
out_prefix=$(dirname "$0")/../test-results/valgrind.out
output=
count=0
total_count=0
missing_message=
new_line='
'
# start outputting the current valgrind error in $out_prefix.++$count,
# and the test case which failed in the corresponding .message file
start_output () {
test -z "$output" || return
# progress
total_count=$(($total_count+1))
test -t 2 && printf "\rFound %d errors" $total_count >&2
count=$(($count+1))
output=$out_prefix.$count
: > $output
echo "*** $1 ***" > $output.message
}
finish_output () {
test ! -z "$output" || return
output=
# if a test case has more than one valgrind error, we need to
# copy the last .message file to the previous errors
test -z "$missing_message" || {
while test $missing_message -lt $count
do
cp $out_prefix.$count.message \
$out_prefix.$missing_message.message
missing_message=$(($missing_message+1))
done
missing_message=
}
}
# group the valgrind errors by backtrace
output_all () {
last_line=
j=0
i=1
while test $i -le $count
do
# output <number> <backtrace-in-one-line>
echo "$i $(tr '\n' ' ' < $out_prefix.$i)"
i=$(($i+1))
done |
sort -t ' ' -k 2 | # order by <backtrace-in-one-line>
while read number line
do
# find duplicates, do not output backtrace twice
if test "$line" != "$last_line"
then
last_line=$line
j=$(($j+1))
printf "\nValgrind error $j:\n\n"
cat $out_prefix.$number
printf "\nfound in:\n"
fi
# print the test case where this came from
printf "\n"
cat $out_prefix.$number.message
done
}
handle_one () {
OLDIFS=$IFS
IFS="$new_line"
while read line
do
case "$line" in
# backtrace, possibly a new one
==[0-9]*)
# Does the current valgrind error have a message yet?
case "$output" in
*.message)
test -z "$missing_message" &&
missing_message=$count
output=
esac
start_output $(basename $1)
echo "$line" |
sed 's/==[0-9]*==/==valgrind==/' >> $output
;;
# end of backtrace
'}')
test -z "$output" || {
echo "$line" >> $output
test $output = ${output%.message} &&
output=$output.message
}
;;
# end of test case
'')
finish_output
;;
# normal line; if $output is set, print the line
*)
test -z "$output" || echo "$line" >> $output
;;
esac
done < $1
IFS=$OLDIFS
# just to be safe
finish_output
}
for test_script in "$(dirname "$0")"/../test-results/*.out
do
handle_one $test_script
done
output_all

45
t/valgrind/default.supp Normal file
View File

@@ -0,0 +1,45 @@
{
ignore-zlib-errors-cond
Memcheck:Cond
obj:*libz.so*
}
{
ignore-zlib-errors-value8
Memcheck:Value8
obj:*libz.so*
}
{
ignore-zlib-errors-value4
Memcheck:Value4
obj:*libz.so*
}
{
ignore-ldso-cond
Memcheck:Cond
obj:*ld-*.so
}
{
ignore-ldso-addr8
Memcheck:Addr8
obj:*ld-*.so
}
{
ignore-ldso-addr4
Memcheck:Addr4
obj:*ld-*.so
}
{
writing-data-from-zlib-triggers-even-more-errors
Memcheck:Param
write(buf)
obj:/lib/ld-*.so
fun:write_in_full
fun:write_buffer
fun:write_loose_object
}

22
t/valgrind/valgrind.sh Executable file
View File

@@ -0,0 +1,22 @@
#!/bin/sh
base=$(basename "$0")
TRACK_ORIGINS=
VALGRIND_VERSION=$(valgrind --version)
VALGRIND_MAJOR=$(expr "$VALGRIND_VERSION" : '[^0-9]*\([0-9]*\)')
VALGRIND_MINOR=$(expr "$VALGRIND_VERSION" : '[^0-9]*[0-9]*\.\([0-9]*\)')
test 3 -gt "$VALGRIND_MAJOR" ||
test 3 -eq "$VALGRIND_MAJOR" -a 4 -gt "$VALGRIND_MINOR" ||
TRACK_ORIGINS=--track-origins=yes
exec valgrind -q --error-exitcode=126 \
--leak-check=no \
--suppressions="$GIT_VALGRIND/default.supp" \
--gen-suppressions=all \
$TRACK_ORIGINS \
--log-fd=4 \
--input-fd=4 \
$GIT_VALGRIND_OPTIONS \
"$GIT_VALGRIND"/../../"$base" "$@"