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

Re: packObjectsHook and the git executable

From
Jeff King <peff@peff.net>
Date
Jan 30, 2020, 07:11 UTC
Message-ID
<20200130071102.GA2189233@coredump.intra.peff.net>
In-Reply-To
<CAGyf7-E==gzsvP-ckK0kwHD+f9pMmLBVpL4y2rC9tqk7ZiuW1g@mail.gmail.com>
On Wed, Jan 29, 2020 at 05:00:18PM -0800, Bryan Turner wrote:
Show 5 quoted lines
> In upload-pack.c, when Git invokes the packObjectsHook, it's
> hard-coded to pass "git". Unless it modifies the PATH environment
> variable, though, if the script were to invoke the provided command
> line as-is, it may end up running a different version of Git than the
> version being used to run upload-pack (or http-backend).

We do modify PATH to put git's exec-path at the start. This happens in setup_path(), which is called by the main "git" executable (so "git upload-pack" before it hits cmd_upload_pack()).

Programs which are invoked directly as "git-upload-pack" need to call that function on their own (which happens when upload-pack is invoked over ssh). But upload-pack and http-backend do that.

Show 5 quoted lines
> Is there any way the packObjectsHook could be passed the "right" git
> executable? Or am I missing some surrounding context that means
> executing "git" is somehow guaranteed to invoke the "right" binary?
> (Perhaps this same PATH-related caveat applies to other places where
> Git invokes itself recursively?)

I think all is working as designed, but if you have a reproducible case where we run the "wrong" git, I can take a look at it.

-Peff
Previous: Bryan TurnerNext: Bryan Turner
Message 2 of 4 in “packObjectsHook and the git executable”
  1. Bryan TurnerJan 30, 2020
  2. Jeff KingJan 30, 2020
  3. Bryan TurnerJan 30, 2020
  4. Jeff KingJan 30, 2020

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.