This is a preparatory patch for separation of project list and frontpage
actions; it factors out most logic of git_project_list():
* git_project_list_all() as a git_project_list_body() wrapper for
complete project listing
* git_project_search_form() for printing the project search form
Also, git_project_list_ctags() is now separated out of
git_project_list_body(), showing tag cloud for given project list.
Signed-off-by: Petr Baudis <pasky@xxxxxxx>
---
gitweb/gitweb.perl | 69 +++++++++++++++++++++++++++++++---------------------
1 files changed, 41 insertions(+), 28 deletions(-)
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index e4cbfc3..e82ca45 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -4201,10 +4201,9 @@ sub git_patchset_body {
# project in the list, removing invalid projects from returned list
# NOTE: modifies $projlist, but does not remove entries from it
sub fill_project_list_info {
- my ($projlist, $check_forks) = @_;
+ my ($projlist, $check_forks, $show_ctags) = @_;
my @projects;
- my $show_ctags = gitweb_check_feature('ctags');
PROJECT:
foreach my $pr (@$projlist) {
my (@activity) = git_get_last_activity($pr->{'path'});
@@ -4254,12 +4253,26 @@ sub print_sort_th {
}
}
+sub git_project_list_ctags {
+ my ($projects) = @_;
+
+ my %ctags;
+ foreach my $p (@$projects) {
+ foreach my $ct (keys %{$p->{'ctags'}}) {
+ $ctags{$ct} += $p->{'ctags'}->{$ct};
+ }
+ }
+ my $cloud = git_populate_project_tagcloud(\%ctags);
+ print git_show_project_tagcloud($cloud, 64);
+}
+
sub git_project_list_body {
# actually uses global variable $project
my ($projlist, $order, $from, $to, $extra, $no_header) = @_;
my $check_forks = gitweb_check_feature('forks');
- my @projects = fill_project_list_info($projlist, $check_forks);
+ my $show_ctags = gitweb_check_feature('ctags');
+ my @projects = fill_project_list_info($projlist, $check_forks, $show_ctags);
$order ||= $default_projects_order;
$from = 0 unless defined $from;
@@ -4278,16 +4291,8 @@ sub git_project_list_body {
@projects = sort {$a->{$oi->{'key'}} <=> $b->{$oi->{'key'}}} @projects;
}
- my $show_ctags = gitweb_check_feature('ctags');
if ($show_ctags) {
- my %ctags;
- foreach my $p (@projects) {
- foreach my $ct (keys %{$p->{'ctags'}}) {
- $ctags{$ct} += $p->{'ctags'}->{$ct};
- }
- }
- my $cloud = git_populate_project_tagcloud(\%ctags);
- print git_show_project_tagcloud($cloud, 64);
+ git_project_list_ctags(\@projects);
}
print "<table class=\"project_list\">\n";
@@ -4361,6 +4366,28 @@ sub git_project_list_body {
print "</table>\n";
}
+sub git_project_search_form {
+ print $cgi->startform(-method => "get") .
+ "<p class=\"projsearch\">Search:\n" .
+ $cgi->textfield(-name => "s", -value => $searchtext) . "\n" .
+ "</p>" .
+ $cgi->end_form() . "\n";
+}
+
+sub git_project_list_all {
+ my $order = $input_params{'order'};
+ if (defined $order && $order !~ m/none|project|descr|owner|age/) {
+ die_error(400, "Unknown order parameter");
+ }
+
+ my @list = git_get_projects_list();
+ if (!@list) {
+ die_error(404, "No projects found");
+ }
+
+ git_project_list_body(\@list, $order);
+}
+
sub git_shortlog_body {
# uses global variable $project
my ($commitlist, $from, $to, $refs, $extra) = @_;
@@ -4630,28 +4657,14 @@ sub git_search_grep_body {
## actions
sub git_project_list {
- my $order = $input_params{'order'};
- if (defined $order && $order !~ m/none|project|descr|owner|age/) {
- die_error(400, "Unknown order parameter");
- }
-
- my @list = git_get_projects_list();
- if (!@list) {
- die_error(404, "No projects found");
- }
-
git_header_html();
if (-f $home_text) {
print "<div class=\"index_include\">\n";
insert_file($home_text);
print "</div>\n";
}
- print $cgi->startform(-method => "get") .
- "<p class=\"projsearch\">Search:\n" .
- $cgi->textfield(-name => "s", -value => $searchtext) . "\n" .
- "</p>" .
- $cgi->end_form() . "\n";
- git_project_list_body(\@list, $order);
+ git_project_search_form();
+ git_project_list_all();
git_footer_html();
}