remote.c: untangle error logic in branch_get_upstream
commit1ca41a19323d455cf0028001677f3adfae0d4cc4
authorJeff King <peff@peff.net>
Fri, 22 May 2015 00:46:43 +0000 (21 20:46 -0400)
committerJunio C Hamano <gitster@pobox.com>
Fri, 22 May 2015 16:30:51 +0000 (22 09:30 -0700)
tree3db166956f285906c4706fa86e9aaa59682ebfd4
parent3a429d0af342d85ef6d561e3a60ae8793a34ae78
remote.c: untangle error logic in branch_get_upstream

The error-diagnosis logic in branch_get_upstream was copied
straight from sha1_name.c in the previous commit. However,
because we check all error cases and upfront and then later
diagnose them, the logic is a bit tangled. In particular:

  - if branch->merge[0] is NULL, we may end up dereferencing
    it for an error message (in practice, it should never be
    NULL, so this is probably not a triggerable bug).

  - We may enter the code path because branch->merge[0]->dst
    is NULL, but we then start our error diagnosis by
    checking whether our local branch exists. But that is
    only relevant to diagnosing missing merge config, not a
    missing tracking ref; our diagnosis may hide the real
    problem.

Instead, let's just use a sequence of "if" blocks to check
for each error type, diagnose it, and return NULL.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
remote.c