git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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

From
Linus Torvalds <torvalds@osdl.org>
Date
Nov 21, 2005, 19:24 UTC
Message-ID
<Pine.LNX.4.64.0511211110480.13959@g5.osdl.org>
In-Reply-To
<20051121190151.GA2568@hpsvcnb.fc.hp.com>
On Mon, 21 Nov 2005, Carl Baldwin wrote:
Show 16 quoted lines
>
> I have a question about automatic repacking.
> 
> I am thinking of turning something like Linus' repacking heuristic loose
> on my repositories.  I just want to make sure it is as safe as possible.
> 
> At the core of the incremental and full repack strategies are these
> statements.
> 
> Incremental...
> > 		git repack &&
> > 			git prune-packed
> 
> Full...
> > 		git repack -a -d &&
> > 			git prune-packed

NOTE! Since that email, "git repack" has gotten a "local" option (-l), which is very useful if the repositories have pointers to alternates.

So do
	git repack -l

instead, to get much better packs (and "-a -d" for the full case, of course).

Other that than, the old email suggestion should still be fine.
Show 7 quoted lines
> Are there some built in safety checks in 'git repack' and/or 'git
> prune-packed' to guard against corruption?  In the long run, I would
> feel more comfortable with somelike like this:
> 
> git repack
> git verify-pack <new pack>
> git prune-packed

You can certainly do that if you are nervous. It might even be a good idea: just for fun, I just did

	git clone -l git git-clone
	cd git-clone
	# pick an object at random
	rm .git/objects/f7/c3d39fe3db6da3a307da385a7a1cb563ed15f7
	git repack -a -d
and it said:
	error: Could not read f7c3d39fe3db6da3a307da385a7a1cb563ed15f7
	fatal: bad tree object f7c3d39fe3db6da3a307da385a7a1cb563ed15f7
but then it created the pack _anyway_, and said:
	Packing 27 objects
	Pack pack-13bfca704078175c1c1c59964553b14f7b952651 created.
and happily removed all the old ones.
So right now, repacking a broken archive can actually break it even more.

NOTE! Your "git verify-pack" wouldn't even catch this: the _pack_ is fine, it's just incomplete.

Of course, this only happens if the repository was broken to begin with, so arguably it's not that bad. But it does show that git-repack should be more careful and return an error more aggressively.

Can anybody tell me how to do that sanely? Right now we do
	..
	name=$(git-rev-list --objects $rev_list $(git-rev-parse $rev_parse) |
	        git-pack-objects --non-empty $pack_objects .tmp-pack) ||
	        exit 1
	..

and the thing is, the "git-pack-objects" thing is happy, it's the "git-rev-list" that fails. So because the last command in the pipeline returns ok, we think it all is ok..

(This is one of the reasons I much prefer working in C over working in shell: it may be twenty times more lines, but when you have a problem, the fix is always obvious..)

Anyway, with that fixed, a "git repack" in many ways would be a mini-fsck, so it should be very safe in general. Modulo any other bugs like the above.

		Linus
Previous: Carl BaldwinNext: Junio C Hamano
Message 3 of 33 in “auto-packing on kernel.org? please?”
  1. Linus TorvaldsOct 13, 2005
  2. Carl BaldwinNov 21, 2005
  3. Linus TorvaldsNov 21, 2005
  4. Junio C HamanoNov 21, 2005
  5. Linus TorvaldsNov 21, 2005
  6. Junio C HamanoNov 21, 2005
  7. Chuck LeverNov 22, 2005
  8. Linus TorvaldsNov 22, 2005
  9. Catalin MarinasNov 22, 2005
  10. Linus TorvaldsNov 22, 2005
  11. Chuck LeverNov 22, 2005
  12. Catalin MarinasNov 23, 2005
  13. Carl BaldwinNov 22, 2005
  14. Linus TorvaldsNov 22, 2005
  15. Linus TorvaldsOct 13, 2005
  16. Dirk BehmeOct 16, 2005
  17. Daniel BarkalowOct 16, 2005
  18. Nick HengeveldOct 16, 2005
  19. Brian GerstOct 16, 2005
  20. Junio C HamanoOct 16, 2005
  21. Nick HengeveldOct 16, 2005
  22. Junio C HamanoOct 16, 2005
  23. Nick HengeveldOct 17, 2005
  24. Junio C HamanoOct 17, 2005
  25. Nick HengeveldOct 17, 2005
  26. Junio C HamanoOct 17, 2005
  27. Daniel BarkalowOct 17, 2005
  28. Linus TorvaldsOct 17, 2005
  29. Nick HengeveldOct 17, 2005
  30. Daniel BarkalowOct 17, 2005
  31. Johannes SchindelinOct 16, 2005
  32. Brian GerstOct 16, 2005
  33. Catalin MarinasNov 23, 2005

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.