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

Re: Sending informational messages from upload-pack

From
Jeff King <peff@peff.net>
Date
Feb 20, 2017, 19:21 UTC
Message-ID
<20170220192103.6v66lpghgir3erhn@sigill.intra.peff.net>
In-Reply-To
<148761588216.31363.15518967793189077139@typhoon>
On Mon, Feb 20, 2017 at 07:38:02PM +0100, Lukas Fleischer wrote:
Show 7 quoted lines
> It would be handy to be able to show a message to the user when
> cloning/fetching from a repository (e.g. to show a warning if a
> repository is deprecated). This should technically already be possible
> using the current pack protocol and sidebands. However, to my knowledge,
> there is no easy way to configure this on the server side; writing a
> wrapper around git-upload-pack(1) or replacing git-upload-pack(1) seem
> to be the only options.

I wouldn't recommend wrapping upload-pack. You don't know you have a sideband until partway through the upload-pack conversation. And clients do not expect sideband at all until we get to the pack-sending part of the protocol (I think; I just quickly verified the location of the demuxer async code in fetch-pack.c, but I didn't dig into it in depth).

So I don't think you can do a MOTD or similar in a backwards-compatible way. You're only allowed to talk if the conversation results in an actual pack being sent.

Show 5 quoted lines
> What I have in mind is something like a post-upload hook whose stdout
> and stderr are redirected to sideband 2 and 3, respectively. The commit
> message of 20b20a22f (upload-pack: provide a hook for running
> pack-objects, 2016-05-18) suggests that such a hook should be
> implemented as a "config variable hook" rather than a regular hook.

Yeah, because of the "upload-pack is special and untrusted" rule, this can't be a regular hook. I think the config mechanism used by 20b20a22f would be the right approach.

If my fetch-pack assertion above is right, technically the hook added by 20b20a22f is sufficient for your purposes, if your hook looks like:

  echo >&2 "pre-pack message"
  git pack-objects "$@"
  echo >72 "post-pack message"

but I would not be opposed to having pre-/post- hooks that run separately, if only for the convenience of the admin.

Show 5 quoted lines
> One could think of additional parameters passed to such a hook. For the
> purposes I intend to use this, no parameters are needed. However, a
> fixed per-repository MOTD would be too inflexible since we are using
> namespaces and database accesses to determine whether a repository is
> "deprecated".

There was a proposed post-upload-pack hook a long time ago that collected clone/fetch stats, and we used it at GitHub for many years. These days we use something much more invasive that dumps stats from every git invocation over a Unix socket.

> Am I missing any "easy" already supported way to add such messages
> without patching Git or writing a git-upload-pack(1) wrapper? If not,
> does this sound general and useful enough to become an official feature?
> Are there any alternative suggestions on how to display such messages?

I don't think there's any other mechanism to do what you're asking, aside from the hook in 20b20a22f.

-Peff
Previous: Lukas FleischerNext: Lukas Fleischer
Message 2 of 3 in “Sending informational messages from upload-pack”
  1. Lukas FleischerFeb 20, 2017
  2. Jeff KingFeb 20, 2017
  3. Lukas FleischerFeb 21, 2017

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.