Re: [QUESTION]: How to get uploading git objects via a git command in a pre-receive-hook

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, Jun 29, 2024 at 06:29:41PM +0200, Christian Couder wrote:

> > I want to check the uploaded Git LFS objects in the pre-receive hook
> > of the Git server. Assuming that the Git repository during the upload
> > process is A.git, my current approach is to create an empty repository
> > B.git and then use
> > GIT_ALTERNATE_OBJECT_DIRECTORIES="A.git/objects/tmp_objdir-incoming-**"
> > followed by executing git -C B.git cat-file --batch-check
> > --batch-all-objects to obtain the objects being uploaded, then filter
> > out the LFS objects. This process is very time-consuming, taking
> > roughly more than 10 seconds. I wonder if there's a simpler method?
> 
> I wonder if it's possible to use `git verify-pack --verbose` on the
> received packfile.

By the time the pre-receive hook is running, we've indexed the pack. So
you can just find the pack in the tmpdir (via GIT_QUARANTINE_PATH) and
run "git show-index" against it, which is much faster. Keeping in mind
that the pack could also have been exploded to loose objects if it's
small, in which case you'd need to use "find" or similar to enumerate
the loose object files.

In theory you could use "cat-file --batch-all-objects", but I suspect
the reason it takes a long time is that it has access to all of the
original objects in the repo, too (and so is enumerating those). You
might be able to get away with unsetting various GIT_* variables to
avoid that, but I think the result would be kind of fragile.

-Peff




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux