annotate tests/helpers-testrepo.sh @ 37048:fc5e261915b9

wireproto: require POST for all HTTPv2 requests Wire protocol version 1 transfers argument data via request headers by default. This has historically caused problems because servers institute limits on the length of individual HTTP headers as well as the total size of all request headers. Mercurial servers can advertise the maximum length of an individual header. But there's no guarantee any intermediate HTTP agents will accept headers up to that length. In the existing wire protocol, server operators typically also key off the HTTP request method to implement authentication. For example, GET requests translate to read-only requests and can be allowed. But read-write commands must use POST and require authentication. This has typically worked because the only wire protocol commands that use POST modify the repo (e.g. the "unbundle" command). There is an experimental feature to enable clients to transmit argument data via POST request bodies. This is technically a better and more robust solution. But we can't enable it by default because of servers assuming POST means write access. In version 2 of the wire protocol, the permissions of a request are encoded in the URL. And with it being a new protocol in a new URL space, we're not constrained by backwards compatibility requirements. This commit adopts the technically superior mechanism of using HTTP request bodies to send argument data by requiring POST for all commands. Strictly speaking, it may be possible to send request bodies on GET requests. But my experience is that not all HTTP stacks support this. POST pretty much always works. Using POST for read-only operations does sacrifice some RESTful design purity. But this API cares about practicality, not about being in Roy T. Fielding's REST ivory tower. There's a chance we may relax this restriction in the future. But for now, I want to see how far we can get with a POST only API. Differential Revision: https://phab.mercurial-scm.org/D2837
author Gregory Szorc <gregory.szorc@gmail.com>
date Tue, 13 Mar 2018 11:57:43 -0700
parents 45d6e2767a93
children 4e6a6d0dccee
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
33206
45d6e2767a93 tests: use system hg only if changelog or dirstate can't be read
Yuya Nishihara <yuya@tcha.org>
parents: 33205
diff changeset
1 # In most cases, the mercurial repository can be read by the bundled hg, but
45d6e2767a93 tests: use system hg only if changelog or dirstate can't be read
Yuya Nishihara <yuya@tcha.org>
parents: 33205
diff changeset
2 # that isn't always true because third-party extensions may change the store
45d6e2767a93 tests: use system hg only if changelog or dirstate can't be read
Yuya Nishihara <yuya@tcha.org>
parents: 33205
diff changeset
3 # format, for example. In which case, the system hg installation is used.
29219
3c9066ed557c tests: silence test-repo obsolete warning
timeless <timeless@mozdev.org>
parents:
diff changeset
4 #
33116
6c113a7dec52 tests: use the system hg for examining the local repository
Adam Simpkins <simpkins@fb.com>
parents: 29219
diff changeset
5 # We want to use the hg version being tested when interacting with the test
6c113a7dec52 tests: use the system hg for examining the local repository
Adam Simpkins <simpkins@fb.com>
parents: 29219
diff changeset
6 # repository, and the system hg when interacting with the mercurial source code
6c113a7dec52 tests: use the system hg for examining the local repository
Adam Simpkins <simpkins@fb.com>
parents: 29219
diff changeset
7 # repository.
29219
3c9066ed557c tests: silence test-repo obsolete warning
timeless <timeless@mozdev.org>
parents:
diff changeset
8 #
33116
6c113a7dec52 tests: use the system hg for examining the local repository
Adam Simpkins <simpkins@fb.com>
parents: 29219
diff changeset
9 # The mercurial source repository was typically orignally cloned with the
6c113a7dec52 tests: use the system hg for examining the local repository
Adam Simpkins <simpkins@fb.com>
parents: 29219
diff changeset
10 # system mercurial installation, and may require extensions or settings from
6c113a7dec52 tests: use the system hg for examining the local repository
Adam Simpkins <simpkins@fb.com>
parents: 29219
diff changeset
11 # the system installation.
6c113a7dec52 tests: use the system hg for examining the local repository
Adam Simpkins <simpkins@fb.com>
parents: 29219
diff changeset
12 syshg () {
6c113a7dec52 tests: use the system hg for examining the local repository
Adam Simpkins <simpkins@fb.com>
parents: 29219
diff changeset
13 (
6c113a7dec52 tests: use the system hg for examining the local repository
Adam Simpkins <simpkins@fb.com>
parents: 29219
diff changeset
14 syshgenv
6c113a7dec52 tests: use the system hg for examining the local repository
Adam Simpkins <simpkins@fb.com>
parents: 29219
diff changeset
15 exec hg "$@"
6c113a7dec52 tests: use the system hg for examining the local repository
Adam Simpkins <simpkins@fb.com>
parents: 29219
diff changeset
16 )
6c113a7dec52 tests: use the system hg for examining the local repository
Adam Simpkins <simpkins@fb.com>
parents: 29219
diff changeset
17 }
6c113a7dec52 tests: use the system hg for examining the local repository
Adam Simpkins <simpkins@fb.com>
parents: 29219
diff changeset
18
6c113a7dec52 tests: use the system hg for examining the local repository
Adam Simpkins <simpkins@fb.com>
parents: 29219
diff changeset
19 # Revert the environment so that running "hg" runs the system hg
6c113a7dec52 tests: use the system hg for examining the local repository
Adam Simpkins <simpkins@fb.com>
parents: 29219
diff changeset
20 # rather than the test hg installation.
6c113a7dec52 tests: use the system hg for examining the local repository
Adam Simpkins <simpkins@fb.com>
parents: 29219
diff changeset
21 syshgenv () {
33126
98e2c78e309c tests: more completely restore the environment in syshgenv
Adam Simpkins <simpkins@fb.com>
parents: 33125
diff changeset
22 . "$HGTEST_RESTOREENV"
33116
6c113a7dec52 tests: use the system hg for examining the local repository
Adam Simpkins <simpkins@fb.com>
parents: 29219
diff changeset
23 HGPLAIN=1
6c113a7dec52 tests: use the system hg for examining the local repository
Adam Simpkins <simpkins@fb.com>
parents: 29219
diff changeset
24 export HGPLAIN
6c113a7dec52 tests: use the system hg for examining the local repository
Adam Simpkins <simpkins@fb.com>
parents: 29219
diff changeset
25 }
33125
acfce52518c4 tests: do not use system hg if it does not have "files" command
Jun Wu <quark@fb.com>
parents: 33116
diff changeset
26
33205
2d7300cf3f3f tests: restore workaround of obsolete warning from 3c9066ed557c
Yuya Nishihara <yuya@tcha.org>
parents: 33204
diff changeset
27 # The test-repo is a live hg repository which may have evolution markers
2d7300cf3f3f tests: restore workaround of obsolete warning from 3c9066ed557c
Yuya Nishihara <yuya@tcha.org>
parents: 33204
diff changeset
28 # created, e.g. when a ~/.hgrc enabled evolution.
2d7300cf3f3f tests: restore workaround of obsolete warning from 3c9066ed557c
Yuya Nishihara <yuya@tcha.org>
parents: 33204
diff changeset
29 #
2d7300cf3f3f tests: restore workaround of obsolete warning from 3c9066ed557c
Yuya Nishihara <yuya@tcha.org>
parents: 33204
diff changeset
30 # Tests may be run using a custom HGRCPATH, which do not enable evolution
2d7300cf3f3f tests: restore workaround of obsolete warning from 3c9066ed557c
Yuya Nishihara <yuya@tcha.org>
parents: 33204
diff changeset
31 # markers by default.
2d7300cf3f3f tests: restore workaround of obsolete warning from 3c9066ed557c
Yuya Nishihara <yuya@tcha.org>
parents: 33204
diff changeset
32 #
2d7300cf3f3f tests: restore workaround of obsolete warning from 3c9066ed557c
Yuya Nishihara <yuya@tcha.org>
parents: 33204
diff changeset
33 # If test-repo includes evolution markers, and we do not enable evolution
2d7300cf3f3f tests: restore workaround of obsolete warning from 3c9066ed557c
Yuya Nishihara <yuya@tcha.org>
parents: 33204
diff changeset
34 # markers, hg will occasionally complain when it notices them, which disrupts
2d7300cf3f3f tests: restore workaround of obsolete warning from 3c9066ed557c
Yuya Nishihara <yuya@tcha.org>
parents: 33204
diff changeset
35 # tests resulting in sporadic failures.
2d7300cf3f3f tests: restore workaround of obsolete warning from 3c9066ed557c
Yuya Nishihara <yuya@tcha.org>
parents: 33204
diff changeset
36 #
2d7300cf3f3f tests: restore workaround of obsolete warning from 3c9066ed557c
Yuya Nishihara <yuya@tcha.org>
parents: 33204
diff changeset
37 # Since we aren't performing any write operations on the test-repo, there's
2d7300cf3f3f tests: restore workaround of obsolete warning from 3c9066ed557c
Yuya Nishihara <yuya@tcha.org>
parents: 33204
diff changeset
38 # no harm in telling hg that we support evolution markers, which is what the
2d7300cf3f3f tests: restore workaround of obsolete warning from 3c9066ed557c
Yuya Nishihara <yuya@tcha.org>
parents: 33204
diff changeset
39 # following lines for the hgrc file do:
2d7300cf3f3f tests: restore workaround of obsolete warning from 3c9066ed557c
Yuya Nishihara <yuya@tcha.org>
parents: 33204
diff changeset
40 cat >> "$HGRCPATH" << EOF
2d7300cf3f3f tests: restore workaround of obsolete warning from 3c9066ed557c
Yuya Nishihara <yuya@tcha.org>
parents: 33204
diff changeset
41 [experimental]
2d7300cf3f3f tests: restore workaround of obsolete warning from 3c9066ed557c
Yuya Nishihara <yuya@tcha.org>
parents: 33204
diff changeset
42 evolution = createmarkers
2d7300cf3f3f tests: restore workaround of obsolete warning from 3c9066ed557c
Yuya Nishihara <yuya@tcha.org>
parents: 33204
diff changeset
43 EOF
2d7300cf3f3f tests: restore workaround of obsolete warning from 3c9066ed557c
Yuya Nishihara <yuya@tcha.org>
parents: 33204
diff changeset
44
33206
45d6e2767a93 tests: use system hg only if changelog or dirstate can't be read
Yuya Nishihara <yuya@tcha.org>
parents: 33205
diff changeset
45 # Use the system hg command if the bundled hg can't read the repository with
45d6e2767a93 tests: use system hg only if changelog or dirstate can't be read
Yuya Nishihara <yuya@tcha.org>
parents: 33205
diff changeset
46 # no warning nor error.
45d6e2767a93 tests: use system hg only if changelog or dirstate can't be read
Yuya Nishihara <yuya@tcha.org>
parents: 33205
diff changeset
47 if [ -n "`hg id -R "$TESTDIR/.." 2>&1 >/dev/null`" ]; then
33204
ddd65b4f3ae6 tests: alias syshg and syshgenv so they can be switched conditionally
Yuya Nishihara <yuya@tcha.org>
parents: 33126
diff changeset
48 alias testrepohg=syshg
ddd65b4f3ae6 tests: alias syshg and syshgenv so they can be switched conditionally
Yuya Nishihara <yuya@tcha.org>
parents: 33126
diff changeset
49 alias testrepohgenv=syshgenv
ddd65b4f3ae6 tests: alias syshg and syshgenv so they can be switched conditionally
Yuya Nishihara <yuya@tcha.org>
parents: 33126
diff changeset
50 else
ddd65b4f3ae6 tests: alias syshg and syshgenv so they can be switched conditionally
Yuya Nishihara <yuya@tcha.org>
parents: 33126
diff changeset
51 alias testrepohg=hg
ddd65b4f3ae6 tests: alias syshg and syshgenv so they can be switched conditionally
Yuya Nishihara <yuya@tcha.org>
parents: 33126
diff changeset
52 alias testrepohgenv=:
33125
acfce52518c4 tests: do not use system hg if it does not have "files" command
Jun Wu <quark@fb.com>
parents: 33116
diff changeset
53 fi