Skip to content

Commit

Permalink
cvsserver: checkout faster by sending files in a sensible order
Browse files Browse the repository at this point in the history
Just by sending the files in an ordered fashion, clients can process them
much faster. And we can optimize our check of whether we created this
directory already -- faster.

Timings for a checkout on a commandline cvs client for a project with
~13K files totalling ~100MB:

Unsorted:
  603.12 real        16.89 user        42.88 sys

Sorted:
  298.19 real        26.37 user        42.42 sys
  • Loading branch information
Martin Langhoff committed Mar 3, 2006
1 parent df45467 commit 5398fed
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions git-cvsserver.perl
Original file line number Diff line number Diff line change
Expand Up @@ -584,6 +584,7 @@ sub req_co
print "E cvs checkout: Updating $checkout_path\n";

my %seendirs = ();
my $lastdir ='';

foreach my $git ( @{$updater->gethead} )
{
Expand All @@ -603,7 +604,8 @@ sub req_co
print "M U $checkout_path/$git->{name}\n";
}

if (length($git->{dir}) && $git->{dir} ne './' && !exists($seendirs{$git->{dir}})) {
if (length($git->{dir}) && $git->{dir} ne './'
&& $git->{dir} ne $lastdir && !exists($seendirs{$git->{dir}})) {

# Eclipse seems to need the Clear-sticky command
# to prepare the 'Entries' file for the new directory.
Expand All @@ -612,6 +614,7 @@ sub req_co
print "Clear-static-directory $module/$git->{dir}\n";
print $state->{CVSROOT} . "/$module/$git->{dir}\n";
print "E cvs checkout: Updating /$module/$git->{dir}\n";
$lastdir = $git->{dir};
$seendirs{$git->{dir}} = 1;
}

Expand Down Expand Up @@ -2349,7 +2352,7 @@ sub gethead

return $self->{gethead_cache} if ( defined ( $self->{gethead_cache} ) );

my $db_query = $self->{dbh}->prepare_cached("SELECT name, filehash, mode, revision, modified, commithash, author FROM head",{},1);
my $db_query = $self->{dbh}->prepare_cached("SELECT name, filehash, mode, revision, modified, commithash, author FROM head ORDER BY name ASC",{},1);
$db_query->execute();

my $tree = [];
Expand Down

0 comments on commit 5398fed

Please sign in to comment.