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

[PATCH 2/2] gitweb: Improve behavior for actionless path_info gitweb URLs

From
Jakub Narebski <jnareb@gmail.com>
Date
Oct 13, 2010, 11:35 UTC
Message-ID
<20101013113411.9292.43309.stgit@localhost.localdomain>
In-Reply-To
<20101013112738.9292.46672.stgit@localhost.localdomain>
Eli Barzilay noticed that
  http://server/gitweb/project/<commit-sha1>

link goes to 'shortlog' view, while 'commit' view would be more useful, but that 'shortlog' action is more apropriate for

  http://server/gitweb/project/<commit-sha1>..<other-commit-sha1>
links.

Therefore for the case when we don't have either action, or filename, or parent hash [base] in path_info-based URL, i.e. for

  http://server/gitweb/project/<object-id>

link, instead of using 'shortlog' view we allow dispatch() subroutine to detect type of object and use appropriate action (in most case it would be either 'commit' action, or 'tag', or 'tree' for top directory).

Requested-by: Eli Barzilay <eli@barzilay.org>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Tested-by: Eli Barzilay <eli@barzilay.org>
---
This is one-line (discounting comments and braces) alternative
solution to the one proposed by Eli in the
  http://thread.gmane.org/gmane.comp.version-control.git/150527
thread from 8 July 2010.

A side-effect of this patch was discovering (and fixing in previous commit) long standing bug in corner case of path_info URLs parsing.

 gitweb/gitweb.perl |   11 +++++++++--
 1 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 9116a0e..928b5c0 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -819,8 +819,15 @@ sub evaluate_path_info {
 		# hash_base instead. It should also be noted that hand-crafted
 		# links having 'history' as an action and no pathname or hash
 		# set will fail, but that happens regardless of PATH_INFO.
-		$input_params{'action'} ||= "shortlog";
-		if (grep { $_ eq $input_params{'action'} } @wants_base) {
+		if (defined $parentrefname) {
+			# if there is parent let the default be 'shortlog' action
+			# (for http://git.example.com/repo.git/A..B links); if there
+			# is no parent, dispatch will detect type of object and set
+			# action appropriately if required (if action is not set)
+			$input_params{'action'} ||= "shortlog";
+		}
+		if ($input_params{'action'} &&
+		    grep { $_ eq $input_params{'action'} } @wants_base) {
 			$input_params{'hash_base'} ||= $refname;
 		} else {
 			$input_params{'hash'} ||= $refname;
Previous: Jakub Narebski
Message 2 of 2 in “gitweb: Fix bug in evaluate_path_info”
  1. 1/2 gitweb: Fix bug in evaluate_path_infoJakub Narebski, Oct 13, 2010
  2. 2/2 gitweb: Improve behavior for actionless path_info gitweb URLsJakub Narebski, Oct 13, 2010

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.