Skip to content

Commit

Permalink
Run "git repack -a -d" once more at end, if there's 1MB or more of no…
Browse files Browse the repository at this point in the history
…t-packed data.

Although I converted upstream coreutils to git last month, I just
reconverted coreutils once again, as a test, and ended up with a
git repository of about 130MB (contrast with my packed git repo of
size 52MB).  That was because there were a lot of commits (but < 1024)
after the final automatic "git-repack -a -d".

Running a final
  git-repack -a -d && git-prune-packed
cut the final repository size down to the expected size.

So this looks like an easy way to improve git-cvsimport.
Just run "git repack ..." at the end if there's more than
some reasonable amount of not-packed data.

My choice of 1MB is a little arbitrarily.  I wouldn't mind missing
the minimal repo size by 1MB.  At the other end of the spectrum,
it's probably not worthwhile to pack everything when the total
repository size is less than 1MB.

Here's the patch:

Signed-off-by: Jim Meyering <jim@meyering.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Jim Meyering authored and Junio C Hamano committed Nov 15, 2006
1 parent faa1bbf commit efe4abd
Showing 1 changed file with 10 additions and 0 deletions.
10 changes: 10 additions & 0 deletions git-cvsimport.perl
Original file line number Diff line number Diff line change
Expand Up @@ -876,6 +876,16 @@ sub commit {
}
commit() if $branch and $state != 11;
# The heuristic of repacking every 1024 commits can leave a
# lot of unpacked data. If there is more than 1MB worth of
# not-packed objects, repack once more.
my $line = `git-count-objects`;
if ($line =~ /^(\d+) objects, (\d+) kilobytes$/) {
my ($n_objects, $kb) = ($1, $2);
1024 < $kb
and system("git repack -a -d");
}
foreach my $git_index (values %index) {
if ($git_index ne '.git/index') {
unlink($git_index);
Expand Down

0 comments on commit efe4abd

Please sign in to comment.