Re: [PATCH] gitweb: speed up project listing on large work trees by limiting find depth
- From
Shawn O. Pearce <spearce@spearce.org>
- Date
- Oct 17, 2007, 04:00 UTC
- Message-ID
- <20071017040028.GT13801@spearce.org>
- In-Reply-To
- <1192592725-28143-1-git-send-email-git@vicaya.com>
Luke Lu <git@vicaya.com> wrote:
> Resubmitting patch after passing gitweb regression tests.
...
Show 9 quoted lines
> @@ -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.