comparison tests/test-remotefilelog-linknodes.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 95a079ea1e19
comparison
equal deleted inserted replaced
40494:9aeb9e2d28a7 40495:3a333a582d7b
1 $ PYTHONPATH=$TESTDIR/..:$PYTHONPATH
2 $ export PYTHONPATH
3
4 # Tests for the complicated linknode logic in remotefilelog.py::ancestormap()
5
6 $ . "$TESTDIR/remotefilelog-library.sh"
7
8 $ hginit master
9 $ cd master
10 $ cat >> .hg/hgrc <<EOF
11 > [remotefilelog]
12 > server=True
13 > serverexpiration=-1
14 > EOF
15 $ echo x > x
16 $ hg commit -qAm x
17 $ cd ..
18
19 $ hgcloneshallow ssh://user@dummy/master shallow -q
20 1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over *s (glob)
21
22 # Rebase produces correct log -f linknodes
23
24 $ cd shallow
25 $ echo y > y
26 $ hg commit -qAm y
27 $ hg up 0
28 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
29 $ echo x >> x
30 $ hg commit -qAm xx
31 $ hg log -f x --template "{node|short}\n"
32 0632994590a8
33 b292c1e3311f
34
35 $ hg rebase -d 1
36 rebasing 2:0632994590a8 "xx" (tip)
37 saved backup bundle to $TESTTMP/shallow/.hg/strip-backup/0632994590a8-0bc786d8-rebase.hg (glob)
38 $ hg log -f x --template "{node|short}\n"
39 81deab2073bc
40 b292c1e3311f
41
42 # Rebase back, log -f still works
43
44 $ hg rebase -d 0 -r 2
45 rebasing 2:81deab2073bc "xx" (tip)
46 saved backup bundle to $TESTTMP/shallow/.hg/strip-backup/81deab2073bc-80cb4fda-rebase.hg (glob)
47 $ hg log -f x --template "{node|short}\n"
48 b3fca10fb42d
49 b292c1e3311f
50
51 $ hg rebase -d 1 -r 2
52 rebasing 2:b3fca10fb42d "xx" (tip)
53 saved backup bundle to $TESTTMP/shallow/.hg/strip-backup/b3fca10fb42d-da73a0c7-rebase.hg (glob)
54
55 $ cd ..
56
57 # Reset repos
58 $ clearcache
59
60 $ rm -rf master
61 $ rm -rf shallow
62 $ hginit master
63 $ cd master
64 $ cat >> .hg/hgrc <<EOF
65 > [remotefilelog]
66 > server=True
67 > serverexpiration=-1
68 > EOF
69 $ echo x > x
70 $ hg commit -qAm x
71 $ cd ..
72
73 $ hgcloneshallow ssh://user@dummy/master shallow -q
74 1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over *s (glob)
75
76 # Rebase stack onto landed commit
77
78 $ cd master
79 $ echo x >> x
80 $ hg commit -Aqm xx
81
82 $ cd ../shallow
83 $ echo x >> x
84 $ hg commit -Aqm xx2
85 $ echo y >> x
86 $ hg commit -Aqm xxy
87
88 $ hg pull -q
89 $ hg rebase -d tip
90 rebasing 1:4549721d828f "xx2"
91 note: rebase of 1:4549721d828f created no changes to commit
92 rebasing 2:5ef6d97e851c "xxy"
93 saved backup bundle to $TESTTMP/shallow/.hg/strip-backup/4549721d828f-b084e33c-rebase.hg (glob)
94 $ hg log -f x --template '{node|short}\n'
95 4ae8e31c85ef
96 0632994590a8
97 b292c1e3311f
98
99 $ cd ..
100
101 # system cache has invalid linknode, but .hg/store/data has valid
102
103 $ cd shallow
104 $ hg strip -r 1 -q
105 $ rm -rf .hg/store/data/*
106 $ echo x >> x
107 $ hg commit -Aqm xx_local
108 $ hg log -f x --template '{rev}:{node|short}\n'
109 1:21847713771d
110 0:b292c1e3311f
111
112 $ cd ..
113 $ rm -rf shallow
114
115 /* Local linknode is invalid; remote linknode is valid (formerly slow case) */
116
117 $ hgcloneshallow ssh://user@dummy/master shallow -q
118 1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over * (glob)
119 $ cd shallow
120 $ echo x >> x
121 $ hg commit -Aqm xx2
122 $ cd ../master
123 $ echo y >> y
124 $ hg commit -Aqm yy2
125 $ echo x >> x
126 $ hg commit -Aqm xx2-fake-rebased
127 $ echo y >> y
128 $ hg commit -Aqm yy3
129 $ cd ../shallow
130 $ hg pull --config remotefilelog.debug=True
131 pulling from ssh://user@dummy/master
132 searching for changes
133 adding changesets
134 adding manifests
135 adding file changes
136 added 3 changesets with 0 changes to 0 files (+1 heads)
137 new changesets 01979f9404f8:7200df4e0aca
138 (run 'hg heads' to see heads, 'hg merge' to merge)
139 $ hg update tip -q
140 1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over *s (glob)
141 $ echo x > x
142 $ hg commit -qAm xx3
143
144 # At this point, the linknode points to c1254e70bad1 instead of 32e6611f6149
145 $ hg log -G -T '{node|short} {desc} {phase} {files}\n'
146 @ a5957b6bf0bd xx3 draft x
147 |
148 o 7200df4e0aca yy3 public y
149 |
150 o 32e6611f6149 xx2-fake-rebased public x
151 |
152 o 01979f9404f8 yy2 public y
153 |
154 | o c1254e70bad1 xx2 draft x
155 |/
156 o 0632994590a8 xx public x
157 |
158 o b292c1e3311f x public x
159
160 # Check the contents of the local blob for incorrect linknode
161 $ hg debugremotefilelog .hg/store/data/11f6ad8ec52a2984abaafd7c3b516503785c2072/d4a3ed9310e5bd9887e3bf779da5077efab28216
162 size: 6 bytes
163 path: .hg/store/data/11f6ad8ec52a2984abaafd7c3b516503785c2072/d4a3ed9310e5bd9887e3bf779da5077efab28216
164 key: d4a3ed9310e5
165
166 node => p1 p2 linknode copyfrom
167 d4a3ed9310e5 => aee31534993a 000000000000 c1254e70bad1
168 aee31534993a => 1406e7411862 000000000000 0632994590a8
169 1406e7411862 => 000000000000 000000000000 b292c1e3311f
170
171 # Verify that we do a fetch on the first log (remote blob fetch for linkrev fix)
172 $ hg log -f x -T '{node|short} {desc} {phase} {files}\n'
173 a5957b6bf0bd xx3 draft x
174 32e6611f6149 xx2-fake-rebased public x
175 0632994590a8 xx public x
176 b292c1e3311f x public x
177 1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over *s (glob)
178
179 # But not after that
180 $ hg log -f x -T '{node|short} {desc} {phase} {files}\n'
181 a5957b6bf0bd xx3 draft x
182 32e6611f6149 xx2-fake-rebased public x
183 0632994590a8 xx public x
184 b292c1e3311f x public x
185
186 # Check the contents of the remote blob for correct linknode
187 $ hg debugremotefilelog $CACHEDIR/master/11/f6ad8ec52a2984abaafd7c3b516503785c2072/d4a3ed9310e5bd9887e3bf779da5077efab28216
188 size: 6 bytes
189 path: $TESTTMP/hgcache/master/11/f6ad8ec52a2984abaafd7c3b516503785c2072/d4a3ed9310e5bd9887e3bf779da5077efab28216
190 key: d4a3ed9310e5
191
192 node => p1 p2 linknode copyfrom
193 d4a3ed9310e5 => aee31534993a 000000000000 32e6611f6149
194 aee31534993a => 1406e7411862 000000000000 0632994590a8
195 1406e7411862 => 000000000000 000000000000 b292c1e3311f