Mercurial > hg
annotate tests/test-push-checkheads-superceed-A5.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 | 4441705b7111 |
children | 34a46d48d24e |
rev | line source |
---|---|
31978
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
1 ==================================== |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
2 Testing head checking code: Case A-5 |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
3 ==================================== |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
4 |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
5 Mercurial checks for the introduction of new heads on push. Evolution comes |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
6 into play to detect if existing branches on the server are being replaced by |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
7 some of the new one we push. |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
8 |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
9 This case is part of a series of tests checking this behavior. |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
10 |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
11 Category A: simple case involving a branch being superceeded by another. |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
12 TestCase 5: New changeset as parent of the successor |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
13 |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
14 .. old-state: |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
15 .. |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
16 .. * 1-changeset branch |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
17 .. |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
18 .. new-state: |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
19 .. |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
20 .. * 2rchangeset branch, head is a successor, but other is new |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
21 .. |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
22 .. expected-result: |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
23 .. |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
24 .. * push allowed |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
25 .. |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
26 .. graph-summary: |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
27 .. |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
28 .. A ø⇠◔ A' |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
29 .. | | |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
30 .. | ◔ B |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
31 .. |/ |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
32 .. ● |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
33 |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
34 $ . $TESTDIR/testlib/push-checkheads-util.sh |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
35 |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
36 Test setup |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
37 ---------- |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
38 |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
39 $ mkdir A5 |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
40 $ cd A5 |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
41 $ setuprepos |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
42 creating basic server and client repo |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
43 updating to branch default |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
44 2 files updated, 0 files merged, 0 files removed, 0 files unresolved |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
45 $ cd client |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
46 $ hg up 0 |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
47 0 files updated, 0 files merged, 1 files removed, 0 files unresolved |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
48 $ mkcommit B0 |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
49 created new head |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
50 $ mkcommit A1 |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
51 $ hg debugobsolete `getid "desc(A0)" ` `getid "desc(A1)"` |
33542
b11e8c67fb0f
debugobsolete: also report the number of obsoleted changesets
Boris Feld <boris.feld@octobus.net>
parents:
33252
diff
changeset
|
52 obsoleted 1 changesets |
31978
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
53 $ hg log -G --hidden |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
54 @ ba93660aff8d (draft): A1 |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
55 | |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
56 o 74ff5441d343 (draft): B0 |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
57 | |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
58 | x 8aaa48160adc (draft): A0 |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
59 |/ |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
60 o 1e4be0697311 (public): root |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
61 |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
62 |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
63 Actual testing |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
64 -------------- |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
65 |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
66 $ hg push |
35393
4441705b7111
tests: remove (glob) annotations that were only for '\' matches
Matt Harbison <matt_harbison@yahoo.com>
parents:
33542
diff
changeset
|
67 pushing to $TESTTMP/A5/server |
31978
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
68 searching for changes |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
69 adding changesets |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
70 adding manifests |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
71 adding file changes |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
72 added 2 changesets with 2 changes to 2 files (+1 heads) |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
73 1 new obsolescence markers |
33252
53b3a1968aa6
obsolete: reports the number of local changeset obsoleted when unbundling
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
31978
diff
changeset
|
74 obsoleted 1 changesets |
31978
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
75 |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
76 $ cd ../.. |
c9b4bcad327e
obsolescence: add test for the "branch replacement" logic during push, case A5
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
77 |