Browse Source
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>maint
Junio C Hamano
15 years ago
2 changed files with 44 additions and 7 deletions
@ -0,0 +1,35 @@
@@ -0,0 +1,35 @@
|
||||
#!/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 |
Loading…
Reference in new issue