Re: [PATCH] git: show alias info only with lone -h

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

 



On Sat, Jul 26, 2025 at 09:12:55AM -0400, D. Ben Knoble wrote:

> > In this case it is not too harmful, but you can come up with
> > pathological cases where it actually runs a real command:
> >
> >   git -c alias.grep-for-foo='grep -e foo' grep-for-foo -h
> >
> > which runs a real grep.
> >
> > I guess one way to deal with it would be if the user runs "foo -h", and
> > alias.foo is "bar --other arguments", then we run just "bar -h",
> > dropping the extra arguments provided by the alias.
> 
> This is intriguing: it would mean that an alias is not purely a
> textual replacement? That's true for ! aliases today, but other than
> shelling out it's pretty close.

Sort of. It's still a textual replacement for running the command. It's
just that "git foo -h" is magic that puts us into help mode, and we try
to communicate that help mode to the underlying command.

So I guess it depends on your point of view. :)

> > So IMHO the patch under discussion is a strict improvement, even though
> > it leaves many other questionable cases unsolved. I'd also be happy if
> > on top we did:
> >
> >   1. When alias.foo="bar --options", turn "git foo -h" into "git bar
> >      -h", dropping "--options".
> >
> >   2. When alias.foo="!bar", report only the alias and do not run "bar"
> >      at all. The collateral damage here would be:
> >
> >         !git bar $(some_shell_magic_we_need)
> >
> >      but IMHO that is not all that bad. If we report the alias content,
> >      the user can probably figure out which "git help" to run next.
> 
> And if the user actually wanted to run `bar -h`, say, because `-h`
> didn't mean help for that command? I can't come up with a compelling
> example, but this goes back to "textual substitution" vs. "trying to
> decide what the user actually wants."

This is leaning into the idea that "git bar -h" without other arguments
should _always_ mean help. We enforce it for our own commands (via a
test script). It's not enforced for third-party commands. If somebody
found a third-party command that violated this, I'd be tempted to say
"you're doing it wrong". But that might not be feasible if it's
a command with an established history.

But I think this is already somewhat true, isn't it? If you have
alias.foo=bar, then "git foo -h" is already treated as help. René's
patch restricts that to the case of "git foo -h" and not "git foo -h
other-arg", which is good. But I don't know if we are ready to get rid
of "git foo -h" being alias-help at all.

> At any rate, a (3) to consider is "--help-all": the patches I've been
> working on are to make that flag work more often outside of Git
> repositories. I just need to clean things up a bit and get to tests.
> But if we do treat "git alias -h" specially, perhaps "--help-all" then
> also warrants treatment.

Most of the special-casing of "-h" now is just recognizing it when its
alone to mean "help", even if the sub-command might recognize it as a
non-help option in other contexts. I don't think --help-all really needs
the same, since there's not much ambiguity to its meaning.

But yeah, if individual commands checked "--help-all" before insisting
on being in a repo (just like we do for "-h"), that seems like a good
improvement to me.

-Peff




[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