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

Re: [PATCH] ls-tree: default <tree-ish> to HEAD

From
Taylor Blau <me@ttaylorr.com>
Date
Aug 11, 2023, 17:35 UTC
Message-ID
<ZNZxWdUHMwGxWdbJ@nand.local>
In-Reply-To
<xmqqmsz2hl9m.fsf@gitster.g>
On Mon, Aug 07, 2023 at 09:25:57AM -0700, Junio C Hamano wrote:
Show 25 quoted lines
> "Ryan Williams via GitGitGadget" <gitgitgadget@gmail.com> writes:
>
> > From: Ryan Williams <ryan@runsascoded.com>
> >
> > When no positional arguments are passed to `git ls-tree`, it currently
> > prints "usage" info to stderr and exits with code 129. A more intuitive
> > default would be to operate on the `HEAD` commit's tree (similarly to
> > `git show`, `git log`, and possibly others).
>
> As 'ls-tree' is a plumbing command meant for script writers, it was
> designed to require the users to be more explicit.  So, similarity
> to "show" and other Porcelain commands do not weigh much here.  Same
> for "rev-list" that does not fall back to HEAD.
>
> This was a very deliberate design decision to help use of the
> plumbing commands.  A buggy script may say
>
>     TREE=$(some command to find a tree object)
>     git ls-tree $TREE
>
> without making sure something sensible is in $TREE (and not even
> quoting it like "$TREE"), and if ls-tree defaulted to something, the
> script will silently produce a wrong result, instead of failing,
> robbing the script writer a chance to notice a bug in their code to
> come up with the TREE object name.

Yeah, I am similarly torn. On one hand, I think that it is true that people use ls-tree for various tasks more than we'd expect from a typical plumbing command (but less than a porcelain one, to be sure).

So in that sense I am inclined to agree with Ryan that their suggestion is a good one. ...But, I think even more important than that is avoiding buggy invocations like the kind you describe above that would produce subtly wrong results.

I think you could make an argument that you could implement that behavior and also emit a warning() when tree-ish is blank and the output isn't going to a TTY. But that seems kind of gross to me, so I'd just as soon not change the existing behavior here.

Thanks, Taylor

Previous: Junio C HamanoNext: Linus Arver
Message 3 of 4 in “ls-tree: default <tree-ish> to HEAD”
  1. ls-tree: default <tree-ish> to HEADRyan Williams via GitGitGadget, Aug 7, 2023
  2. Junio C HamanoAug 7, 2023
  3. Taylor BlauAug 11, 2023
  4. Linus ArverAug 11, 2023

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.