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

gitweb chokes on recursive symlink

From
Junio C Hamano <gitster@pobox.com>
Date
Jul 27, 2007, 08:23 UTC
Message-ID
<7v8x922r2w.fsf@assigned-by-dhcp.cox.net>

If somebody used to advertise his repository that physically resides at /pub/lic.git/ as:

	git://git.example.com/pub/lic.git/
but now wants to use --base-path to allow:
	git://git.example.com/lic.git/
she can start git-daemon with --base-path option, like this:
	git-daemon --base-path=/pub --export-all

During the transition, however, she would also want to allow older URL as well. One natural way to achieve that is to create a symlink:

	ln -s /pub /pub/pub

so that a request to git://git.example.com/pub/lic.git/ is first translated by --base-path to a request to /pub/pub/lic.git/ which goes to /pub/lic.git, thanks to the symlink.

So far so good.

However, gitweb chokes if there is such a symlink (File::Find barfs with "/pub/pub is a recursive symbolic link" --- I think this is because you use "follow_fast => 1").

As I happen to think using a symlink that goes up for backward compatible URL support is a rather common practice, I think we should do something about it. My gut feeling is that we could simply ignore such symlinks.

What do you think about this issue?
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index b381692..c8ad84e 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -1492,6 +1492,7 @@ sub git_get_projects_list {
 
 		File::Find::find({
 			follow_fast => 1, # follow symbolic links
+			follow_skip => 2, # ignore duplicates
 			dangling_symlinks => 0, # ignore dangling symlinks, silently
 			wanted => sub {
 				# skip project-list toplevel, if we get it.

	
Next: Jakub Narebski
Message 1 of 2 in “gitweb chokes on recursive symlink”
  1. Junio C HamanoJul 27, 2007
  2. Jakub NarebskiJul 27, 2007

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.