Mercurial > hg
view tests/test-committer.t @ 25777:1c2a8db33b8f
hgweb: allow symbolic revisions with forward slashes in urls
It's possible to have a branch/tag/bookmark with all kinds of special
characters, such as {}/\!?. While not very conveniently, symbolic revisions
with such characters work from command line if user correctly quotes the
characters. These characters also work in hgweb, when they are properly
encoded, with one exception: '/' (forward slash, urlencoded as '%2F'), which
was getting decoded before hgweb could parse it as a part of PATH_INFO.
Because of that, hgweb was seeing it as any other forward slash, that is, as
just another url parts separator.
For example, if user wanted to see the content of dir/file at bookmark
'feature/eggs', url could be: '/file/feature%2Feggs/dir/file'. But hgweb tried
to find a revision 'feature' and get contents of 'eggs/dir/file'.
To fix this, let's assume forward slashes are doubly-urlencoded (%252F), so
CGI/WSGI server decodes it into %2F. Then we can decode %2F in the revision
part of the url into an actual '/' character.
Making hgweb produce such urls will be done in the next 2 patches.
author | Anton Shestakov <av6@dwimlabs.net> |
---|---|
date | Sun, 12 Jul 2015 16:06:57 +0800 |
parents | 6dfb78f18bdb |
children | 89003c49315c |
line wrap: on
line source
$ unset HGUSER $ EMAIL="My Name <myname@example.com>" $ export EMAIL $ hg init test $ cd test $ touch asdf $ hg add asdf $ hg commit -m commit-1 $ hg tip changeset: 0:53f268a58230 tag: tip user: My Name <myname@example.com> date: Thu Jan 01 00:00:00 1970 +0000 summary: commit-1 $ unset EMAIL $ echo 1234 > asdf $ hg commit -u "foo@bar.com" -m commit-1 $ hg tip changeset: 1:3871b2a9e9bf tag: tip user: foo@bar.com date: Thu Jan 01 00:00:00 1970 +0000 summary: commit-1 $ echo "[ui]" >> .hg/hgrc $ echo "username = foobar <foo@bar.com>" >> .hg/hgrc $ echo 12 > asdf $ hg commit -m commit-1 $ hg tip changeset: 2:8eeac6695c1c tag: tip user: foobar <foo@bar.com> date: Thu Jan 01 00:00:00 1970 +0000 summary: commit-1 $ echo 1 > asdf $ hg commit -u "foo@bar.com" -m commit-1 $ hg tip changeset: 3:957606a725e4 tag: tip user: foo@bar.com date: Thu Jan 01 00:00:00 1970 +0000 summary: commit-1 $ echo 123 > asdf $ echo "[ui]" > .hg/hgrc $ echo "username = " >> .hg/hgrc $ hg commit -m commit-1 abort: no username supplied (use "hg config --edit" to set your username) [255] # test alternate config var $ echo 1234 > asdf $ echo "[ui]" > .hg/hgrc $ echo "user = Foo Bar II <foo2@bar.com>" >> .hg/hgrc $ hg commit -m commit-1 $ hg tip changeset: 4:6f24bfb4c617 tag: tip user: Foo Bar II <foo2@bar.com> date: Thu Jan 01 00:00:00 1970 +0000 summary: commit-1 # test no .hg/hgrc (uses generated non-interactive username) $ echo space > asdf $ rm .hg/hgrc $ hg commit -m commit-1 2>&1 no username found, using '[^']*' instead (re) $ echo space2 > asdf $ hg commit -u ' ' -m commit-1 transaction abort! rollback completed abort: empty username! [255] # don't add tests here, previous test is unstable $ cd ..