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