All of lore.kernel.org
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Felipe Contreras <felipe.contreras@gmail.com>
Cc: git@vger.kernel.org, Erik Faye-Lund <kusmabite@gmail.com>,
	Elijah Newren <newren@gmail.com>,
	Thiago Farina <tfransosi@gmail.com>
Subject: Re: [PATCH 2/2] fast-export: refactor get_tags_and_duplicates()
Date: Tue, 03 Sep 2013 12:44:57 -0700	[thread overview]
Message-ID: <xmqqsixlr8p2.fsf@gitster.dls.corp.google.com> (raw)
In-Reply-To: <1378019148-1565-3-git-send-email-felipe.contreras@gmail.com> (Felipe Contreras's message of "Sun, 1 Sep 2013 02:05:48 -0500")

Felipe Contreras <felipe.contreras@gmail.com> writes:

> Split into a separate helper function get_commit() so that the part that
> finds the relevant commit, and the part that does something with it
> (handle tag object, etc.) are in different places.
>
> No functional changes.

Actually, the old code used to use commit unchecked if e->item->type
said it is OBJ_COMMIT but e->item was somehow NULL.  The new code
checks this case and skips with a warning(), which I think is an
improvement, if not a bugfix (it only makes it easier to diagnose a
bug in the code that populates rev_cmdline_entry).

Thanks; will queue.

> Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
> ---
>  builtin/fast-export.c | 68 ++++++++++++++++++++++++++++-----------------------
>  1 file changed, 38 insertions(+), 30 deletions(-)
>
> diff --git a/builtin/fast-export.c b/builtin/fast-export.c
> index 957392c..03e1090 100644
> --- a/builtin/fast-export.c
> +++ b/builtin/fast-export.c
> @@ -485,9 +485,32 @@ static void handle_tag(const char *name, struct tag *tag)
>  	       (int)message_size, (int)message_size, message ? message : "");
>  }
>  
> +static struct commit *get_commit(struct rev_cmdline_entry *e, char *full_name)
> +{
> +	switch (e->item->type) {
> +	case OBJ_COMMIT:
> +		return (struct commit *)e->item;
> +	case OBJ_TAG: {
> +		struct tag *tag = (struct tag *)e->item;
> +
> +		/* handle nested tags */
> +		while (tag && tag->object.type == OBJ_TAG) {
> +			parse_object(tag->object.sha1);
> +			string_list_append(&extra_refs, full_name)->util = tag;
> +			tag = (struct tag *)tag->tagged;
> +		}
> +		if (!tag)
> +			die("Tag %s points nowhere?", e->name);
> +		return (struct commit *)tag;
> +		break;
> +	}
> +	default:
> +		return NULL;
> +	}
> +}
> +
>  static void get_tags_and_duplicates(struct rev_cmdline_info *info)
>  {
> -	struct tag *tag;
>  	int i;
>  
>  	for (i = 0; i < info->nr; i++) {
> @@ -502,41 +525,26 @@ static void get_tags_and_duplicates(struct rev_cmdline_info *info)
>  		if (dwim_ref(e->name, strlen(e->name), sha1, &full_name) != 1)
>  			continue;
>  
> -		switch (e->item->type) {
> -		case OBJ_COMMIT:
> -			commit = (struct commit *)e->item;
> -			break;
> -		case OBJ_TAG:
> -			tag = (struct tag *)e->item;
> -
> -			/* handle nested tags */
> -			while (tag && tag->object.type == OBJ_TAG) {
> -				parse_object(tag->object.sha1);
> -				string_list_append(&extra_refs, full_name)->util = tag;
> -				tag = (struct tag *)tag->tagged;
> -			}
> -			if (!tag)
> -				die ("Tag %s points nowhere?", e->name);
> -			switch(tag->object.type) {
> -			case OBJ_COMMIT:
> -				commit = (struct commit *)tag;
> -				break;
> -			case OBJ_BLOB:
> -				export_blob(tag->object.sha1);
> -				continue;
> -			default: /* OBJ_TAG (nested tags) is already handled */
> -				warning("Tag points to object of unexpected type %s, skipping.",
> -					typename(tag->object.type));
> -				continue;
> -			}
> -			break;
> -		default:
> +		commit = get_commit(e, full_name);
> +		if (!commit) {
>  			warning("%s: Unexpected object of type %s, skipping.",
>  				e->name,
>  				typename(e->item->type));
>  			continue;
>  		}
>  
> +		switch(commit->object.type) {
> +		case OBJ_COMMIT:
> +			break;
> +		case OBJ_BLOB:
> +			export_blob(commit->object.sha1);
> +			continue;
> +		default: /* OBJ_TAG (nested tags) is already handled */
> +			warning("Tag points to object of unexpected type %s, skipping.",
> +				typename(commit->object.type));
> +			continue;
> +		}
> +
>  		/*
>  		 * This ref will not be updated through a commit, lets make
>  		 * sure it gets properly updated eventually.

  reply	other threads:[~2013-09-03 19:45 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-01  7:05 [PATCH 0/2] fast-export: simplification Felipe Contreras
2013-09-01  7:05 ` [PATCH 1/2] fast-export: make extra_refs global Felipe Contreras
2013-09-01  7:05 ` [PATCH 2/2] fast-export: refactor get_tags_and_duplicates() Felipe Contreras
2013-09-03 19:44   ` Junio C Hamano [this message]
2013-09-03 20:17     ` 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=xmqqsixlr8p2.fsf@gitster.dls.corp.google.com \
    --to=gitster@pobox.com \
    --cc=felipe.contreras@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=kusmabite@gmail.com \
    --cc=newren@gmail.com \
    --cc=tfransosi@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.