##// END OF EJS Templates
hgweb: support constructing URLs from an alternate base URL...
hgweb: support constructing URLs from an alternate base URL The web.baseurl config option allows server operators to define a custom URL for hosted content. The way it works today is that hgwebdir parses this config option into URL components then updates the appropriate WSGI environment variables so the request "lies" about its details. For example, SERVER_NAME is updated to reflect the alternate base URL's hostname. The WSGI environment should not be modified because WSGI applications may want to know the original request details (for debugging, etc). This commit teaches our request parser about the existence of an alternate base URL. If defined, the advertised URL and other self-reflected paths will take the alternate base URL into account. The hgweb WSGI application didn't use web.baseurl. But hgwebdir did. We update hgwebdir to alter the environment parsing accordingly. The old code around environment manipulation has been removed. With this change, parserequestfromenv() has grown to a bit unwieldy. Now that practically everyone is using it, it is obvious that there is some unused features that can be trimmed. So look for this in follow-up commits. Differential Revision: https://phab.mercurial-scm.org/D2822

File last commit:

r36400:b4d1c09b default
r36916:219b2335 default
Show More
test-arbitraryfilectx.t
101 lines | 2.6 KiB | text/troff | Tads3Lexer
/ tests / test-arbitraryfilectx.t
Phil Cohen
arbitraryfilecontext: skip the cmp fast path if any side is a symlink...
r34836 Setup:
$ cat > eval.py <<EOF
> from __future__ import absolute_import
> import filecmp
> from mercurial import commands, context, registrar
> cmdtable = {}
> command = registrar.command(cmdtable)
Pulkit Goyal
py3: add missing b'' in test-arbitraryfilectx.t...
r36400 > @command(b'eval', [], b'hg eval CMD')
Phil Cohen
arbitraryfilecontext: skip the cmp fast path if any side is a symlink...
r34836 > def eval_(ui, repo, *cmds, **opts):
Pulkit Goyal
py3: add b'' prefixes to string literals in test files...
r35965 > cmd = b" ".join(cmds)
Phil Cohen
arbitraryfilecontext: skip the cmp fast path if any side is a symlink...
r34836 > res = str(eval(cmd, globals(), locals()))
Pulkit Goyal
py3: add b'' prefixes to string literals in test files...
r35965 > ui.warn(b"%s" % res)
Phil Cohen
arbitraryfilecontext: skip the cmp fast path if any side is a symlink...
r34836 > EOF
$ echo "[extensions]" >> $HGRCPATH
$ echo "eval=`pwd`/eval.py" >> $HGRCPATH
Arbitraryfilectx.cmp does not follow symlinks:
$ mkdir case1
$ cd case1
$ hg init
Matt Harbison
test-arbitraryfilectx: stabilize for Windows...
r34937 #if symlink
Phil Cohen
arbitraryfilecontext: skip the cmp fast path if any side is a symlink...
r34836 $ printf "A" > real_A
$ printf "foo" > A
$ printf "foo" > B
$ ln -s A sym_A
$ hg add .
adding A
adding B
adding real_A
adding sym_A
$ hg commit -m "base"
Matt Harbison
test-arbitraryfilectx: stabilize for Windows...
r34937 #else
$ hg import -q --bypass - <<EOF
> # HG changeset patch
> # User test
> # Date 0 0
> base
>
> diff --git a/A b/A
> new file mode 100644
> --- /dev/null
> +++ b/A
> @@ -0,0 +1,1 @@
> +foo
> \ No newline at end of file
> diff --git a/B b/B
> new file mode 100644
> --- /dev/null
> +++ b/B
> @@ -0,0 +1,1 @@
> +foo
> \ No newline at end of file
> diff --git a/real_A b/real_A
> new file mode 100644
> --- /dev/null
> +++ b/real_A
> @@ -0,0 +1,1 @@
> +A
> \ No newline at end of file
> diff --git a/sym_A b/sym_A
> new file mode 120000
> --- /dev/null
> +++ b/sym_A
> @@ -0,0 +1,1 @@
> +A
> \ No newline at end of file
> EOF
$ hg up -q
#endif
Phil Cohen
arbitraryfilecontext: skip the cmp fast path if any side is a symlink...
r34836
These files are different and should return True (different):
(Note that filecmp.cmp's return semantics are inverted from ours, so we invert
for simplicity):
$ hg eval "context.arbitraryfilectx('A', repo).cmp(repo[None]['real_A'])"
True (no-eol)
$ hg eval "not filecmp.cmp('A', 'real_A')"
True (no-eol)
These files are identical and should return False (same):
$ hg eval "context.arbitraryfilectx('A', repo).cmp(repo[None]['A'])"
False (no-eol)
$ hg eval "context.arbitraryfilectx('A', repo).cmp(repo[None]['B'])"
False (no-eol)
$ hg eval "not filecmp.cmp('A', 'B')"
False (no-eol)
This comparison should also return False, since A and sym_A are substantially
the same in the eyes of ``filectx.cmp``, which looks at data only.
$ hg eval "context.arbitraryfilectx('real_A', repo).cmp(repo[None]['sym_A'])"
False (no-eol)
A naive use of filecmp on those two would wrongly return True, since it follows
the symlink to "A", which has different contents.
Matt Harbison
test-arbitraryfilectx: stabilize for Windows...
r34937 #if symlink
Phil Cohen
arbitraryfilecontext: skip the cmp fast path if any side is a symlink...
r34836 $ hg eval "not filecmp.cmp('real_A', 'sym_A')"
True (no-eol)
Matt Harbison
test-arbitraryfilectx: stabilize for Windows...
r34937 #else
$ hg eval "not filecmp.cmp('real_A', 'sym_A')"
False (no-eol)
#endif