Fix issue1679: path reconstruction in hgwebdir was mangling things badly
authorBryan O'Sullivan <bos@serpentine.com>
Wed, 22 Jul 2009 15:26:27 -0700
changeset 9184 f6eb03027411
parent 9183 d0225fa2f6c4
child 9188 4c287332e03b
child 9199 fb5562afc263
Fix issue1679: path reconstruction in hgwebdir was mangling things badly
mercurial/hgweb/hgwebdir_mod.py
tests/test-hgwebdir
tests/test-hgwebdir.out
--- a/mercurial/hgweb/hgwebdir_mod.py	Wed Jul 22 22:50:34 2009 +0200
+++ b/mercurial/hgweb/hgwebdir_mod.py	Wed Jul 22 15:26:27 2009 -0700
@@ -6,7 +6,7 @@
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2, incorporated herein by reference.
 
-import os, time
+import os, re, time
 from mercurial.i18n import _
 from mercurial import ui, hg, util, templater
 from mercurial import error, encoding
@@ -225,7 +225,9 @@
                     parts.insert(0, req.env['PATH_INFO'].rstrip('/'))
                 if req.env['SCRIPT_NAME']:
                     parts.insert(0, req.env['SCRIPT_NAME'])
-                url = ('/'.join(parts).replace("//", "/")) + '/'
+                m = re.match('((?:https?://)?)(.*)', '/'.join(parts))
+                # squish repeated slashes out of the path component
+                url = m.group(1) + re.sub('/+', '/', m.group(2)) + '/'
 
                 # update time with local timezone
                 try:
--- a/tests/test-hgwebdir	Wed Jul 22 22:50:34 2009 +0200
+++ b/tests/test-hgwebdir	Wed Jul 22 15:26:27 2009 -0700
@@ -88,7 +88,8 @@
 $root=$root
 EOF
 
-hg serve -p $HGPORT2 -d --pid-file=hg.pid --webdir-conf collections.conf \
+hg serve --config web.baseurl=http://hg.example.com:8080/ -p $HGPORT2 -d \
+    --pid-file=hg.pid --webdir-conf collections.conf \
     -A access-collections.log -E error-collections.log
 cat hg.pid >> $DAEMON_PIDS
 
--- a/tests/test-hgwebdir.out	Wed Jul 22 22:50:34 2009 +0200
+++ b/tests/test-hgwebdir.out	Wed Jul 22 15:26:27 2009 -0700
@@ -311,10 +311,10 @@
 200 Script output follows
 
 
-/a/
-/a/.hg/patches/
-/b/
-/c/
+http://hg.example.com:8080/a/
+http://hg.example.com:8080/a/.hg/patches/
+http://hg.example.com:8080/b/
+http://hg.example.com:8080/c/
 
 200 Script output follows