Mercurial > hg
comparison tests/test-remotefilelog-prefetch.t @ 40495:3a333a582d7b
remotefilelog: import pruned-down remotefilelog extension from hg-experimental
This is remotefilelog as of my recent patches for compatibility with
current tip of hg, minus support for old versions of Mercurial and
some FB-specific features like their treemanifest extension and
fetching linkrev data from a patched phabricator. The file extutil.py
moved from hgext3rd to remotefilelog.
This is not yet ready to be landed, consider it a preview for
now. Planned changes include:
* replace lz4 with zstd
* rename some capabilities, requirements and wireproto commands to mark
them as experimental
* consolidate bits of shallowutil with related functions (eg readfile)
I'm certainly open to other (small) changes, but my rough mission is
to land this largely as-is so we can use it as a model of the
functionality we need going forward for lazy-fetching of file contents
from a server.
# no-check-commit because of a few foo_bar functions
Differential Revision: https://phab.mercurial-scm.org/D4782
author | Augie Fackler <augie@google.com> |
---|---|
date | Thu, 27 Sep 2018 13:03:19 -0400 |
parents | |
children | 6d64e2abe8d3 |
comparison
equal
deleted
inserted
replaced
40494:9aeb9e2d28a7 | 40495:3a333a582d7b |
---|---|
1 $ PYTHONPATH=$TESTDIR/..:$PYTHONPATH | |
2 $ export PYTHONPATH | |
3 | |
4 $ . "$TESTDIR/remotefilelog-library.sh" | |
5 | |
6 $ hginit master | |
7 $ cd master | |
8 $ cat >> .hg/hgrc <<EOF | |
9 > [remotefilelog] | |
10 > server=True | |
11 > EOF | |
12 $ echo x > x | |
13 $ echo z > z | |
14 $ hg commit -qAm x | |
15 $ echo x2 > x | |
16 $ echo y > y | |
17 $ hg commit -qAm y | |
18 $ hg bookmark foo | |
19 | |
20 $ cd .. | |
21 | |
22 # prefetch a revision | |
23 | |
24 $ hgcloneshallow ssh://user@dummy/master shallow --noupdate | |
25 streaming all changes | |
26 2 files to transfer, 528 bytes of data | |
27 transferred 528 bytes in * seconds (*/sec) (glob) | |
28 searching for changes | |
29 no changes found | |
30 $ cd shallow | |
31 | |
32 $ hg prefetch -r 0 | |
33 2 files fetched over 1 fetches - (2 misses, 0.00% hit ratio) over *s (glob) | |
34 | |
35 $ hg cat -r 0 x | |
36 x | |
37 | |
38 # prefetch with base | |
39 | |
40 $ clearcache | |
41 $ hg prefetch -r 0::1 -b 0 | |
42 2 files fetched over 1 fetches - (2 misses, 0.00% hit ratio) over *s (glob) | |
43 | |
44 $ hg cat -r 1 x | |
45 x2 | |
46 $ hg cat -r 1 y | |
47 y | |
48 | |
49 $ hg cat -r 0 x | |
50 x | |
51 1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over *s (glob) | |
52 | |
53 $ hg cat -r 0 z | |
54 z | |
55 1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over *s (glob) | |
56 | |
57 $ hg prefetch -r 0::1 --base 0 | |
58 $ hg prefetch -r 0::1 -b 1 | |
59 $ hg prefetch -r 0::1 | |
60 | |
61 # prefetch a range of revisions | |
62 | |
63 $ clearcache | |
64 $ hg prefetch -r 0::1 | |
65 4 files fetched over 1 fetches - (4 misses, 0.00% hit ratio) over *s (glob) | |
66 | |
67 $ hg cat -r 0 x | |
68 x | |
69 $ hg cat -r 1 x | |
70 x2 | |
71 | |
72 # prefetch certain files | |
73 | |
74 $ clearcache | |
75 $ hg prefetch -r 1 x | |
76 1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over *s (glob) | |
77 | |
78 $ hg cat -r 1 x | |
79 x2 | |
80 | |
81 $ hg cat -r 1 y | |
82 y | |
83 1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over *s (glob) | |
84 | |
85 # prefetch on pull when configured | |
86 | |
87 $ printf "[remotefilelog]\npullprefetch=bookmark()\n" >> .hg/hgrc | |
88 $ hg strip tip | |
89 saved backup bundle to $TESTTMP/shallow/.hg/strip-backup/109c3a557a73-3f43405e-backup.hg (glob) | |
90 | |
91 $ clearcache | |
92 $ hg pull | |
93 pulling from ssh://user@dummy/master | |
94 searching for changes | |
95 adding changesets | |
96 adding manifests | |
97 adding file changes | |
98 added 1 changesets with 0 changes to 0 files | |
99 updating bookmark foo | |
100 new changesets 109c3a557a73 | |
101 (run 'hg update' to get a working copy) | |
102 prefetching file contents | |
103 3 files fetched over 1 fetches - (3 misses, 0.00% hit ratio) over *s (glob) | |
104 | |
105 $ hg up tip | |
106 3 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
107 | |
108 # prefetch only fetches changes not in working copy | |
109 | |
110 $ hg strip tip | |
111 1 files updated, 0 files merged, 1 files removed, 0 files unresolved | |
112 saved backup bundle to $TESTTMP/shallow/.hg/strip-backup/109c3a557a73-3f43405e-backup.hg (glob) | |
113 1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over *s (glob) | |
114 $ clearcache | |
115 | |
116 $ hg pull | |
117 pulling from ssh://user@dummy/master | |
118 searching for changes | |
119 adding changesets | |
120 adding manifests | |
121 adding file changes | |
122 added 1 changesets with 0 changes to 0 files | |
123 updating bookmark foo | |
124 new changesets 109c3a557a73 | |
125 (run 'hg update' to get a working copy) | |
126 prefetching file contents | |
127 2 files fetched over 1 fetches - (2 misses, 0.00% hit ratio) over *s (glob) | |
128 | |
129 # Make some local commits that produce the same file versions as are on the | |
130 # server. To simulate a situation where we have local commits that were somehow | |
131 # pushed, and we will soon pull. | |
132 | |
133 $ hg prefetch -r 'all()' | |
134 2 files fetched over 1 fetches - (2 misses, 0.00% hit ratio) over *s (glob) | |
135 $ hg strip -q -r 0 | |
136 $ echo x > x | |
137 $ echo z > z | |
138 $ hg commit -qAm x | |
139 $ echo x2 > x | |
140 $ echo y > y | |
141 $ hg commit -qAm y | |
142 | |
143 # prefetch server versions, even if local versions are available | |
144 | |
145 $ clearcache | |
146 $ hg strip -q tip | |
147 $ hg pull | |
148 pulling from ssh://user@dummy/master | |
149 searching for changes | |
150 adding changesets | |
151 adding manifests | |
152 adding file changes | |
153 added 1 changesets with 0 changes to 0 files | |
154 updating bookmark foo | |
155 new changesets 109c3a557a73 | |
156 1 local changesets published (?) | |
157 (run 'hg update' to get a working copy) | |
158 prefetching file contents | |
159 2 files fetched over 1 fetches - (2 misses, 0.00% hit ratio) over *s (glob) | |
160 | |
161 $ cd .. | |
162 | |
163 # Prefetch unknown files during checkout | |
164 | |
165 $ hgcloneshallow ssh://user@dummy/master shallow2 | |
166 streaming all changes | |
167 2 files to transfer, 528 bytes of data | |
168 transferred 528 bytes in * seconds * (glob) | |
169 searching for changes | |
170 no changes found | |
171 updating to branch default | |
172 3 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
173 1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over * (glob) | |
174 $ cd shallow2 | |
175 $ hg up -q null | |
176 $ echo x > x | |
177 $ echo y > y | |
178 $ echo z > z | |
179 $ clearcache | |
180 $ hg up tip | |
181 x: untracked file differs | |
182 3 files fetched over 1 fetches - (3 misses, 0.00% hit ratio) over * (glob) | |
183 abort: untracked files in working directory differ from files in requested revision | |
184 [255] | |
185 $ hg revert --all | |
186 | |
187 # Test batch fetching of lookup files during hg status | |
188 $ hg up --clean tip | |
189 3 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
190 $ hg debugrebuilddirstate | |
191 $ clearcache | |
192 $ hg status | |
193 3 files fetched over 1 fetches - (3 misses, 0.00% hit ratio) over * (glob) | |
194 | |
195 # Prefetch during addrename detection | |
196 $ hg up -q --clean tip | |
197 $ hg revert --all | |
198 $ mv x x2 | |
199 $ mv y y2 | |
200 $ mv z z2 | |
201 $ clearcache | |
202 $ hg addremove -s 50 > /dev/null | |
203 3 files fetched over 1 fetches - (3 misses, 0.00% hit ratio) over * (glob) | |
204 | |
205 $ cd .. | |
206 | |
207 # Prefetch packs | |
208 $ hgcloneshallow ssh://user@dummy/master packprefetch | |
209 streaming all changes | |
210 2 files to transfer, 528 bytes of data | |
211 transferred 528 bytes in * seconds (*/sec) (glob) | |
212 searching for changes | |
213 no changes found | |
214 updating to branch default | |
215 3 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
216 $ cd packprefetch | |
217 $ cat >> .hg/hgrc <<EOF | |
218 > [remotefilelog] | |
219 > fetchpacks=True | |
220 > backgroundrepack=True | |
221 > EOF | |
222 $ clearcache | |
223 $ hg prefetch -r . | |
224 3 files fetched over 1 fetches - (0 misses, 100.00% hit ratio) over * (glob) | |
225 $ find $TESTTMP/hgcache -type f | sort | |
226 $TESTTMP/hgcache/master/packs/47d8f1b90a73af4ff8af19fcd10bdc027b6a881a.histidx | |
227 $TESTTMP/hgcache/master/packs/47d8f1b90a73af4ff8af19fcd10bdc027b6a881a.histpack | |
228 $TESTTMP/hgcache/master/packs/8c654541e4f20141a894bbfe428e36fc92202e39.dataidx | |
229 $TESTTMP/hgcache/master/packs/8c654541e4f20141a894bbfe428e36fc92202e39.datapack | |
230 $ hg cat -r . x | |
231 x2 | |
232 $ hg cat -r . y | |
233 y | |
234 $ hg cat -r . z | |
235 z | |
236 | |
237 # Prefetch packs that include renames | |
238 $ cd ../master | |
239 $ hg mv z z2 | |
240 $ hg commit -m 'move z -> z2' | |
241 $ cd ../packprefetch | |
242 $ hg pull -q | |
243 (running background incremental repack) | |
244 $ hg prefetch -r tip | |
245 1 files fetched over 1 fetches - (0 misses, 100.00% hit ratio) over * (glob) | |
246 $ hg up tip -q | |
247 $ hg log -f z2 -T '{desc}\n' | |
248 move z -> z2 | |
249 x | |
250 | |
251 # Revert across double renames. Note: the scary "abort", error is because | |
252 # https://bz.mercurial-scm.org/5419 . | |
253 | |
254 $ clearcache | |
255 $ hg mv y y2 | |
256 $ hg mv x x2 | |
257 $ hg mv z2 z3 | |
258 $ hg revert -a -r 1 || true | |
259 forgetting x2 | |
260 forgetting y2 | |
261 forgetting z3 | |
262 adding z | |
263 undeleting x | |
264 undeleting y | |
265 3 files fetched over 1 fetches - (0 misses, 100.00% hit ratio) over * (glob) | |
266 abort: z2@109c3a557a73: not found in manifest! (?) |