git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 1/2] cat-file: pass expand_data to print_object_or_die

From
Junio C Hamano <gitster@pobox.com>
Date
Dec 12, 2013, 03:03 UTC
Message-ID
<7vmwk6u5xp.fsf@alter.siamese.dyndns.org>
In-Reply-To
<20131211230142.GA16606@sigill.intra.peff.net>
Jeff King <peff@peff.net> writes:
> It technically does typo-fix the error message, which I guess is a
> functional change. But I didn't count that. :)
>
> Here it is with the commit message fixes and your reviewed-by.
Thanks, both.
Will queue, to eventually merge to 'maint'.
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;
Previous: Jeff KingNext: Jeff King
Message 6 of 11 in “[BUG] "echo HEAD | git cat-file --batch=''" fails catastrophically”
  1. Samuel BronsonDec 11, 2013
  2. Jeff KingDec 11, 2013
  3. 1/2 cat-file: pass expand_data to print_object_or_dieJeff King, Dec 11, 2013
  4. Jonathan NiederDec 11, 2013
  5. Jeff KingDec 11, 2013
  6. Junio C HamanoDec 12, 2013
  7. 2/2 cat-file: handle --batch format with missing type/sizeJeff King, Dec 11, 2013
  8. Jonathan NiederDec 11, 2013
  9. Jeff KingDec 11, 2013
  10. Jonathan NiederDec 11, 2013
  11. Junio C HamanoDec 12, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.