git-svn: make --repack work consistently between fetch and multi-fetch

Since fetch reforks itself at most every 1000 revisions, we
need to update the counter in the parent process to have a
working count if we set our repack interval to be > ~1000
revisions.  multi-fetch has always done this correctly
because of an extra process; now fetch uses the extra process;
as well.

While we're at it, only compile the $sha1 regex that checks for
repacking once.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Eric Wong 2007-01-04 18:09:56 -08:00 committed by Junio C Hamano
parent 0d313b2b7b
commit 2a3240beaa

View File

@ -102,7 +102,7 @@ my %cmt_opts = ( 'edit|e' => \$_edit,
); );
my %cmd = ( my %cmd = (
fetch => [ \&fetch, "Download new revisions from SVN", fetch => [ \&cmd_fetch, "Download new revisions from SVN",
{ 'revision|r=s' => \$_revision, %fc_opts } ], { 'revision|r=s' => \$_revision, %fc_opts } ],
init => [ \&init, "Initialize a repo for tracking" . init => [ \&init, "Initialize a repo for tracking" .
" (requires URL argument)", " (requires URL argument)",
@ -293,6 +293,10 @@ sub init {
setup_git_svn(); setup_git_svn();
} }
sub cmd_fetch {
fetch_child_id($GIT_SVN, @_);
}
sub fetch { sub fetch {
check_upgrade_needed(); check_upgrade_needed();
$SVN_URL ||= file_to_s("$GIT_SVN_DIR/info/url"); $SVN_URL ||= file_to_s("$GIT_SVN_DIR/info/url");
@ -836,7 +840,6 @@ sub fetch_child_id {
my $ref = "$GIT_DIR/refs/remotes/$id"; my $ref = "$GIT_DIR/refs/remotes/$id";
defined(my $pid = open my $fh, '-|') or croak $!; defined(my $pid = open my $fh, '-|') or croak $!;
if (!$pid) { if (!$pid) {
$_repack = undef;
$GIT_SVN = $ENV{GIT_SVN_ID} = $id; $GIT_SVN = $ENV{GIT_SVN_ID} = $id;
init_vars(); init_vars();
fetch(@_); fetch(@_);
@ -844,7 +847,7 @@ sub fetch_child_id {
} }
while (<$fh>) { while (<$fh>) {
print $_; print $_;
check_repack() if (/^r\d+ = $sha1/); check_repack() if (/^r\d+ = $sha1/o);
} }
close $fh or croak $?; close $fh or croak $?;
} }
@ -1407,7 +1410,6 @@ sub git_commit {
# this output is read via pipe, do not change: # this output is read via pipe, do not change:
print "r$log_msg->{revision} = $commit\n"; print "r$log_msg->{revision} = $commit\n";
check_repack();
return $commit; return $commit;
} }