From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-5.2 required=3.0 tests=ALL_TRUSTED,AWL,BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,RP_MATCHES_RCVD,URIBL_BLOCKED shortcircuit=no autolearn=unavailable autolearn_force=no version=3.4.0 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 8DC8B1FDFF for ; Sat, 21 May 2016 10:55:32 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH] import: avoid needless git update-server-info Date: Sat, 21 May 2016 10:55:32 +0000 Message-Id: <20160521105532.16659-1-e@80x24.org> List-Id: We don't need to update-server-info (or read-tree) if fast import was spawned for removals and no changes were made. --- lib/PublicInbox/Import.pm | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/lib/PublicInbox/Import.pm b/lib/PublicInbox/Import.pm index 1db2a0b..1afcf5d 100644 --- a/lib/PublicInbox/Import.pm +++ b/lib/PublicInbox/Import.pm @@ -51,6 +51,7 @@ sub gfi_start { $self->{out} = $out_w; $self->{lockfh} = $lockfh; $self->{pid} = $pid; + $self->{nchg} = 0; ($in_r, $out_w); } @@ -131,6 +132,7 @@ sub remove { "data 3\nrm\n\n", 'from ', ($parent ? $parent : $tip), "\n" or wfail; print $w "D $path\n\n" or wfail; + $self->{nchg}++; (($self->{tip} = ":$commit"), $cur); } @@ -191,6 +193,7 @@ sub add { print $w 'from ', ($parent ? $parent : $tip), "\n" or wfail; } print $w "M 100644 :$blob $path\n\n" or wfail; + $self->{nchg}++; $self->{tip} = ":$commit"; } @@ -202,14 +205,15 @@ sub done { my $pid = delete $self->{pid} or die 'BUG: missing {pid} when done'; waitpid($pid, 0) == $pid or die 'fast-import did not finish'; $? == 0 or die "fast-import failed: $?"; + my $nchg = delete $self->{nchg}; # for compatibility with existing ssoma installations # we can probably remove this entirely by 2020 my $git_dir = $self->{git}->{git_dir}; - my $index = "$git_dir/ssoma.index"; # XXX: change the following scope to: if (-e $index) # in 2018 or so.. my @cmd = ('git', "--git-dir=$git_dir"); - unless ($ENV{FAST}) { + if ($nchg && !$ENV{FAST}) { + my $index = "$git_dir/ssoma.index"; my $env = { GIT_INDEX_FILE => $index }; my @rt = (@cmd, qw(read-tree -m -v -i), $self->{ref}); $pid = spawn(\@rt, $env, undef); @@ -217,11 +221,13 @@ sub done { waitpid($pid, 0) == $pid or die 'read-tree did not finish'; $? == 0 or die "failed to update $git_dir/ssoma.index: $?\n"; } - - $pid = spawn([@cmd, 'update-server-info'], undef, undef); - defined $pid or die "spawn update-server-info failed: $!\n"; - waitpid($pid, 0) == $pid or die 'update-server-info did not finish'; - $? == 0 or die "failed to update-server-info: $?\n"; + if ($nchg) { + $pid = spawn([@cmd, 'update-server-info'], undef, undef); + defined $pid or die "spawn update-server-info failed: $!\n"; + waitpid($pid, 0) == $pid or + die 'update-server-info did not finish'; + $? == 0 or die "failed to update-server-info: $?\n"; + } my $lockfh = delete $self->{lockfh} or die "BUG: not locked: $!"; flock($lockfh, LOCK_UN) or die "unlock failed: $!";