diff --git a/hgext/largefiles/overrides.py b/hgext/largefiles/overrides.py --- a/hgext/largefiles/overrides.py +++ b/hgext/largefiles/overrides.py @@ -172,6 +172,11 @@ def removelargefiles(ui, repo, *pats, ** finally: wlock.release() +# For overriding mercurial.hgweb.webcommands so that largefiles will +# appear at their right place in the manifests. +def decodepath(orig, path): + return lfutil.splitstandin(path) or path + # -- Wrappers: modify existing commands -------------------------------- # Add works by going through the files that the user wanted to add and diff --git a/hgext/largefiles/uisetup.py b/hgext/largefiles/uisetup.py --- a/hgext/largefiles/uisetup.py +++ b/hgext/largefiles/uisetup.py @@ -11,7 +11,7 @@ from mercurial import archival, cmdutil, commands, extensions, filemerge, hg, \ httprepo, localrepo, merge, sshrepo, sshserver, wireproto from mercurial.i18n import _ -from mercurial.hgweb import hgweb_mod, protocol +from mercurial.hgweb import hgweb_mod, protocol, webcommands import overrides import proto @@ -109,6 +109,8 @@ def uisetup(ui): hgweb_mod.perms['getlfile'] = 'pull' hgweb_mod.perms['statlfile'] = 'pull' + extensions.wrapfunction(webcommands, 'decodepath', overrides.decodepath) + # the hello wireproto command uses wireproto.capabilities, so it won't see # our largefiles capability unless we replace the actual function as well. proto.capabilitiesorig = wireproto.capabilities diff --git a/tests/test-largefiles.t b/tests/test-largefiles.t --- a/tests/test-largefiles.t +++ b/tests/test-largefiles.t @@ -127,6 +127,29 @@ Test moving largefiles and verify that n $ cat sub/large4 large22 +Test display of largefiles in hgweb + + $ hg serve -d -p $HGPORT --pid-file ../hg.pid + $ cat ../hg.pid >> $DAEMON_PIDS + $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/file/tip/?style=raw' + 200 Script output follows + + + drwxr-xr-x sub + -rw-r--r-- 41 large3 + -rw-r--r-- 9 normal3 + + + $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/file/tip/sub/?style=raw' + 200 Script output follows + + + -rw-r--r-- 41 large4 + -rw-r--r-- 9 normal4 + + + $ "$TESTDIR/killdaemons.py" + Test archiving the various revisions. These hit corner cases known with archiving.