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

[PATCH 3/4] gitweb: Divide page path into directories -- path's "breadcrumbs"

From
Jakub Narebski <jnareb@gmail.com>
Date
Sep 4, 2006, 16:17 UTC
Message-ID
<200609041817.59054.jnareb@gmail.com>
In-Reply-To
<200609041810.09838.jnareb@gmail.com>

Divide page path into directories, so that each part of path links to the "tree" view of the $hash_base (or HEAD, if $hash_base is not set) version of the directory.

If the entity is blob, final part (basename) links to $hash_base or HEAD revision of the "raw" blob ("blob_plain" view). If the entity is tree, link to the "tree" view.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
---
 gitweb/gitweb.perl |   29 +++++++++++++++++++++--------
 1 files changed, 21 insertions(+), 8 deletions(-)
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 3b5c0e2..4240a30 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -1375,19 +1375,32 @@ sub git_print_page_path {
 
 	if (!defined $name) {
 		print "<div class=\"page_path\">/</div>\n";
-	} elsif (defined $type && $type eq 'blob') {
+	} else {
+		my @dirname = split '/', $name;
+		my $basename = pop @dirname;
+		my $fullname = '';
+
 		print "<div class=\"page_path\">";
-		if (defined $hb) {
+		foreach my $dir (@dirname) {
+			$fullname .= $dir . '/';
+			print $cgi->a({-href => href(action=>"tree", file_name=>$fullname,
+			                             hash_base=>$hb),
+			              -title => $fullname}, esc_html($dir));
+			print "/";
+		}
+		if (defined $type && $type eq 'blob') {
 			print $cgi->a({-href => href(action=>"blob_plain", file_name=>$file_name,
-			                             hash_base=>$hb)},
-			              esc_html($name));
+			                             hash_base=>$hb),
+			              -title => $name}, esc_html($basename));
+		} elsif (defined $type && $type eq 'tree') {
+			print $cgi->a({-href => href(action=>"tree", file_name=>$file_name,
+			                             hash_base=>$hb),
+			              -title => $name}, esc_html($basename));
+			print "/";
 		} else {
-			print $cgi->a({-href => href(action=>"blob_plain", file_name=>$file_name)},
-			              esc_html($name));
+			print esc_html($basename);
 		}
 		print "<br/></div>\n";
-	} else {
-		print "<div class=\"page_path\">" . esc_html($name) . "<br/></div>\n";
 	}
 }
 
-- 
1.4.1.1
Previous: Jakub NarebskiNext: Jakub Narebski
Message 10 of 14 in “gitweb: Some improvements”
  1. 0/4 gitweb: Some improvementsJakub Narebski, Sep 4, 2006
  2. PATCH 1/4] gitweb: Add GIT favicon, assuming image/png typeJakub Narebski, Sep 4, 2006
  3. Linus TorvaldsSep 4, 2006
  4. 1/4 gitweb: Add GIT favicon, assuming image/png typeJakub Narebski, Sep 4, 2006
  5. Jakub NarebskiSep 4, 2006
  6. Junio C HamanoSep 4, 2006
  7. Jakub NarebskiSep 4, 2006
  8. Junio C HamanoSep 4, 2006
  9. 2/4 gitweb: Change the name of diff to parent link in "commit" view to "diff"Jakub Narebski, Sep 4, 2006
  10. 3/4 gitweb: Divide page path into directories -- path's "breadcrumbs"Jakub Narebski, Sep 4, 2006
  11. 4/4 gitweb: Correct typo: '==' instead of 'eq' in git_difftree_bodyJakub Narebski, Sep 4, 2006
  12. Junio C HamanoSep 4, 2006
  13. Jakub NarebskiSep 4, 2006
  14. Jakub NarebskiSep 5, 2006

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.