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>
next prev parent 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 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.