git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH/RFC 3/6] gitweb: Option for filling only specified info in fill_project_list_info

From
Jakub Narebski <jnareb@gmail.com>
Date
Jul 29, 2011, 11:52 UTC
Message-ID
<1311940379-9608-4-git-send-email-jnareb@gmail.com>
In-Reply-To
<1311940379-9608-1-git-send-email-jnareb@gmail.com>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
---
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
Previous: Jakub NarebskiNext: Jakub Narebski
Message 4 of 8 in “gitweb: Improve project search”
  1. 0/6 gitweb: Improve project searchJakub Narebski, Jul 29, 2011
  2. 1/6 gitweb: Allow underscore in $searchtype ('st')Jakub Narebski, Jul 29, 2011
  3. 2/6 gitweb: Improve projects search formJakub Narebski, Jul 29, 2011
  4. 3/6 gitweb: Option for filling only specified info in fill_project_list_infoJakub Narebski, Jul 29, 2011
  5. 4/6 gitweb: Faster project searchJakub Narebski, Jul 29, 2011
  6. 5/6 gitweb: Highlight matched part of project name when searching projectsJakub Narebski, Jul 29, 2011
  7. 6/6 gitweb: Highlight matched part of project description when searching projectsJakub Narebski, Jul 29, 2011
  8. 7/6 gitweb: Use esc_html_match_hl in 'grep' searchJakub Narebski, Jul 30, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.