gitweb: Use File::Find::find in git_get_projects_list
Earlier code to get list of projects when $projects_list is a directory (e.g. when it is equal to $projectroot) had a hardcoded flat (one level) list of directories. Allow for projects to be in subdirectories also for $projects_list being a directory by using File::Find. Signed-off-by: Jakub Narebski <jnareb@gmail.com> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
5b6df8e45f
commit
c0011ff8c8
@ -715,16 +715,26 @@ sub git_get_projects_list {
|
||||
if (-d $projects_list) {
|
||||
# search in directory
|
||||
my $dir = $projects_list;
|
||||
opendir my ($dh), $dir or return undef;
|
||||
while (my $dir = readdir($dh)) {
|
||||
if (-e "$projectroot/$dir/HEAD") {
|
||||
my $pr = {
|
||||
path => $dir,
|
||||
};
|
||||
push @list, $pr
|
||||
my $pfxlen = length("$dir");
|
||||
|
||||
File::Find::find({
|
||||
follow_fast => 1, # follow symbolic links
|
||||
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 $_);
|
||||
|
||||
my $subdir = substr($File::Find::name, $pfxlen + 1);
|
||||
# we check related file in $projectroot
|
||||
if (-e "$projectroot/$subdir/HEAD") {
|
||||
push @list, { path => $subdir };
|
||||
$File::Find::prune = 1;
|
||||
}
|
||||
}
|
||||
closedir($dh);
|
||||
},
|
||||
}, "$dir");
|
||||
|
||||
} elsif (-f $projects_list) {
|
||||
# read from file(url-encoded):
|
||||
# 'git%2Fgit.git Linus+Torvalds'
|
||||
|
Loading…
Reference in New Issue
Block a user