Signed-off-by: Jakub Narebski <jnareb@xxxxxxxxx> --- The API was tweaked to better fit the following patch. This patch probably needs longer commit message... or squashing with the following commit. gitweb/gitweb.perl | 39 +++++++++++++++++++++++++++++---------- 1 files changed, 29 insertions(+), 10 deletions(-) diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl index 3e69705..4c66307 100755 --- a/gitweb/gitweb.perl +++ b/gitweb/gitweb.perl @@ -4988,35 +4988,54 @@ sub git_project_search_form { print "</div>\n"; } +# entry for given $key doesn't need filling if either $key already exists +# in $project_info hash, or we are interested only in subset of keys +# and given key is not among @fill_only. +sub project_info_needs_filling { + my ($project_info, $key, @fill_only) = @_; + + if (!@fill_only || # we are interested in everything + grep { $key eq $_ } @fill_only) { # or key is in @fill_only + return !exists $project_info->{$key}; + } + return 0; +} + # fills project list info (age, description, owner, category, forks) # for each project in the list, removing invalid projects from -# returned list +# returned list, or fill only specified info (removing invalid projects +# only when filling 'age'). +# # NOTE: modifies $projlist, but does not remove entries from it sub fill_project_list_info { - my $projlist = shift; + my ($projlist, @fill_only) = @_; my @projects; my $show_ctags = gitweb_check_feature('ctags'); PROJECT: foreach my $pr (@$projlist) { - my (@activity) = git_get_last_activity($pr->{'path'}); - unless (@activity) { - next PROJECT; + if (project_info_needs_filling($pr, 'age', @fill_only)) { + my (@activity) = git_get_last_activity($pr->{'path'}); + unless (@activity) { + next PROJECT; + } + ($pr->{'age'}, $pr->{'age_string'}) = @activity; } - ($pr->{'age'}, $pr->{'age_string'}) = @activity; - if (!defined $pr->{'descr'}) { + if (project_info_needs_filling($pr, 'descr', @fill_only)) { my $descr = git_get_project_description($pr->{'path'}) || ""; $descr = to_utf8($descr); $pr->{'descr_long'} = $descr; $pr->{'descr'} = chop_str($descr, $projects_list_description_width, 5); } - if (!defined $pr->{'owner'}) { + if (project_info_needs_filling($pr, 'owner', @fill_only)) { $pr->{'owner'} = git_get_project_owner("$pr->{'path'}") || ""; } - if ($show_ctags) { + if ($show_ctags && + project_info_needs_filling($pr, 'ctags', @fill_only)) { $pr->{'ctags'} = git_get_project_ctags($pr->{'path'}); } - if ($projects_list_group_categories && !defined $pr->{'category'}) { + if ($projects_list_group_categories && + project_info_needs_filling($pr, 'category', @fill_only)) { my $cat = git_get_project_category($pr->{'path'}) || $project_list_default_category; $pr->{'category'} = to_utf8($cat); -- 1.7.5 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html