Simple gitweb patch to speed up project listing on checked out repos with large trees. It was spending minutes in perl (5.8.8 macports). It's taking a fraction of a second after the patch. Resubmitted per Andreas Ericsson's advice. --- gitweb/gitweb.perl | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl index 3064298..a30eef9 100755 --- a/gitweb/gitweb.perl +++ b/gitweb/gitweb.perl @@ -1509,16 +1509,20 @@ sub git_get_projects_list { # remove the trailing "/" $dir =~ s!/+$!!; my $pfxlen = length("$dir"); + my $pfxdepth = ($dir =~ tr!/!!); File::Find::find({ follow_fast => 1, # follow symbolic links follow_skip => 2, # ignore duplicates + no_chdir => 1, # don't chdir into every directory dangling_symlinks => 0, # ignore dangling symlinks, silently wanted => sub { # skip project-list toplevel, if we get it. return if (m!^[/.]$!); # only directories can be git repositories return unless (-d $_); + # don't traverse too deep (Find is super slow on os x) + return if tr!/!! - $pfxdepth > 2 && ($File::Find::prune = 1); my $subdir = substr($File::Find::name, $pfxlen + 1); # we check related file in $projectroot -- 1.5.3.4 - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html