Merge branch 'maint-1.7.11' into maint
* maint-1.7.11: Almost 1.7.11.6 gitweb: URL-decode $my_url/$my_uri when stripping PATH_INFO rebase -i: use full onto sha1 in reflog sh-setup: protect from exported IFS receive-pack: do not leak output from auto-gc to standard output t/t5400: demonstrate breakage caused by informational message from prune setup: clarify error messages for file/revisions ambiguity send-email: improve RFC2047 quote parsing fsck: detect null sha1 in tree entries do not write null sha1s to on-disk index diff: do not use null sha1 as a sentinel value
This commit is contained in:
@ -213,4 +213,30 @@ test_expect_success 'rev-list --verify-objects with bad sha1' '
|
||||
grep -q "error: sha1 mismatch 63ffffffffffffffffffffffffffffffffffffff" out
|
||||
'
|
||||
|
||||
_bz='\0'
|
||||
_bz5="$_bz$_bz$_bz$_bz$_bz"
|
||||
_bz20="$_bz5$_bz5$_bz5$_bz5"
|
||||
|
||||
test_expect_success 'fsck notices blob entry pointing to null sha1' '
|
||||
(git init null-blob &&
|
||||
cd null-blob &&
|
||||
sha=$(printf "100644 file$_bz$_bz20" |
|
||||
git hash-object -w --stdin -t tree) &&
|
||||
git fsck 2>out &&
|
||||
cat out &&
|
||||
grep "warning.*null sha1" out
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'fsck notices submodule entry pointing to null sha1' '
|
||||
(git init null-commit &&
|
||||
cd null-commit &&
|
||||
sha=$(printf "160000 submodule$_bz$_bz20" |
|
||||
git hash-object -w --stdin -t tree) &&
|
||||
git fsck 2>out &&
|
||||
cat out &&
|
||||
grep "warning.*null sha1" out
|
||||
)
|
||||
'
|
||||
|
||||
test_done
|
||||
|
@ -29,4 +29,23 @@ test_expect_success 'update-index -h with corrupt index' '
|
||||
grep "[Uu]sage: git update-index" broken/usage
|
||||
'
|
||||
|
||||
test_expect_success '--cacheinfo does not accept blob null sha1' '
|
||||
echo content >file &&
|
||||
git add file &&
|
||||
git rev-parse :file >expect &&
|
||||
test_must_fail git update-index --cacheinfo 100644 $_z40 file &&
|
||||
git rev-parse :file >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success '--cacheinfo does not accept gitlink null sha1' '
|
||||
git init submodule &&
|
||||
(cd submodule && test_commit foo) &&
|
||||
git add submodule &&
|
||||
git rev-parse :submodule >expect &&
|
||||
test_must_fail git update-index --cacheinfo 160000 $_z40 submodule &&
|
||||
git rev-parse :submodule >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_done
|
||||
|
83
t/t4054-diff-bogus-tree.sh
Executable file
83
t/t4054-diff-bogus-tree.sh
Executable file
@ -0,0 +1,83 @@
|
||||
#!/bin/sh
|
||||
|
||||
test_description='test diff with a bogus tree containing the null sha1'
|
||||
. ./test-lib.sh
|
||||
|
||||
empty_tree=4b825dc642cb6eb9a060e54bf8d69288fbee4904
|
||||
|
||||
test_expect_success 'create bogus tree' '
|
||||
bogus_tree=$(
|
||||
printf "100644 fooQQQQQQQQQQQQQQQQQQQQQ" |
|
||||
q_to_nul |
|
||||
git hash-object -w --stdin -t tree
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'create tree with matching file' '
|
||||
echo bar >foo &&
|
||||
git add foo &&
|
||||
good_tree=$(git write-tree)
|
||||
blob=$(git rev-parse :foo)
|
||||
'
|
||||
|
||||
test_expect_success 'raw diff shows null sha1 (addition)' '
|
||||
echo ":000000 100644 $_z40 $_z40 A foo" >expect &&
|
||||
git diff-tree $empty_tree $bogus_tree >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'raw diff shows null sha1 (removal)' '
|
||||
echo ":100644 000000 $_z40 $_z40 D foo" >expect &&
|
||||
git diff-tree $bogus_tree $empty_tree >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'raw diff shows null sha1 (modification)' '
|
||||
echo ":100644 100644 $blob $_z40 M foo" >expect &&
|
||||
git diff-tree $good_tree $bogus_tree >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'raw diff shows null sha1 (other direction)' '
|
||||
echo ":100644 100644 $_z40 $blob M foo" >expect &&
|
||||
git diff-tree $bogus_tree $good_tree >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'raw diff shows null sha1 (reverse)' '
|
||||
echo ":100644 100644 $_z40 $blob M foo" >expect &&
|
||||
git diff-tree -R $good_tree $bogus_tree >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'raw diff shows null sha1 (index)' '
|
||||
echo ":100644 100644 $_z40 $blob M foo" >expect &&
|
||||
git diff-index $bogus_tree >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'patch fails due to bogus sha1 (addition)' '
|
||||
test_must_fail git diff-tree -p $empty_tree $bogus_tree
|
||||
'
|
||||
|
||||
test_expect_success 'patch fails due to bogus sha1 (removal)' '
|
||||
test_must_fail git diff-tree -p $bogus_tree $empty_tree
|
||||
'
|
||||
|
||||
test_expect_success 'patch fails due to bogus sha1 (modification)' '
|
||||
test_must_fail git diff-tree -p $good_tree $bogus_tree
|
||||
'
|
||||
|
||||
test_expect_success 'patch fails due to bogus sha1 (other direction)' '
|
||||
test_must_fail git diff-tree -p $bogus_tree $good_tree
|
||||
'
|
||||
|
||||
test_expect_success 'patch fails due to bogus sha1 (reverse)' '
|
||||
test_must_fail git diff-tree -R -p $good_tree $bogus_tree
|
||||
'
|
||||
|
||||
test_expect_success 'patch fails due to bogus sha1 (index)' '
|
||||
test_must_fail git diff-index -p $bogus_tree
|
||||
'
|
||||
|
||||
test_done
|
@ -145,6 +145,41 @@ test_expect_success 'push --all excludes remote-tracking hierarchy' '
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'receive-pack runs auto-gc in remote repo' '
|
||||
rm -rf parent child &&
|
||||
git init parent &&
|
||||
(
|
||||
# Setup a repo with 2 packs
|
||||
cd parent &&
|
||||
echo "Some text" >file.txt &&
|
||||
git add . &&
|
||||
git commit -m "Initial commit" &&
|
||||
git repack -adl &&
|
||||
echo "Some more text" >>file.txt &&
|
||||
git commit -a -m "Second commit" &&
|
||||
git repack
|
||||
) &&
|
||||
cp -a parent child &&
|
||||
(
|
||||
# Set the child to auto-pack if more than one pack exists
|
||||
cd child &&
|
||||
git config gc.autopacklimit 1 &&
|
||||
git branch test_auto_gc &&
|
||||
# And create a file that follows the temporary object naming
|
||||
# convention for the auto-gc to remove
|
||||
: >.git/objects/tmp_test_object &&
|
||||
test-chmtime =-1209601 .git/objects/tmp_test_object
|
||||
) &&
|
||||
(
|
||||
cd parent &&
|
||||
echo "Even more text" >>file.txt &&
|
||||
git commit -a -m "Third commit" &&
|
||||
git send-pack ../child HEAD:refs/heads/test_auto_gc >output 2>&1 &&
|
||||
grep "Auto packing the repository for optimum performance." output
|
||||
) &&
|
||||
test ! -e child/.git/objects/tmp_test_object
|
||||
'
|
||||
|
||||
rewound_push_setup() {
|
||||
rm -rf parent child &&
|
||||
mkdir parent &&
|
||||
|
@ -841,6 +841,19 @@ test_expect_success $PREREQ '--compose adds MIME for utf8 subject' '
|
||||
grep "^Subject: =?UTF-8?q?utf8-s=C3=BCbj=C3=ABct?=" msgtxt1
|
||||
'
|
||||
|
||||
test_expect_success $PREREQ 'utf8 author is correctly passed on' '
|
||||
clean_fake_sendmail &&
|
||||
test_commit weird_author &&
|
||||
test_when_finished "git reset --hard HEAD^" &&
|
||||
git commit --amend --author "Füñný Nâmé <odd_?=mail@example.com>" &&
|
||||
git format-patch --stdout -1 >funny_name.patch &&
|
||||
git send-email --from="Example <nobody@example.com>" \
|
||||
--to=nobody@example.com \
|
||||
--smtp-server="$(pwd)/fake.sendmail" \
|
||||
funny_name.patch &&
|
||||
grep "^From: Füñný Nâmé <odd_?=mail@example.com>" msgtxt1
|
||||
'
|
||||
|
||||
test_expect_success $PREREQ 'detects ambiguous reference/file conflict' '
|
||||
echo master > master &&
|
||||
git add master &&
|
||||
|
Reference in New Issue
Block a user