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

Re: git-send-email and aliases

From
Junio C Hamano <junkio@cox.net>
Date
Mar 27, 2007, 10:29 UTC
Message-ID
<7vircnou7i.fsf@assigned-by-dhcp.cox.net>
In-Reply-To
<38b2ab8a0703270238n655bdee1kac227a6675261210@mail.gmail.com>
"Francis Moreau" <francis.moro@gmail.com> writes:
Show 20 quoted lines
> On 3/26/07, Junio C Hamano <junkio@cox.net> wrote:
>> > [alias]
>> >       send-email = send-email --no-signed-off-cc --suppress-from
>> >
>> > Is it failing because git-send-email is an external command ?
>>
>> $ sed -ne '/^alias\.\*/,/^$/p' Documentation/config.txt
>
> That said I think it's not really convenient. I'll end up doing:
>
> [aliases]
>    my-send-email = send-email --no-signed-off-cc --suppress-from
>    my-am = am -3 -s
>
> etc...
>
> Isn't possible to mimic bash alias handling:. From man: "Aliases are
> not expanded when the shell is not interactive,... "
>
> IOW is it possible for git to know if it has been invoked interactively ?

I do not think so, but I think alias expanding "git foo" while not expanding "git-foo" should not be too hard. You need two extra preparation steps for such a change to be useful, though.

 (1) Build with $(gitexecdir) set to outside the usual $PATH
     (/usr/libexec/git was suggested in the past) to make sure
     we still support that configuration.  Under this model,
     only a handful programs ("git" wrapper itself and "gitk")
     should be installed on user's PATH and everything else goes
     under $(gitexecdir).  The user's interactive session MUST
     run "git foo" and not "git-foo" as bulk of the stuff is now
     outside of $PATH.  Fix any breakage if found (I do not
     expect many, but there might be some problems around object
     transfers, such as git-daemon spawning git-upload-pack, or
     git-push running git-receive-pack on the other end of the
     connection).
 (2) Audit all our scripts so that they run git commands with
     "git-foo" form, not "git foo" form.  As "git" wrapper is
     supposed to add $(gitexecdir) early in the $PATH while it
     runs itself and its subprocesses, they should find the true
     "git-foo" binary even after $(gitexecdir) is set outside of
     the usual $PATH.  Make sure things still work.

After the above two steps is done, we can be confident that the scripts will not be broken even if we allow a user to say something silly like "alias.cat-file = log --stat", as the scripts will never say "git cat-file" to cause the command to be expanded to "git log --stat" (instead they say "git-cat-file", thanks to your audit in step (2)), thusly avoid the confusion.

Previous: Francis MoreauNext: Jeff King
Message 5 of 11 in “git-send-email and aliases”
  1. Francis MoreauMar 26, 2007
  2. Junio C HamanoMar 26, 2007
  3. Francis MoreauMar 26, 2007
  4. Francis MoreauMar 27, 2007
  5. Junio C HamanoMar 27, 2007
  6. Jeff KingMar 27, 2007
  7. Junio C HamanoMar 27, 2007
  8. Jeff KingMar 27, 2007
  9. Junio C HamanoMar 28, 2007
  10. Francis MoreauMar 27, 2007
  11. Nicolas VilzMar 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.