Mercurial > hg
annotate tests/test-patch-offset.t @ 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 | bfc9ab6c1bec |
children | bf953d218a91 |
rev | line source |
---|---|
10135
9a4034b630c4
patch: better handling of sequence of offset patch hunks (issue1941)
Greg Onufer <gonufer@jazzhaiku.com>
parents:
diff
changeset
|
1 |
12477
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
2 $ cat > writepatterns.py <<EOF |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
3 > import sys |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
4 > |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
5 > path = sys.argv[1] |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
6 > patterns = sys.argv[2:] |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
7 > |
36020
bfc9ab6c1bec
py3: replace file() with open() in test-patch-offset.t
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32940
diff
changeset
|
8 > fp = open(path, 'wb') |
12477
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
9 > for pattern in patterns: |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
10 > count = int(pattern[0:-1]) |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
11 > char = pattern[-1] + '\n' |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
12 > fp.write(char*count) |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
13 > fp.close() |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
14 > EOF |
10135
9a4034b630c4
patch: better handling of sequence of offset patch hunks (issue1941)
Greg Onufer <gonufer@jazzhaiku.com>
parents:
diff
changeset
|
15 |
12477
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
16 prepare repo |
10135
9a4034b630c4
patch: better handling of sequence of offset patch hunks (issue1941)
Greg Onufer <gonufer@jazzhaiku.com>
parents:
diff
changeset
|
17 |
12477
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
18 $ hg init a |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
19 $ cd a |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
20 |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
21 These initial lines of Xs were not in the original file used to generate |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
22 the patch. So all the patch hunks need to be applied to a constant offset |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
23 within this file. If the offset isn't tracked then the hunks can be |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
24 applied to the wrong lines of this file. |
10135
9a4034b630c4
patch: better handling of sequence of offset patch hunks (issue1941)
Greg Onufer <gonufer@jazzhaiku.com>
parents:
diff
changeset
|
25 |
32940
75be14993fda
cleanup: use $PYTHON to run python in many more tests
Augie Fackler <augie@google.com>
parents:
23749
diff
changeset
|
26 $ $PYTHON ../writepatterns.py a 34X 10A 1B 10A 1C 10A 1B 10A 1D 10A 1B 10A 1E 10A 1B 10A |
12477
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
27 $ hg commit -Am adda |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
28 adding a |
10135
9a4034b630c4
patch: better handling of sequence of offset patch hunks (issue1941)
Greg Onufer <gonufer@jazzhaiku.com>
parents:
diff
changeset
|
29 |
12477
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
30 This is a cleaner patch generated via diff |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
31 In this case it reproduces the problem when |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
32 the output of hg export does not |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
33 import patch |
10135
9a4034b630c4
patch: better handling of sequence of offset patch hunks (issue1941)
Greg Onufer <gonufer@jazzhaiku.com>
parents:
diff
changeset
|
34 |
12477
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
35 $ hg import -v -m 'b' -d '2 0' - <<EOF |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
36 > --- a/a 2009-12-08 19:26:17.000000000 -0800 |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
37 > +++ b/a 2009-12-08 19:26:17.000000000 -0800 |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
38 > @@ -9,7 +9,7 @@ |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
39 > A |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
40 > A |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
41 > B |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
42 > -A |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
43 > +a |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
44 > A |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
45 > A |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
46 > A |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
47 > @@ -53,7 +53,7 @@ |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
48 > A |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
49 > A |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
50 > B |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
51 > -A |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
52 > +a |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
53 > A |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
54 > A |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
55 > A |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
56 > @@ -75,7 +75,7 @@ |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
57 > A |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
58 > A |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
59 > B |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
60 > -A |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
61 > +a |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
62 > A |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
63 > A |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
64 > A |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
65 > EOF |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
66 applying patch from stdin |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
67 patching file a |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
68 Hunk #1 succeeded at 43 (offset 34 lines). |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
69 Hunk #2 succeeded at 87 (offset 34 lines). |
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
70 Hunk #3 succeeded at 109 (offset 34 lines). |
23749
a387b0390082
localrepo: show headline notes in commitctx before showing filenames
Mads Kiilerich <madski@unity3d.com>
parents:
16913
diff
changeset
|
71 committing files: |
12477
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
72 a |
23749
a387b0390082
localrepo: show headline notes in commitctx before showing filenames
Mads Kiilerich <madski@unity3d.com>
parents:
16913
diff
changeset
|
73 committing manifest |
a387b0390082
localrepo: show headline notes in commitctx before showing filenames
Mads Kiilerich <madski@unity3d.com>
parents:
16913
diff
changeset
|
74 committing changelog |
15194
0705f2ac79d6
import: simplify status reporting logic (and make it more I18N-friendly)
Greg Ward <greg@gerg.ca>
parents:
12477
diff
changeset
|
75 created 189885cecb41 |
10135
9a4034b630c4
patch: better handling of sequence of offset patch hunks (issue1941)
Greg Onufer <gonufer@jazzhaiku.com>
parents:
diff
changeset
|
76 |
12477
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
77 compare imported changes against reference file |
10135
9a4034b630c4
patch: better handling of sequence of offset patch hunks (issue1941)
Greg Onufer <gonufer@jazzhaiku.com>
parents:
diff
changeset
|
78 |
32940
75be14993fda
cleanup: use $PYTHON to run python in many more tests
Augie Fackler <augie@google.com>
parents:
23749
diff
changeset
|
79 $ $PYTHON ../writepatterns.py aref 34X 10A 1B 1a 9A 1C 10A 1B 10A 1D 10A 1B 1a 9A 1E 10A 1B 1a 9A |
12477
e68cd3a90599
tests: unify test-patch-offset
Matt Mackall <mpm@selenic.com>
parents:
10265
diff
changeset
|
80 $ diff aref a |
16913
f2719b387380
tests: add missing trailing 'cd ..'
Mads Kiilerich <mads@kiilerich.com>
parents:
15194
diff
changeset
|
81 |
f2719b387380
tests: add missing trailing 'cd ..'
Mads Kiilerich <mads@kiilerich.com>
parents:
15194
diff
changeset
|
82 $ cd .. |