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

[PATCH] gitweb: Fix "next" link on bottom of page

From
Jakub Narebski <jnareb@gmail.com>
Date
Jun 2, 2008, 09:54 UTC
Message-ID
<20080602095348.16843.24351.stgit@localhost.localdomain>
In-Reply-To
<m3y75s1a9v.fsf@localhost.localdomain>
Fix search form generation to not modify $cgi->param(...)'s.

In git_header_html() we used to use $cgi->hidden(-name => "a") etc. to generate hidden fields; unfortunately to use this form it is required to modify $cgi->param("a") etc., which makes href(-replay,...) use wrong replay values. This for example made the "next" link on the bottom of the page has a=search instead of a=$action, and thus fails to get you to the next page.

Because in CGI the value of a hidden field is "sticky", there is no way to modify it short of modifying $cgi->param(...). Therefore it got replaced by generating <input type="hidden" ...> element [semi] directly.

Alternate solution would be for href(-replay,...) to use values saved in global variables, such as $action etc., instead of (re)reading them from $cgi->param($symbol).

The bad link was reported by Kai Blin through
  http://bugs.debian.org/481902
Reported-by: Kai Blin <kai.blin@gmail.com>
Noticed-by: Gerrit Pape <pape@smarden.org>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
---
Jakub Narebski <jnareb@gmail.com> wrote:
Show 13 quoted lines
> Gerrit Pape <pape@smarden.org> writes:
> 
>> When viewing a gitweb repository commit log, the "next" link at the top
>> of the page works as expected, the "next" link on the bottom of the page
>> has a=search instead of a=log and thus fails to get you to the next
>> page.  This commit replaces the bottom "next" link with the same links
>> as shown at the top of the page.
> 
>> -		print $cgi->a({-href => href(-replay=>1, page=>$page+1),
>> -			       -accesskey => "n", -title => "Alt-n"}, "next");
> 
> Should not happen: href(-replay=>1, ...) should have the same value
> of 'a' parameter as the page it is in, so it should be 'log' not 'search'.

This bug was caused by the fact that git_header_html() modified parameters in $cgi->param(...) when generating search form, and href(-replay, ...) uses paramemeters values from $cgi, not saved in variables (although it could).

This fixes mentioned bug, not only in the case of 'log' view, but in all cases (although it is possible that this bug doesn't occur for other pages).

[I'm sorry if I have send this patch twice.]
 gitweb/gitweb.perl |   13 +++++--------
 1 files changed, 5 insertions(+), 8 deletions(-)
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index dd0f0ac..50cde3b 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -2622,7 +2622,7 @@ EOF
 	print "</div>\n";
 
 	my ($have_search) = gitweb_check_feature('search');
-	if ((defined $project) && ($have_search)) {
+	if (defined $project && $have_search) {
 		if (!defined $searchtext) {
 			$searchtext = "";
 		}
@@ -2638,16 +2638,13 @@ EOF
 		my ($use_pathinfo) = gitweb_check_feature('pathinfo');
 		if ($use_pathinfo) {
 			$action .= "/".esc_url($project);
-		} else {
-			$cgi->param("p", $project);
 		}
-		$cgi->param("a", "search");
-		$cgi->param("h", $search_hash);
 		print $cgi->startform(-method => "get", -action => $action) .
 		      "<div class=\"search\">\n" .
-		      (!$use_pathinfo && $cgi->hidden(-name => "p") . "\n") .
-		      $cgi->hidden(-name => "a") . "\n" .
-		      $cgi->hidden(-name => "h") . "\n" .
+		      (!$use_pathinfo &&
+		      $cgi->input({-name=>"p", -value=>$project, -type=>"hidden"}) . "\n") .
+		      $cgi->input({-name=>"a", -value=>"search", -type=>"hidden"}) . "\n" .
+		      $cgi->input({-name=>"h", -value=>$search_hash, -type=>"hidden"}) . "\n" .
 		      $cgi->popup_menu(-name => 'st', -default => 'commit',
 		                       -values => ['commit', 'grep', 'author', 'committer', 'pickaxe']) .
 		      $cgi->sup($cgi->a({-href => href(action=>"search_help")}, "?")) .
Previous: Jakub NarebskiNext: Gerrit Pape
Message 4 of 5 in “gitweb: fix "next" link on bottom of commit log page”
  1. gitweb: fix "next" link on bottom of commit log pageGerrit Pape, May 29, 2008
  2. Jakub NarebskiMay 30, 2008
  3. Jakub NarebskiJun 2, 2008
  4. gitweb: Fix "next" link on bottom of pageJakub Narebski, Jun 2, 2008
  5. Gerrit PapeJun 2, 2008

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.