changeset 16448:e6b45e9a75dc

hgweb: add hook for remapping repository path into virtual paths Extensions such as largefiles can use this to remap files so they appear in the same location as they do in the user's working copy.
author Martin Geisler <mg@lazybytes.net>
date Sun, 15 Apr 2012 16:05:53 +0200
parents 60c379da12aa
children 874a680a3e23
files mercurial/hgweb/webcommands.py
diffstat 1 files changed, 14 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/hgweb/webcommands.py	Sun Apr 15 00:27:31 2012 +0200
+++ b/mercurial/hgweb/webcommands.py	Sun Apr 15 16:05:53 2012 +0200
@@ -303,6 +303,14 @@
 
 rev = changeset
 
+def decodepath(path):
+    """Hook for mapping a path in the repository to a path in the
+    working copy.
+
+    Extensions (e.g., largefiles) can override this to remap files in
+    the virtual file system presented by the manifest command below."""
+    return path
+
 def manifest(web, req, tmpl):
     ctx = webutil.changectx(web.repo, req)
     path = webutil.cleanpath(web.repo, req.form.get('file', [''])[0])
@@ -318,13 +326,17 @@
     l = len(path)
     abspath = "/" + path
 
-    for f, n in mf.iteritems():
+    for full, n in mf.iteritems():
+        # the virtual path (working copy path) used for the full
+        # (repository) path
+        f = decodepath(full)
+
         if f[:l] != path:
             continue
         remain = f[l:]
         elements = remain.split('/')
         if len(elements) == 1:
-            files[remain] = f
+            files[remain] = full
         else:
             h = dirs # need to retain ref to dirs (root)
             for elem in elements[0:-1]: