mirror of
https://github.com/git/git.git
synced 2025-03-27 20:18:48 +00:00
gitweb: Allow forks with project list file
Make it possible to use the forks feature even when reading the list of projects from a file, by creating a list of known prefixes as we go. Forks have to be listed after the main project in order to be recognised as such. Signed-off-by: Frank Lichtenheld <frank@lichtenheld.de> Acked-by: Petr Baudis <pasky@suse.cz> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
f8ce182992
commit
c2b8b13494
@ -176,8 +176,8 @@ our %feature = (
|
|||||||
# projects matching $projname/*.git will not be shown in the main
|
# projects matching $projname/*.git will not be shown in the main
|
||||||
# projects list, instead a '+' mark will be added to $projname
|
# projects list, instead a '+' mark will be added to $projname
|
||||||
# there and a 'forks' view will be enabled for the project, listing
|
# there and a 'forks' view will be enabled for the project, listing
|
||||||
# all the forks. This feature is supported only if project list
|
# all the forks. If project list is taken from a file, forks have
|
||||||
# is taken from a directory, not file.
|
# to be listed after the main project.
|
||||||
|
|
||||||
# To enable system wide have in $GITWEB_CONFIG
|
# To enable system wide have in $GITWEB_CONFIG
|
||||||
# $feature{'forks'}{'default'} = [1];
|
# $feature{'forks'}{'default'} = [1];
|
||||||
@ -1047,6 +1047,8 @@ sub git_get_projects_list {
|
|||||||
$filter ||= '';
|
$filter ||= '';
|
||||||
$filter =~ s/\.git$//;
|
$filter =~ s/\.git$//;
|
||||||
|
|
||||||
|
my ($check_forks) = gitweb_check_feature('forks');
|
||||||
|
|
||||||
if (-d $projects_list) {
|
if (-d $projects_list) {
|
||||||
# search in directory
|
# search in directory
|
||||||
my $dir = $projects_list . ($filter ? "/$filter" : '');
|
my $dir = $projects_list . ($filter ? "/$filter" : '');
|
||||||
@ -1054,8 +1056,6 @@ sub git_get_projects_list {
|
|||||||
$dir =~ s!/+$!!;
|
$dir =~ s!/+$!!;
|
||||||
my $pfxlen = length("$dir");
|
my $pfxlen = length("$dir");
|
||||||
|
|
||||||
my ($check_forks) = gitweb_check_feature('forks');
|
|
||||||
|
|
||||||
File::Find::find({
|
File::Find::find({
|
||||||
follow_fast => 1, # follow symbolic links
|
follow_fast => 1, # follow symbolic links
|
||||||
dangling_symlinks => 0, # ignore dangling symlinks, silently
|
dangling_symlinks => 0, # ignore dangling symlinks, silently
|
||||||
@ -1081,7 +1081,9 @@ sub git_get_projects_list {
|
|||||||
# 'git%2Fgit.git Linus+Torvalds'
|
# 'git%2Fgit.git Linus+Torvalds'
|
||||||
# 'libs%2Fklibc%2Fklibc.git H.+Peter+Anvin'
|
# 'libs%2Fklibc%2Fklibc.git H.+Peter+Anvin'
|
||||||
# 'linux%2Fhotplug%2Fudev.git Greg+Kroah-Hartman'
|
# 'linux%2Fhotplug%2Fudev.git Greg+Kroah-Hartman'
|
||||||
|
my %paths;
|
||||||
open my ($fd), $projects_list or return;
|
open my ($fd), $projects_list or return;
|
||||||
|
PROJECT:
|
||||||
while (my $line = <$fd>) {
|
while (my $line = <$fd>) {
|
||||||
chomp $line;
|
chomp $line;
|
||||||
my ($path, $owner) = split ' ', $line;
|
my ($path, $owner) = split ' ', $line;
|
||||||
@ -1094,11 +1096,27 @@ sub git_get_projects_list {
|
|||||||
# looking for forks;
|
# looking for forks;
|
||||||
my $pfx = substr($path, 0, length($filter));
|
my $pfx = substr($path, 0, length($filter));
|
||||||
if ($pfx ne $filter) {
|
if ($pfx ne $filter) {
|
||||||
next;
|
next PROJECT;
|
||||||
}
|
}
|
||||||
my $sfx = substr($path, length($filter));
|
my $sfx = substr($path, length($filter));
|
||||||
if ($sfx !~ /^\/.*\.git$/) {
|
if ($sfx !~ /^\/.*\.git$/) {
|
||||||
next;
|
next PROJECT;
|
||||||
|
}
|
||||||
|
} elsif ($check_forks) {
|
||||||
|
PATH:
|
||||||
|
foreach my $filter (keys %paths) {
|
||||||
|
# looking for forks;
|
||||||
|
my $pfx = substr($path, 0, length($filter));
|
||||||
|
if ($pfx ne $filter) {
|
||||||
|
next PATH;
|
||||||
|
}
|
||||||
|
my $sfx = substr($path, length($filter));
|
||||||
|
if ($sfx !~ /^\/.*\.git$/) {
|
||||||
|
next PATH;
|
||||||
|
}
|
||||||
|
# is a fork, don't include it in
|
||||||
|
# the list
|
||||||
|
next PROJECT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (check_export_ok("$projectroot/$path")) {
|
if (check_export_ok("$projectroot/$path")) {
|
||||||
@ -1106,7 +1124,9 @@ sub git_get_projects_list {
|
|||||||
path => $path,
|
path => $path,
|
||||||
owner => to_utf8($owner),
|
owner => to_utf8($owner),
|
||||||
};
|
};
|
||||||
push @list, $pr
|
push @list, $pr;
|
||||||
|
(my $forks_path = $path) =~ s/\.git$//;
|
||||||
|
$paths{$forks_path}++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
close $fd;
|
close $fd;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user