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

Re: [PATCH 4/9] git-cat-file: Add --stdin option

From
Junio C Hamano <gitster@pobox.com>
Date
Oct 26, 2007, 20:59 UTC
Message-ID
<7vd4v1y4lv.fsf@gitster.siamese.dyndns.org>
In-Reply-To
<1193307927-3592-5-git-send-email-aroben@apple.com>
Adam Roben <aroben@apple.com> writes:
Show 8 quoted lines
> @@ -23,6 +23,10 @@ OPTIONS
>  	For a more complete list of ways to spell object names, see
>  	"SPECIFYING REVISIONS" section in gitlink:git-rev-parse[1].
>  
> +--stdin::
> +	Read object names from stdin instead of specifying one on the
> +	command line.
> +

This does not talk about modified output format: what the format is, nor when that modified format is used.

Show 16 quoted lines
> @@ -139,16 +139,26 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name)
>  	if (!buf)
>  		die("git-cat-file %s: bad file", obj_name);
>  
> +	if (print_size) {
> +		printf("%lu\n", size);
> +		fflush(stdout);
> +	}
>  	write_or_die(1, buf, size);
> +	if (print_size) {
> +		printf("\n");
> +		fflush(stdout);
> +	}
>  	return 0;
>  }
>  

Not that I object strongly to it, but do we need extra LF after the contents?

  - "It would help readers written in typical scripting
    languages" is an acceptable answer, but I doubt that is the
    case --- the reader is given the number of bytes and is
    going to "read($pipe, $buf, $that_size)" anyway.
  - "The reader can assert that one-byte past the content is a
    LF to catch errors, and this LF would help re-synchronize
    after such an error" would be another acceptable answer, but
    for the re-synchronization to work, the output needs to tell
    which record each chunk is about (i.e. if the output were
    "<type> <sha1> <size>LF<contents>LF", the "re-sync" argument
    would make a bit more sense).
> +	print_size = !opt || opt == 'p';
Needs a bit of comment here, and in the documentation.  E.g.
	git-cat-file --stdin -t <list-of-sha1
        git-cat-file --stdin -s <list-of-sha1
	are ways to check types and sizes of the objects in the
	list.
How does --stdin interact with -e?

How does --stdin interact with -p when printing a tree or a tag object?

How does "blob --stdin" do when input sequence contains a non blob SHA1?

It almost feels that --stdin should be named something else, such as --batch or --bulk, as it is not just affecting the input.

Here is an alternative suggestion.
   Two new options, --batch and --batch-check, are introduced.
   These options are incompatible with -[tsep] or an object type
   given as the first parameter to git-cat-file.
   * git-cat-file --batch-check <list-of-sha1
     outputs a record of this form
          <sha1> SP <type> SP <size> LF
     for each of the input lines.
   * git-cat-file --batch <list-of-sha1
     outputs a record of this form
          <sha1> SP <type> SP <size> LF <contents> LF
     for each of the input lines.
  For a missing object, either option gives a record of form:
          <sha1> SP missing LF
Previous: Junio C HamanoNext: Junio C Hamano
Message 16 of 17 in “Make git-svn fetch ~1.7x faster”
  1. 0/9 Make git-svn fetch ~1.7x fasterAdam Roben, Oct 25, 2007
  2. 1/9 Add tests for git cat-fileAdam Roben, Oct 25, 2007
  3. 2/9 git-cat-file: Small refactor of cmd_cat_fileAdam Roben, Oct 25, 2007
  4. 3/9 git-cat-file: Make option parsing a little more flexibleAdam Roben, Oct 25, 2007
  5. 4/9 git-cat-file: Add --stdin optionAdam Roben, Oct 25, 2007
  6. 5/9 Add tests for git hash-objectAdam Roben, Oct 25, 2007
  7. 6/9 git-hash-object: Add --stdin-paths optionAdam Roben, Oct 25, 2007
  8. 7/9 Git.pm: Add command_bidi_pipe and command_close_bidi_pipeAdam Roben, Oct 25, 2007
  9. 8/9 Git.pm: Add hash_and_insert_object and cat_blobAdam Roben, Oct 25, 2007
  10. 9/9 git-svn: Make fetch ~1.7x fasterAdam Roben, Oct 25, 2007
  11. Eric WongOct 26, 2007
  12. Junio C HamanoOct 26, 2007
  13. Brian DowningOct 26, 2007
  14. Junio C HamanoOct 27, 2007
  15. Junio C HamanoOct 26, 2007
  16. Junio C HamanoOct 26, 2007
  17. Junio C HamanoOct 26, 2007

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.