author | Junio C Hamano <gitster@pobox.com> | |
Thu, 13 Aug 2009 19:41:14 +0000 (12:41 -0700) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Fri, 14 Aug 2009 07:52:08 +0000 (00:52 -0700) | ||
commit | 9a217391e931763d168d177decfe5e962d306bac | |
tree | 8e01ee3af4f2159667b1488a6f54c5eccab6a279 | tree | snapshot |
parent | 57f6ec029090f64377ec5c0926b6e2e39b0caa4f | commit | diff |
Fix "unpack-objects --strict"
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>
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>
builtin-unpack-objects.c | diff | blob | history | |
t/t5531-deep-submodule-push.sh | [new file with mode: 0644] | blob |