Skip to content
  • Jeff King's avatar
    clean up error conventions of remote.c:match_explicit · 9a7bbd1d
    Jeff King authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    match_explicit is called for each push refspec to try to
    fully resolve the source and destination sides of the
    refspec.  Currently, we look at each refspec and report
    errors on both the source and the dest side before aborting.
    
    It makes sense to report errors for each refspec, since an
    error in one is independent of an error in the other.
    However, reporting errors on the 'dst' side of a refspec if
    there has been an error on the 'src' side does not
    necessarily make sense, since the interpretation of the
    'dst' side depends on the 'src' side (for example, when
    creating a new unqualified remote ref, we use the same type
    as the src ref).
    
    This patch lets match_explicit return early when the src
    side of the refspec is bogus. We still look at all of the
    refspecs before aborting the push, though.
    
    At the same time, we clean up the call signature, which
    previously took an extra "errs" flag. This was pointless, as
    we didn't act on that flag, but rather just passed it back
    to the caller. Instead, we now use the more traditional
    "return -1" to signal an error, and the caller aggregates
    the error count.
    
    This change fixes two bugs, as well:
    
      - the early return avoids a segfault when passing a NULL
        matched_src to guess_ref()
    
      - the check for multiple sources pointing to a single dest
        aborted if the "err" flag was set. Presumably the intent
        was not to bother with the check if we had no
        matched_src. However, since the err flag was passed in
        from the caller, we might abort the check just because a
        previous refspec had a problem, which doesn't make
        sense.
    
        In practice, this didn't matter, since due to the error
        flag we end up aborting the push anyway.
    
    Signed-off-by: default avatarJeff King <peff@peff.net>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    9a7bbd1d