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 <jrnie...@gmail.com>
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to