Skip to content

Commit

Permalink
cvsimport: keep one index per branch during import
Browse files Browse the repository at this point in the history
With this patch we have a speedup and much lower IO when
importing trees with many branches. Instead of forcing
index re-population for each branch switch, we keep
many index files around, one per branch.

Signed-off-by: Martin Langhoff <martin@catalyst.net.nz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Martin Langhoff authored and Junio C Hamano committed Jun 17, 2006
1 parent 2f57c69 commit 8f73264
Showing 1 changed file with 30 additions and 7 deletions.
37 changes: 30 additions & 7 deletions git-cvsimport.perl
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -465,10 +465,15 @@ ($$)
$ENV{"GIT_DIR"} = $git_dir;
my $orig_git_index;
$orig_git_index = $ENV{GIT_INDEX_FILE} if exists $ENV{GIT_INDEX_FILE};
my ($git_ih, $git_index) = tempfile('gitXXXXXX', SUFFIX => '.idx',
DIR => File::Spec->tmpdir());
close ($git_ih);
$ENV{GIT_INDEX_FILE} = $git_index;

my %index; # holds filenames of one index per branch
{ # init with an index for origin
my ($fh, $fn) = tempfile('gitXXXXXX', SUFFIX => '.idx',
DIR => File::Spec->tmpdir());
close ($fh);
$index{$opt_o} = $fn;
}
$ENV{GIT_INDEX_FILE} = $index{$opt_o};
unless(-d $git_dir) {
system("git-init-db");
die "Cannot init the GIT db at $git_tree: $?\n" if $?;
Expand Down Expand Up @@ -496,6 +501,13 @@ ($$)
$tip_at_start = `git-rev-parse --verify HEAD`;

# populate index
unless ($index{$last_branch}) {
my ($fh, $fn) = tempfile('gitXXXXXX', SUFFIX => '.idx',
DIR => File::Spec->tmpdir());
close ($fh);
$index{$last_branch} = $fn;
}
$ENV{GIT_INDEX_FILE} = $index{$last_branch};
system('git-read-tree', $last_branch);
die "read-tree failed: $?\n" if $?;

Expand Down Expand Up @@ -805,8 +817,17 @@ sub commit {
}
if(($ancestor || $branch) ne $last_branch) {
print "Switching from $last_branch to $branch\n" if $opt_v;
system("git-read-tree", $branch);
die "read-tree failed: $?\n" if $?;
unless ($index{$branch}) {
my ($fh, $fn) = tempfile('gitXXXXXX', SUFFIX => '.idx',
DIR => File::Spec->tmpdir());
close ($fh);
$index{$branch} = $fn;
$ENV{GIT_INDEX_FILE} = $index{$branch};
system("git-read-tree", $branch);
die "read-tree failed: $?\n" if $?;
} else {
$ENV{GIT_INDEX_FILE} = $index{$branch};
}
}
$last_branch = $branch if $branch ne $last_branch;
$state = 9;
Expand Down Expand Up @@ -870,7 +891,9 @@ sub commit {
}
commit() if $branch and $state != 11;
unlink($git_index);
foreach my $git_index (values %index) {
unlink($git_index);
}
if (defined $orig_git_index) {
$ENV{GIT_INDEX_FILE} = $orig_git_index;
Expand Down

0 comments on commit 8f73264

Please sign in to comment.