Re: fetching packs and storing them as packs
- From
- Eran Tromer <git2eran@tromer.org>
- Date
- Oct 27, 2006, 02:42 UTC
- Message-ID
- <45417205.6020805@tromer.org>
- In-Reply-To
- <20061027014229.GA28407@spearce.org>
On 2006-10-27 03:42, Shawn Pearce wrote:
Show 6 quoted lines
> Nicolas Pitre <nico@cam.org> wrote: >> On Fri, 27 Oct 2006, Eran Tromer wrote: >> Well, the race does exist. Don't do repack -a -d at the same time then. > > This is an issue for "central" repositories that people push into > and which might be getting repacked according to a cronjob.
AFAICT, the bottom line of the "Re: auto-packing on kernel.org? please?" thread last October was "sure, go ahead".
> Unfortunately I don't have a solution. I tried to come up with > one but didn't. :-)
Here's one way to do it. Change git-repack to follow references under $GIT_DIR/tmp/refs/ too. To receive or fetch a pack: 1. Add references to the new heads in `mktemp $GIT_DIR/tmp/refs/XXXXXX`. 2. Put the new .pack under $GIT_DIR/objects/pack/. 3. Put the new .idx under $GIT_DIR/objects/pack/. 4. Update the relevant heads under $GIT_DIR/refs/. 5. Delete the references from step 1.
This is repack-safe and never corrupts the repo. The worst-case failure mode is if you die before cleaning the refs from $GIT_DIR/tmp/refs. That may mean some packed objects will never be removed by "repack -a -d" even if they lose all references from $GIT_DIR/refs, so do "tmpwatch -m 240 $GIT_DIR/tmp/refs" to take care of that.
Eran