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

[PATCH 2/5] gitweb: Faster project search

From
Jakub Narebski <jnareb@gmail.com>
Date
Feb 4, 2012, 12:47 UTC
Message-ID
<1328359648-29511-3-git-send-email-jnareb@gmail.com>
In-Reply-To
<1328359648-29511-1-git-send-email-jnareb@gmail.com>

Before searching by some field the information we search for must be filled in. For this fill_project_list_info() was enhanced in previous commit to take additional parameters which part of projects info to fill. This way we can limit doing expensive calculations (like running git-for-each-ref to get 'age' / "Last changed" info) only to projects which we will show as search results.

With this commit the number of git commands used to generate search results is 2*<matched projects> + 1, and depends on number of matched projects rather than number of all projects (all repositories).

Note: this is 'git for-each-ref' to find last activity, and 'git config'
for each project, and 'git --version' once.
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
---
search_projects_list() now pre-fills required parts of project info by
itself, so running fill_project_list_info() before calling it is no
longer necessary and actually you should not do it.
 gitweb/gitweb.perl |    9 +++++++--
 1 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index b7a3752..95ca00f 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -2989,6 +2989,10 @@ sub search_projects_list {
 	return @$projlist
 		unless ($tagfilter || $searchtext);
 
+	# searching projects require filling to be run before it;
+	fill_project_list_info($projlist,
+	                       $tagfilter  ? 'ctags' : (),
+	                       $searchtext ? ('path', 'descr') : ());
 	my @projects;
  PROJECT:
 	foreach my $pr (@$projlist) {
@@ -5370,12 +5374,13 @@ sub git_project_list_body {
 	# filtering out forks before filling info allows to do less work
 	@projects = filter_forks_from_projects_list(\@projects)
 		if ($check_forks);
-	@projects = fill_project_list_info(\@projects);
-	# searching projects require filling to be run before it
+	# search_projects_list pre-fills required info
 	@projects = search_projects_list(\@projects,
 	                                 'searchtext' => $searchtext,
 	                                 'tagfilter'  => $tagfilter)
 		if ($tagfilter || $searchtext);
+	# fill the rest
+	@projects = fill_project_list_info(\@projects);
 
 	$order ||= $default_projects_order;
 	$from = 0 unless defined $from;
-- 
1.7.9
Previous: Jakub NarebskiNext: Jakub Narebski
Message 15 of 21 in “gitweb: Faster and imrpoved project search”
  1. 0/5 gitweb: Faster and imrpoved project searchJakub Narebski, Feb 4, 2012
  2. 1/5 gitweb: Option for filling only specified info in fill_project_list_infoJakub Narebski, Feb 4, 2012
  3. Junio C HamanoFeb 9, 2012
  4. Jakub NarebskiFeb 9, 2012
  5. Junio C HamanoFeb 9, 2012
  6. Jakub NarebskiFeb 9, 2012
  7. Junio C HamanoFeb 9, 2012
  8. Jakub NarebskiFeb 10, 2012
  9. Junio C HamanoFeb 10, 2012
  10. Jakub NarebskiFeb 10, 2012
  11. Junio C HamanoFeb 10, 2012
  12. Jakub NarebskiFeb 10, 2012
  13. Junio C HamanoFeb 10, 2012
  14. Jakub NarebskiFeb 10, 2012
  15. 2/5 gitweb: Faster project searchJakub Narebski, Feb 4, 2012
  16. 3/5 gitweb: Highlight matched part of project name when searching projectsJakub Narebski, Feb 4, 2012
  17. 4/5 gitweb: Highlight matched part of project description when searching projectsJakub Narebski, Feb 4, 2012
  18. 5/5 gitweb: Highlight matched part of shortened project descriptionJakub Narebski, Feb 4, 2012
  19. 5/5 gitweb: Highlight matched part of shortened project descriptionJakub Narebski, Feb 4, 2012
  20. Felipe ContrerasFeb 4, 2012
  21. Jakub NarebskiFeb 4, 2012

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.