Subject: Re: auto-packing on kernel.org? please?

From: Chuck Lever <[email-masked]>
Date: Tue, 22 Nov 2005 13:18:53 -0500

Linus Torvalds wrote:
> 
> On Tue, 22 Nov 2005, Chuck Lever wrote:
> 
>>there are some things repacking does that breaks StGIT, though.
>>
>>git repack -d
>>
>>seems to remove old commits that StGIT was still depending on.
> 
> 
> If that is true, then "git-fsck-cache" probably also reports errors on a 
> StGIT repository. No? Basically, it implies that the tool doesn't know how 
> to find all the "heads".

indeed.  this is one area where StGIT is "not safe" to use with other 
porcelains.  these raw GIT commands can show a bunch of confusing 
"dangling references" type errors, or actually modify the index in ways 
that eliminate StGIT-related commits that aren't currently attached to 
any ancestry.  (i think Catalin mentioned these are related to the 
unapplied patches in a stack, but there could be others; see below).

> The preferred way would be to just list the references somewhere under 
> .git/refs/stgit, in which case fsck and repack should pick them up 
> automatically (so clearly stgit doesn't do that right now ;).

that could be an extremely large number of commits on a large repository 
with a lot of patches that have been worked on over a long period.  so 
whatever mechanism is created to do this needs to scale well in the 
number of commits.

> It also implies that doing a "git prune" will do horribly bad things to a 
> stgit repo, since it would remove all the objects that it thinks aren't 
> reachable..

yup.  been there, done that.  lucky for me i have an excellent hourly 
backup scheme.

>>git repack -a -n
>>
>>seems to work fine with StGIT,
> 
> 
> Well, it "works", but not "fine". Since it doesn't know about the stgit 
> objects, it won't ever pack them.

ah!

> But maybe that's what stgit wants (since they are "temporary"), but it 
> does mean that if you see a big advantage from packing, you might be 
> losing some of it.

actually, those commits aren't all that "temporary".  the 
history/revision feature i'm working on would like to maintain all the 
commits ever done to an StGIT patch.

the only time you can throw away such commits is when the patch is 
deleted or when it is finally committed to the repository via "stg 
commit".  otherwise, keeping these commits in a pack would be quite a 
good thing.

maybe the first thing to do is to get a basic understanding of an StGIT 
commit's lifetime.