git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jonathan Nieder <jrnieder@gmail.com>
To: Jeff King <peff@peff.net>
Cc: Samuel Bronson <naesten@gmail.com>,
	Junio C Hamano <gitster@pobox.com>,
	git@vger.kernel.org
Subject: Re: [PATCH 2/2] cat-file: handle --batch format with missing type/size
Date: Wed, 11 Dec 2013 12:42:00 -0800	[thread overview]
Message-ID: <20131211204200.GN2311@google.com> (raw)
In-Reply-To: <20131211115844.GB10594@sigill.intra.peff.net>

Jeff King wrote:

> We could do the same for the type. However, besides our
> consistency check, we also care about the type in deciding
> whether to stream or not. We therefore make sure to always
> trigger a type lookup when we are printing, so that

This "We make sure" is the behavior after this patch, not before,
right?

[...]
> --- a/builtin/cat-file.c
> +++ b/builtin/cat-file.c
> @@ -211,7 +211,7 @@ static void print_object_or_die(int fd, struct expand_data *data)
>  			die("object %s disappeared", sha1_to_hex(sha1));
>  		if (type != data->type)
>  			die("object %s changed type!?", sha1_to_hex(sha1));

Maybe an assert(data.info.typep) or similar would make this more
locally readable.

[...]
> @@ -276,6 +276,13 @@ static int batch_objects(struct batch_options *opt)
>  	data.mark_query = 0;
>  
> +	/*
> +	 * If we are printing out the object, then always fill in the type,
> +	 * since we will want to decide whether or not to stream.
> +	 */
> +	if (opt->print_contents)
> +		data.info.typep = &data.type;

Oof.  I guess this means that the optimization from 98e2092b wasn't being
applied by 'git cat-file --batch' with format specifiers that don't
include %(objecttype), but no one would have noticed because of the
"changed type" thing. :)

> --- a/t/t1006-cat-file.sh
> +++ b/t/t1006-cat-file.sh
> @@ -85,6 +85,28 @@ $content"
>  		git cat-file --batch-check="%(objecttype) %(rest)" >actual &&
>  	test_cmp expect actual
>      '
> +
> +    test -z "$content" ||
> +    test_expect_success "--batch without type ($type)" '
> +	{
> +		echo "$size" &&
> +		maybe_remove_timestamp "$content" $no_ts
> +	} >expect &&
> +	echo $sha1 | git cat-file --batch="%(objectsize)" >actual.full &&
> +	maybe_remove_timestamp "$(cat actual.full)" $no_ts >actual &&
> +	test_cmp expect actual
> +    '
> +
> +    test -z "$content" ||
> +    test_expect_success "--batch without size ($type)" '
> +	{
> +		echo "$type" &&
> +		maybe_remove_timestamp "$content" $no_ts
> +	} >expect &&
> +	echo $sha1 | git cat-file --batch="%(objecttype)" >actual.full &&
> +	maybe_remove_timestamp "$(cat actual.full)" $no_ts >actual &&
> +	test_cmp expect actual
> +    '
>  }

Looks good.

(not about this patch) I suspect a test_cmp_ignore_timestamp helper
could simplify these tests somewhat. :)

For what it's worth, with or without commit message changes or the
check that data->type is initialized,

Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>

  reply	other threads:[~2013-12-11 20:42 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-12-11  4:37 [BUG] "echo HEAD | git cat-file --batch=''" fails catastrophically Samuel Bronson
2013-12-11 11:54 ` Jeff King
2013-12-11 11:56   ` [PATCH 1/2] cat-file: pass expand_data to print_object_or_die Jeff King
2013-12-11 20:11     ` Jonathan Nieder
2013-12-11 23:01       ` Jeff King
2013-12-12  3:03         ` Junio C Hamano
2013-12-11 11:58   ` [PATCH 2/2] cat-file: handle --batch format with missing type/size Jeff King
2013-12-11 20:42     ` Jonathan Nieder [this message]
2013-12-11 23:15       ` Jeff King
2013-12-11 23:31         ` Jonathan Nieder
2013-12-12  3:05         ` 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=20131211204200.GN2311@google.com \
    --to=jrnieder@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=naesten@gmail.com \
    --cc=peff@peff.net \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).