From: Shawn O. Pearce Date: Wed, 17 Oct 2007 04:00:28 GMT Subject: Re: [PATCH] gitweb: speed up project listing on large work trees by limiting find depth Message-ID: <20071017040028.GT13801@spearce.org> In-Reply-To: <1192592725-28143-1-git-send-email-git@vicaya.com> Luke Lu wrote: > Resubmitting patch after passing gitweb regression tests. ... > @@ -1519,6 +1524,11 @@ sub git_get_projects_list { > return if (m!^[/.]$!); > # only directories can be git repositories > return unless (-d $_); > + # don't traverse too deep (Find is super slow on os x) > + if (($File::Find::name =~ tr!/!!) - $pfxdepth > $project_maxdepth) { > + $File::Find::prune = 1; > + return; > + } Thanks. I'm squashing this into your patch. I'm not sure what the impact is of altering $File::Find::name in the middle of the find algorithm and I'm not sure we want to figure that out later. We found out the hard way today that altering a non-local'd $_ in the function is what was causing the breakage. diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl index 48e21da..9f47c3f 100755 --- a/gitweb/gitweb.perl +++ b/gitweb/gitweb.perl @@ -1525,7 +1525,8 @@ sub git_get_projects_list { # only directories can be git repositories return unless (-d $_); # don't traverse too deep (Find is super slow on os x) - if (($File::Find::name =~ tr!/!!) - $pfxdepth > $project_maxdepth) { + local $_ = $File::Find::name; + if (tr!/!! - $pfxdepth > $project_maxdepth) { $File::Find::prune = 1; return; } -- Shawn.