Show 75 quoted lines
>
> -- >8 --
> Subject: cat-file: pass expand_data to print_object_or_die
>
> We currently individually pass the sha1, type, and size
> fields calculated by sha1_object_info. However, if we pass
> the whole struct, the called function can make more
> intelligent decisions about which fields were actually
> filled by sha1_object_info.
>
> This patch takes that first refactoring step, passing the
> whole struct, so further patches can make those decisions
> with less noise in their diffs. There should be no
> functional change to this patch (aside from a minor typo fix
> in the error message).
>
> As a side effect, we can rename the local variables in the
> function to "type" and "size", since the names are no longer
> taken.
>
> Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
> Signed-off-by: Jeff King <peff@peff.net>
> ---
> builtin/cat-file.c | 21 +++++++++++----------
> 1 file changed, 11 insertions(+), 10 deletions(-)
>
> diff --git a/builtin/cat-file.c b/builtin/cat-file.c
> index b2ca775..1434afb 100644
> --- a/builtin/cat-file.c
> +++ b/builtin/cat-file.c
> @@ -193,25 +193,26 @@ static size_t expand_format(struct strbuf *sb, const char *start, void *data)
> return end - start + 1;
> }
>
> -static void print_object_or_die(int fd, const unsigned char *sha1,
> - enum object_type type, unsigned long size)
> +static void print_object_or_die(int fd, struct expand_data *data)
> {
> - if (type == OBJ_BLOB) {
> + const unsigned char *sha1 = data->sha1;
> +
> + if (data->type == OBJ_BLOB) {
> if (stream_blob_to_fd(fd, sha1, NULL, 0) < 0)
> die("unable to stream %s to stdout", sha1_to_hex(sha1));
> }
> else {
> - enum object_type rtype;
> - unsigned long rsize;
> + enum object_type type;
> + unsigned long size;
> void *contents;
>
> - contents = read_sha1_file(sha1, &rtype, &rsize);
> + contents = read_sha1_file(sha1, &type, &size);
> if (!contents)
> die("object %s disappeared", sha1_to_hex(sha1));
> - if (rtype != type)
> + if (type != data->type)
> die("object %s changed type!?", sha1_to_hex(sha1));
> - if (rsize != size)
> - die("object %s change size!?", sha1_to_hex(sha1));
> + if (size != data->size)
> + die("object %s changed size!?", sha1_to_hex(sha1));
>
> write_or_die(fd, contents, size);
> free(contents);
> @@ -250,7 +251,7 @@ static int batch_one_object(const char *obj_name, struct batch_options *opt,
> strbuf_release(&buf);
>
> if (opt->print_contents) {
> - print_object_or_die(1, data->sha1, data->type, data->size);
> + print_object_or_die(1, data);
> write_or_die(1, "\n", 1);
> }
> return 0;