9a217391e9
When unpack-objects is run under the --strict option, objects that have pointers to other objects are verified for the reachability at the end, by calling check_object() on each of them, and letting check_object to walk the reachable objects from them using fsck_walk() recursively. The function however misunderstands the semantics of fsck_walk() function when it makes a call to it, setting itself as the callback. fsck_walk() expects the callback function to return a non-zero value to signal an error (negative value causes an immediate abort, positive value is still an error but allows further checks on sibling objects) and return zero to signal a success. The function however returned 1 on some non error cases, and to cover up this mistake, complained only when fsck_walk() did not detect any error. To fix this double-bug, make the function return zero on all success cases, and also check for non-zero return from fsck_walk() for an error. Signed-off-by: Junio C Hamano <gitster@pobox.com>
36 lines
528 B
Bash
36 lines
528 B
Bash
#!/bin/sh
|
|
|
|
test_description='unpack-objects'
|
|
|
|
. ./test-lib.sh
|
|
|
|
test_expect_success setup '
|
|
mkdir pub.git &&
|
|
GIT_DIR=pub.git git init --bare
|
|
GIT_DIR=pub.git git config receive.fsckobjects true &&
|
|
mkdir work &&
|
|
(
|
|
cd work &&
|
|
git init &&
|
|
mkdir -p gar/bage &&
|
|
(
|
|
cd gar/bage &&
|
|
git init &&
|
|
>junk &&
|
|
git add junk &&
|
|
git commit -m "Initial junk"
|
|
) &&
|
|
git add gar/bage &&
|
|
git commit -m "Initial superproject"
|
|
)
|
|
'
|
|
|
|
test_expect_success push '
|
|
(
|
|
cd work &&
|
|
git push ../pub.git master
|
|
)
|
|
'
|
|
|
|
test_done
|