On Sun, Dec 30, 2018 at 10:34:26PM +0100, Ævar Arnfjörð Bjarmason wrote:

> 
> On Sun, Dec 30 2018, Xheroz 128 wrote:
> 
> > Currently, I’m doing my Final Year Project that requires a hook that 
> > executes automatically on the server side of the repository, before the 
> > objects been pulled to the client side, and after the objects have been 
> > pushed to the server side, which is "post-receive" hook. The post-receive 
> > hook work well for me, but I couldn’t find any hook to be executed 
> > immediately before an upload-operation is performed, i.e. before data is 
> > sent to the client.
> >
> > Why Git doesn't have a hook that executed immediately before the data is 
> > sent to the client? Any advice on getting this hook or any similar function 
> > of the hook?
> 
> We do not have such a pre-upload hook, but could have one. There's an
> old thread from 2011 detailing some potential downsides:
> 
> https://public-inbox.org/git/CAMK1S_jaEWV=f6ihkzw_6u5ncdw0bposnx-03w9bolofeee...@mail.gmail.com/
> 
> FWIW I think most servers who find themselves needing such a hook use it
> to e.g. log how many fetches a given repository might serve, and end up
> instead wrapping git commands in some custom shell.
> 
> It's also possible to imagine a much deeper integration for such a hook,
> e.g. something that would allow you to implement the functionality of
> the uploadpack.* variables and more in your own code, but I don't know
> if that's the sort of thing you're imagining.

Since that thread, we've added this config:

  uploadpack.packObjectsHook
             If this option is set, when upload-pack would run git
             pack-objects to create a packfile for a client, it will run
             this shell command instead. The pack-objects command and
             arguments it would have run (including the git pack-objects
             at the beginning) are appended to the shell command. The
             stdin and stdout of the hook are treated as if pack-objects
             itself was run. I.e., upload-pack will feed input intended
             for pack-objects to the hook, and expects a completed
             packfile on stdout.

             Note that this configuration variable is ignored if it is
             seen in the repository-level config (this is a safety
             measure against fetching from untrusted repositories).

So:

  1. That's some prior art for how an upload-pack hook could behave
     without introducing a security problem.

  2. Depending on what you want to do, this hook may be enough already.
     But it can't do everything (for instance, a fetch which results in
     no objects being requested would not trigger the hook at all, so if
     you were planning to keep stats about no-op fetches, it would not
     work).

-Peff

Reply via email to