Subject: Re: [PATCH v3 07/14] remote.c: introduce branch_get_upstream helper

From: Junio C Hamano <[email-masked]>
Date: Thu, 21 May 2015 11:07:33 -0700

Jeff King <[email-masked]> writes:

> All of the information needed to find the @{upstream} of a
> branch is included in the branch struct, but callers have to
> navigate a series of possible-NULL values to get there.
> Let's wrap that logic up in an easy-to-read helper.
>
> Signed-off-by: Jeff King <[email-masked]>

This step in the whole series is a gem.  I cannot believe that we
were content having to repeat that "branch->merge[0]->dst if we can
dereference down to that level" this many times.  Nice clean-up.

> diff --git a/builtin/branch.c b/builtin/branch.c
> index 258fe2f..1eb6215 100644
> --- a/builtin/branch.c
> +++ b/builtin/branch.c
> @@ -123,14 +123,12 @@ static int branch_merged(int kind, const char *name,
>  
>  	if (kind == REF_LOCAL_BRANCH) {
>  		struct branch *branch = branch_get(name);
> +		const char *upstream = branch_get_upstream(branch);
>  		unsigned char sha1[20];
>  
> -		if (branch &&
> -		    branch->merge &&
> -		    branch->merge[0] &&
> -		    branch->merge[0]->dst &&
> +		if (upstream &&
>  		    (reference_name = reference_name_to_free =
> -		     resolve_refdup(branch->merge[0]->dst, RESOLVE_REF_READING,
> +		     resolve_refdup(upstream, RESOLVE_REF_READING,
>  				    sha1, NULL)) != NULL)
>  			reference_rev = lookup_commit_reference(sha1);