Skip to content
  • Jeff King's avatar
    check_everything_connected: use a struct with named options · 7043c707
    Jeff King authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    The number of variants of check_everything_connected has
    grown over the years, so that the "real" function takes
    several possibly-zero, possibly-NULL arguments. We hid the
    complexity behind some wrapper functions, but this doesn't
    scale well when we want to add new options.
    
    If we add more wrapper variants to handle the new options,
    then we can get a combinatorial explosion when those options
    might be used together (right now nobody wants to use both
    "shallow" and "transport" together, so we get by with just a
    few wrappers).
    
    If instead we add new parameters to each function, each of
    which can have a default value, then callers who want the
    defaults end up with confusing invocations like:
    
      check_everything_connected(fn, 0, data, -1, 0, NULL);
    
    where it is unclear which parameter is which (and every
    caller needs updated when we add new options).
    
    Instead, let's add a struct to hold all of the optional
    parameters. This is a little more verbose for the callers
    (who have to declare the struct and fill it in), but it
    makes their code much easier to follow, because every option
    is named as it is set (and unused options do not have to be
    mentioned at all).
    
    Note that we could also stick the iteration function and its
    callback data into the option struct, too. But since those
    are required for each call, by avoiding doing so, we can let
    very simple callers just pass "NULL" for the options and not
    worry about the struct at all.
    
    While we're touching each site, let's also rename the
    function to check_connected(). The existing name was quite
    long, and not all of the wrappers even used the full name.
    
    Signed-off-by: default avatarJeff King <peff@peff.net>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    7043c707