hgweb: make paths wildcards expanding in a repo root match repo correctly
authorMads Kiilerich <mads@kiilerich.com>
Tue, 15 Feb 2011 01:04:10 +0100
changeset 13403 8ed91088acbb
parent 13402 f947d9a4c45c
child 13404 31a256ffe9e5
hgweb: make paths wildcards expanding in a repo root match repo correctly There was a trailing '/' too much when the wildcard part expanded to nothing. The consequence was that the repo was announced but didn't work.
mercurial/hgweb/hgwebdir_mod.py
tests/test-hgwebdir.t
--- a/mercurial/hgweb/hgwebdir_mod.py	Tue Feb 15 01:04:10 2011 +0100
+++ b/mercurial/hgweb/hgwebdir_mod.py	Tue Feb 15 01:04:10 2011 +0100
@@ -41,16 +41,14 @@
     """yield url paths and filesystem paths from a list of repo paths
 
     >>> list(urlrepos('hg', '/opt', ['/opt/r', '/opt/r/r', '/opt']))
-    [('hg/r', '/opt/r'), ('hg/r/r', '/opt/r/r'), ('hg/', '/opt')]
+    [('hg/r', '/opt/r'), ('hg/r/r', '/opt/r/r'), ('hg', '/opt')]
     >>> list(urlrepos('', '/opt', ['/opt/r', '/opt/r/r', '/opt']))
     [('r', '/opt/r'), ('r/r', '/opt/r/r'), ('', '/opt')]
     """
     for path in paths:
         path = os.path.normpath(path)
-        name = util.pconvert(path[len(roothead):]).strip('/')
-        if prefix:
-            name = prefix + '/' + name
-        yield name, path
+        yield (prefix + '/' +
+               util.pconvert(path[len(roothead):]).lstrip('/')).strip('/'), path
 
 class hgwebdir(object):
     refreshinterval = 20
--- a/tests/test-hgwebdir.t	Tue Feb 15 01:04:10 2011 +0100
+++ b/tests/test-hgwebdir.t	Tue Feb 15 01:04:10 2011 +0100
@@ -99,6 +99,7 @@
   > rcoll=$root/**
   > star=*
   > starstar=**
+  > astar=webdir/a/*
   > EOF
   $ hg serve -p $HGPORT1 -d --pid-file=hg.pid --webdir-conf paths.conf \
   >     -A access-paths.log -E error-paths-2.log
@@ -130,6 +131,8 @@
   /starstar/webdir/b/
   /starstar/webdir/b/d/
   /starstar/webdir/c/
+  /astar/
+  /astar/.hg/patches/
   
   $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT1 '/?style=paper'
   200 Script output follows
@@ -322,6 +325,22 @@
   <td class="indexlinks"></td>
   </tr>
   
+  <tr class="parity0">
+  <td><a href="/astar/?style=paper">astar</a></td>
+  <td>unknown</td>
+  <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
+  <td class="age">* ago</td> (glob)
+  <td class="indexlinks"></td>
+  </tr>
+  
+  <tr class="parity1">
+  <td><a href="/astar/.hg/patches/?style=paper">astar/.hg/patches</a></td>
+  <td>unknown</td>
+  <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
+  <td class="age">* ago</td> (glob)
+  <td class="indexlinks"></td>
+  </tr>
+  
   </table>
   </div>
   </div>
@@ -470,7 +489,7 @@
   
   a
 
-est [paths] '**' extension
+Test [paths] '**' extension
 
   $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT1 '/rcoll/?style=raw'
   200 Script output follows
@@ -486,6 +505,12 @@
   200 Script output follows
   
   d
+
+Test [paths] '*' in a repo root
+
+  $ hg id http://localhost:$HGPORT1/astar
+  8580ff50825a
+
   $ "$TESTDIR/killdaemons.py"
   $ cat > paths.conf <<EOF
   > [paths]