Mercurial > hg
annotate tests/test-eol-add.t @ 39638:d292328e0143
exchangev2: fetch manifest revisions
Now that the server has support for retrieving manifest data, we can
implement the client bits to call it.
We teach the changeset fetching code to capture the manifest revisions
that are encountered on incoming changesets. We then feed this into a
new function which filters out known manifests and then batches up
manifest data requests to the server.
This is different from the previous wire protocol in a few notable
ways.
First, the client fetches manifest data separately and explicitly.
Before, we'd ask the server for data pertaining to some changesets
(via a "getbundle" command) and manifests (and files) would be sent
automatically. Providing an API for looking up just manifest data
separately gives clients much more flexibility for manifest management.
For example, a client may choose to only fetch manifest data on demand
instead of prefetching it (i.e. partial clone).
Second, we send N commands to the server for manifest retrieval instead
of 1. This property has a few nice side-effects. One is that the
deterministic nature of the requests lends itself to server-side
caching. For example, say the remote has 50,000 manifests. If the
server is configured to cache responses, each time a new commit
arrives, you will have a cache miss and need to regenerate all outgoing
data. But if you makes N requests requesting 10,000 manifests each,
a new commit will still yield cache hits on the initial, unchanged
manifest batches/requests.
A derived benefit from these properties is that resumable clone is
conceptually simpler to implement. When making a monolithic request
for all of the repository data, recovering from an interrupted clone
is hard because the server was in the driver's seat and was maintaining
state about all the data that needed transferred. With the client
driving fetching, the client can persist the set of unfetched entities
and retry/resume a fetch if something goes wrong. Or we can fetch all
data N changesets at a time and slowly build up a repository. This
approach is drastically easier to implement when we have server APIs
exposing low-level repository primitives (such as manifests and files).
We don't yet support tree manifests. But it should be possible to
implement that with the existing wire protocol command.
Differential Revision: https://phab.mercurial-scm.org/D4489
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Wed, 05 Sep 2018 09:09:57 -0700 |
parents | 43b3b761d9d1 |
children |
rev | line source |
---|---|
12421 | 1 Test adding .hgeol |
11249
0bb67503ad4b
eol: extension for managing file EOLs
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
2 |
13519
43b3b761d9d1
tests: don't overwrite HGRCPATH
Martin Geisler <mg@aragost.com>
parents:
12943
diff
changeset
|
3 $ cat >> $HGRCPATH <<EOF |
12421 | 4 > [diff] |
5 > git = 1 | |
6 > EOF | |
7 $ seteol () { | |
8 > if [ $1 = "LF" ]; then | |
9 > EOL='\n' | |
10 > else | |
11 > EOL='\r\n' | |
12 > fi | |
13 > } | |
14 $ makerepo () { | |
15 > echo | |
16 > echo "# ==== setup repository ====" | |
17 > echo '% hg init' | |
18 > hg init repo | |
19 > cd repo | |
20 > printf "first\nsecond\nthird\n" > a.txt | |
21 > hg commit -d '100 0' --addremove -m 'LF commit' | |
22 > cd .. | |
23 > } | |
24 $ dotest () { | |
25 > seteol $1 | |
26 > echo | |
27 > echo "% hg clone repo repo-$1" | |
28 > hg clone repo repo-$1 | |
29 > cd repo-$1 | |
30 > cat > .hg/hgrc <<EOF | |
31 > [extensions] | |
32 > eol = | |
33 > [eol] | |
34 > native = LF | |
35 > EOF | |
36 > cat > .hgeol <<EOF | |
37 > [patterns] | |
38 > **.txt = native | |
39 > [repository] | |
40 > native = $1 | |
41 > EOF | |
42 > echo '% hg add .hgeol' | |
43 > hg add .hgeol | |
44 > echo '% hg status' | |
45 > hg status | |
46 > echo '% hg commit' | |
47 > hg commit -d '200 0' -m 'Added .hgeol file' | |
48 > echo '% hg status' | |
49 > hg status | |
50 > echo '% hg tip -p' | |
12943
7439ea4146f8
tests: use (esc) instead of other kinds of string escaping
Mads Kiilerich <mads@kiilerich.com>
parents:
12421
diff
changeset
|
51 > hg tip -p |
12421 | 52 > cd .. |
53 > rm -r repo-$1 | |
54 > } | |
55 $ makerepo | |
56 | |
57 # ==== setup repository ==== | |
58 % hg init | |
59 adding a.txt | |
60 $ dotest LF | |
61 | |
62 % hg clone repo repo-LF | |
63 updating to branch default | |
64 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
65 % hg add .hgeol | |
66 % hg status | |
67 A .hgeol | |
68 % hg commit | |
69 % hg status | |
70 % hg tip -p | |
71 changeset: 1:33503edb53b0 | |
72 tag: tip | |
73 user: test | |
74 date: Thu Jan 01 00:03:20 1970 +0000 | |
75 summary: Added .hgeol file | |
76 | |
77 diff --git a/.hgeol b/.hgeol | |
78 new file mode 100644 | |
79 --- /dev/null | |
80 +++ b/.hgeol | |
81 @@ -0,0 +1,4 @@ | |
82 +[patterns] | |
83 +**.txt = native | |
84 +[repository] | |
85 +native = LF | |
86 | |
87 $ dotest CRLF | |
88 | |
89 % hg clone repo repo-CRLF | |
90 updating to branch default | |
91 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
92 % hg add .hgeol | |
93 % hg status | |
94 M a.txt | |
95 A .hgeol | |
96 % hg commit | |
97 % hg status | |
98 % hg tip -p | |
99 changeset: 1:6e64eaa9eb23 | |
100 tag: tip | |
101 user: test | |
102 date: Thu Jan 01 00:03:20 1970 +0000 | |
103 summary: Added .hgeol file | |
104 | |
105 diff --git a/.hgeol b/.hgeol | |
106 new file mode 100644 | |
107 --- /dev/null | |
108 +++ b/.hgeol | |
109 @@ -0,0 +1,4 @@ | |
110 +[patterns] | |
111 +**.txt = native | |
112 +[repository] | |
113 +native = CRLF | |
114 diff --git a/a.txt b/a.txt | |
115 --- a/a.txt | |
116 +++ b/a.txt | |
117 @@ -1,3 +1,3 @@ | |
118 -first | |
119 -second | |
120 -third | |
12943
7439ea4146f8
tests: use (esc) instead of other kinds of string escaping
Mads Kiilerich <mads@kiilerich.com>
parents:
12421
diff
changeset
|
121 +first\r (esc) |
7439ea4146f8
tests: use (esc) instead of other kinds of string escaping
Mads Kiilerich <mads@kiilerich.com>
parents:
12421
diff
changeset
|
122 +second\r (esc) |
7439ea4146f8
tests: use (esc) instead of other kinds of string escaping
Mads Kiilerich <mads@kiilerich.com>
parents:
12421
diff
changeset
|
123 +third\r (esc) |
12421 | 124 |
125 $ rm -r repo |