refactor refs_from_alternate_cb to allow passing extra data
authorJeff King <peff@peff.net>
Thu, 19 May 2011 21:33:17 +0000 (17:33 -0400)
committerJunio C Hamano <gitster@pobox.com>
Fri, 20 May 2011 03:01:10 +0000 (20:01 -0700)
commit114a6a889f5d21c26800c395a97cdd400073a9e8
tree1d6f4cbf532602cece264882eb096fcccaf86de4
parentea1ab4b280ed3b041da53e161e32e38930569f3e
refactor refs_from_alternate_cb to allow passing extra data

The foreach_alt_odb function triggers a callback for each
alternate object db we have, with room for a single void
pointer as data. Currently, we always call refs_from_alternate_cb
as the callback function, and then pass another callback (to
receive each ref individually) as the void pointer.

This has two problems:

  1. C technically forbids stuffing a function pointer into
     a "void *". In practice, this probably doesn't matter
     on any architectures git runs on, but it never hurts to
     follow the letter of the law.

  2. There is no room for an extra data pointer. Indeed, the
     alternate_ref_fn that refs_from_alternate_cb calls
     takes a void* for data, but we always pass it NULL.

Instead, let's properly stuff our function pointer into a
data struct, which also leaves room for an extra
caller-supplied data pointer. And to keep things simple for
existing callers, let's make a for_each_alternate_ref
function that takes care of creating the extra struct.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/fetch-pack.c
builtin/receive-pack.c
transport.c
transport.h