]> git.ipfire.org Git - thirdparty/git.git/commit
oidtree: extend iteration to allow for arbitrary return codes
authorPatrick Steinhardt <ps@pks.im>
Fri, 20 Mar 2026 07:07:28 +0000 (08:07 +0100)
committerJunio C Hamano <gitster@pobox.com>
Fri, 20 Mar 2026 20:16:22 +0000 (13:16 -0700)
commitfe446b01aeaab307adcbfb39d4aaa72c37afbcda
tree5f28e0581528e50f32f44120a8890a328b2e136f
parent1382e54a9c9e5f98271a943af9c10299c6ba934b
oidtree: extend iteration to allow for arbitrary return codes

The interface `cb_each()` iterates through a crit-bit tree and calls a
specific callback function for each of the contained items. The callback
function is expected to return either:

  - `CB_CONTINUE` in case iteration shall continue.

  - `CB_BREAK` to abort iteration.

This is needlessly restrictive though, as callers may want to return
arbitrary values and have them be bubbled up to the `cb_each()` call
site. In fact, this is a rather common pattern we have: whenever such a
callback function returns a non-zero error code, we abort iteration and
bubble up the code as-is.

Refactor both the crit-bit tree and oidtree subsystems to behave
accordingly.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
cbtree.c
cbtree.h
object-name.c
oidtree.c
oidtree.h
t/unit-tests/u-oidtree.c