From: Junio C Hamano <gitster@pobox•com>
To: Jeff King <peff@peff•net>
Cc: git@vger•kernel.org, Eric Sunshine <sunshine@sunshineco•com>
Subject: Re: [PATCH v3 02/14] remote.c: refactor setup of branch->merge list
Date: Thu, 21 May 2015 10:47:51 -0700 [thread overview]
Message-ID: <xmqqfv6pkek8.fsf@gitster.dls.corp.google.com> (raw)
In-Reply-To: <20150521044509.GB23409@peff.net> (Jeff King's message of "Thu, 21 May 2015 00:45:09 -0400")
Jeff King <peff@peff•net> writes:
> When we call branch_get() to lookup or create a "struct
> branch", we make sure the "merge" field is filled in so that
> callers can access it. But the conditions under which we do
> so are a little confusing, and can lead to two funny
> situations:
> ...
> In addition to those two fixes, this patch pushes the "do we
> need to setup merge?" logic down into set_merge, where it is
> a bit easier to follow.
Nicely done. Thanks.
>
> Signed-off-by: Jeff King <peff@peff•net>
> ---
> remote.c | 19 +++++++++++++++----
> 1 file changed, 15 insertions(+), 4 deletions(-)
>
> diff --git a/remote.c b/remote.c
> index bec8b31..ac17e66 100644
> --- a/remote.c
> +++ b/remote.c
> @@ -1636,6 +1636,19 @@ static void set_merge(struct branch *ret)
> unsigned char sha1[20];
> int i;
>
> + if (!ret)
> + return; /* no branch */
> + if (ret->merge)
> + return; /* already run */
> + if (!ret->remote_name || !ret->merge_nr) {
> + /*
> + * no merge config; let's make sure we don't confuse callers
> + * with a non-zero merge_nr but a NULL merge
> + */
> + ret->merge_nr = 0;
> + return;
> + }
> +
> ret->merge = xcalloc(ret->merge_nr, sizeof(*ret->merge));
> for (i = 0; i < ret->merge_nr; i++) {
> ret->merge[i] = xcalloc(1, sizeof(**ret->merge));
> @@ -1660,11 +1673,9 @@ struct branch *branch_get(const char *name)
> ret = current_branch;
> else
> ret = make_branch(name, 0);
> - if (ret && ret->remote_name) {
> + if (ret && ret->remote_name)
> ret->remote = remote_get(ret->remote_name);
> - if (ret->merge_nr)
> - set_merge(ret);
> - }
> + set_merge(ret);
> return ret;
> }
next prev parent reply other threads:[~2015-05-21 17:47 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-21 4:44 [PATCH v3 0/14] implement @{push} shorthand Jeff King
2015-05-21 4:45 ` [PATCH v3 01/14] remote.c: drop default_remote_name variable Jeff King
2015-05-21 4:45 ` [PATCH v3 02/14] remote.c: refactor setup of branch->merge list Jeff King
2015-05-21 17:47 ` Junio C Hamano [this message]
2015-05-21 4:45 ` [PATCH v3 03/14] remote.c: drop "remote" pointer from "struct branch" Jeff King
2015-05-21 4:45 ` [PATCH v3 04/14] remote.c: hoist branch.*.remote lookup out of remote_get_1 Jeff King
2015-05-21 4:45 ` [PATCH v3 05/14] remote.c: provide per-branch pushremote name Jeff King
2015-05-21 4:45 ` [PATCH v3 06/14] remote.c: hoist read_config into remote_get_1 Jeff King
2015-05-21 4:45 ` [PATCH v3 07/14] remote.c: introduce branch_get_upstream helper Jeff King
2015-05-21 18:07 ` Junio C Hamano
2015-05-21 18:14 ` Jeff King
2015-05-21 18:35 ` Jeff King
2015-05-21 19:16 ` Junio C Hamano
2015-05-21 4:45 ` [PATCH v3 08/14] remote.c: report specific errors from branch_get_upstream Jeff King
2015-05-21 18:33 ` Junio C Hamano
2015-05-21 18:49 ` Jeff King
2015-05-21 19:25 ` Junio C Hamano
2015-05-22 0:46 ` Jeff King
2015-05-22 0:49 ` Jeff King
2015-05-21 4:45 ` [PATCH v3 09/14] remote.c: add branch_get_push Jeff King
2015-05-21 4:45 ` [PATCH v3 10/14] sha1_name: refactor upstream_mark Jeff King
2015-05-21 4:45 ` [PATCH v3 11/14] sha1_name: refactor interpret_upstream_mark Jeff King
2015-05-21 4:45 ` [PATCH v3 12/14] sha1_name: implement @{push} shorthand Jeff King
2015-05-21 4:45 ` [PATCH v3 13/14] for-each-ref: use skip_prefix instead of starts_with Jeff King
2015-05-21 4:45 ` [PATCH v3 14/14] for-each-ref: accept "%(push)" format Jeff King
2015-05-21 4:52 ` [PATCH v3 0/14] implement @{push} shorthand Jeff King
2015-05-21 18:37 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqfv6pkek8.fsf@gitster.dls.corp.google.com \
--to=gitster@pobox$(echo .)com \
--cc=git@vger$(echo .)kernel.org \
--cc=peff@peff$(echo .)net \
--cc=sunshine@sunshineco$(echo .)com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox