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

From: Junio C Hamano <[email-masked]>
Date: Mon, 07 Aug 2023 09:25:57 -0700

"Ryan Williams via GitGitGadget" <[email-masked]> writes:

> From: Ryan Williams <[email-masked]>
>
> 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.

So, I dunno.

Thanks.