# HG changeset patch # User Martin Geisler # Date 1334498753 -7200 # Node ID e6b45e9a75dcf72e1d208cc3b31f0f315aeca89d # Parent 60c379da12aa2e1b8cf2820306d7f0f1f920de6a 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. diff -r 60c379da12aa -r e6b45e9a75dc mercurial/hgweb/webcommands.py --- 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]: