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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Junio C Hamano <gitster@xxxxxxxxx> writes:

> "Ryan Williams via GitGitGadget" <gitgitgadget@xxxxxxxxx> writes:
>
>> From: Ryan Williams <ryan@xxxxxxxxxxxxxxx>
>>
>> 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.

Indeed, we already partition these commands into these porcelain vs
plumbing categories in "man git". There, we say for plumbing

    The interface (input, output, set of options and the semantics) to
    these low-level commands are meant to be a lot more stable than
    Porcelain level commands, because these commands are primarily for
    scripted use. The interface to Porcelain commands on the other hand
    are subject to change in order to improve the end user experience.

> 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.

I think this illustrative example (at least the general language of it,
if not the entire example) could be added to the referenced section of
our docs (I'd be happy to add this).

On a related note, does it make sense to explicitly call out the
plumbing vs porcelain distinction in the individual manpages for each
command? For example, I grepped for "plumb" in the docs for
"git-ls-tree" but came up empty. We could add just a simple "Part of
Git plumbing" to a slightly longer

    Part of Git plumbing. Plumbing commands are more stable and are
    designed to work reliably in scripting environments ...

and similarly for all the porecelain commands.



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux