##// END OF EJS Templates
test: use `hg debugrequires` instead of `cat` in some tests...
marmoute -
r49295:5e654214 default
parent child Browse files
Show More
@@ -1,316 +1,316 b''
1 This test tries to exercise the ssh functionality with a dummy script
1 This test tries to exercise the ssh functionality with a dummy script
2
2
3 $ checknewrepo()
3 $ checknewrepo()
4 > {
4 > {
5 > name=$1
5 > name=$1
6 > if [ -d "$name"/.hg/store ]; then
6 > if [ -d "$name"/.hg/store ]; then
7 > echo store created
7 > echo store created
8 > fi
8 > fi
9 > if [ -f "$name"/.hg/00changelog.i ]; then
9 > if [ -f "$name"/.hg/00changelog.i ]; then
10 > echo 00changelog.i created
10 > echo 00changelog.i created
11 > fi
11 > fi
12 > cat "$name"/.hg/requires
12 > hg debugrequires -R "$name"
13 > }
13 > }
14
14
15 creating 'local'
15 creating 'local'
16
16
17 $ hg init local
17 $ hg init local
18 $ checknewrepo local
18 $ checknewrepo local
19 store created
19 store created
20 00changelog.i created
20 00changelog.i created
21 dotencode
21 dotencode
22 dirstate-v2 (dirstate-v2 !)
22 dirstate-v2 (dirstate-v2 !)
23 fncache
23 fncache
24 generaldelta
24 generaldelta
25 persistent-nodemap (rust !)
25 persistent-nodemap (rust !)
26 revlog-compression-zstd (zstd !)
26 revlog-compression-zstd (zstd !)
27 revlogv1
27 revlogv1
28 sparserevlog
28 sparserevlog
29 store
29 store
30 testonly-simplestore (reposimplestore !)
30 testonly-simplestore (reposimplestore !)
31 $ echo this > local/foo
31 $ echo this > local/foo
32 $ hg ci --cwd local -A -m "init"
32 $ hg ci --cwd local -A -m "init"
33 adding foo
33 adding foo
34
34
35 test custom revlog chunk cache sizes
35 test custom revlog chunk cache sizes
36
36
37 $ hg --config format.chunkcachesize=0 log -R local -pv
37 $ hg --config format.chunkcachesize=0 log -R local -pv
38 abort: revlog chunk cache size 0 is not greater than 0
38 abort: revlog chunk cache size 0 is not greater than 0
39 [50]
39 [50]
40 $ hg --config format.chunkcachesize=1023 log -R local -pv
40 $ hg --config format.chunkcachesize=1023 log -R local -pv
41 abort: revlog chunk cache size 1023 is not a power of 2
41 abort: revlog chunk cache size 1023 is not a power of 2
42 [50]
42 [50]
43 $ hg --config format.chunkcachesize=1024 log -R local -pv
43 $ hg --config format.chunkcachesize=1024 log -R local -pv
44 changeset: 0:08b9e9f63b32
44 changeset: 0:08b9e9f63b32
45 tag: tip
45 tag: tip
46 user: test
46 user: test
47 date: Thu Jan 01 00:00:00 1970 +0000
47 date: Thu Jan 01 00:00:00 1970 +0000
48 files: foo
48 files: foo
49 description:
49 description:
50 init
50 init
51
51
52
52
53 diff -r 000000000000 -r 08b9e9f63b32 foo
53 diff -r 000000000000 -r 08b9e9f63b32 foo
54 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
54 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
55 +++ b/foo Thu Jan 01 00:00:00 1970 +0000
55 +++ b/foo Thu Jan 01 00:00:00 1970 +0000
56 @@ -0,0 +1,1 @@
56 @@ -0,0 +1,1 @@
57 +this
57 +this
58
58
59
59
60 creating repo with format.usestore=false
60 creating repo with format.usestore=false
61
61
62 $ hg --config format.usestore=false init old
62 $ hg --config format.usestore=false init old
63 $ checknewrepo old
63 $ checknewrepo old
64 dirstate-v2 (dirstate-v2 !)
64 dirstate-v2 (dirstate-v2 !)
65 generaldelta
65 generaldelta
66 persistent-nodemap (rust !)
66 persistent-nodemap (rust !)
67 revlog-compression-zstd (zstd !)
67 revlog-compression-zstd (zstd !)
68 revlogv1
68 revlogv1
69 testonly-simplestore (reposimplestore !)
69 testonly-simplestore (reposimplestore !)
70 sparserevlog
70 sparserevlog
71
71
72 creating repo with format.usefncache=false
72 creating repo with format.usefncache=false
73
73
74 $ hg --config format.usefncache=false init old2
74 $ hg --config format.usefncache=false init old2
75 $ checknewrepo old2
75 $ checknewrepo old2
76 store created
76 store created
77 00changelog.i created
77 00changelog.i created
78 dirstate-v2 (dirstate-v2 !)
78 dirstate-v2 (dirstate-v2 !)
79 generaldelta
79 generaldelta
80 persistent-nodemap (rust !)
80 persistent-nodemap (rust !)
81 revlog-compression-zstd (zstd !)
81 revlog-compression-zstd (zstd !)
82 revlogv1
82 revlogv1
83 sparserevlog
83 sparserevlog
84 store
84 store
85 testonly-simplestore (reposimplestore !)
85 testonly-simplestore (reposimplestore !)
86
86
87 creating repo with format.dotencode=false
87 creating repo with format.dotencode=false
88
88
89 $ hg --config format.dotencode=false init old3
89 $ hg --config format.dotencode=false init old3
90 $ checknewrepo old3
90 $ checknewrepo old3
91 store created
91 store created
92 00changelog.i created
92 00changelog.i created
93 dirstate-v2 (dirstate-v2 !)
93 dirstate-v2 (dirstate-v2 !)
94 fncache
94 fncache
95 generaldelta
95 generaldelta
96 persistent-nodemap (rust !)
96 persistent-nodemap (rust !)
97 revlog-compression-zstd (zstd !)
97 revlog-compression-zstd (zstd !)
98 revlogv1
98 revlogv1
99 sparserevlog
99 sparserevlog
100 store
100 store
101 testonly-simplestore (reposimplestore !)
101 testonly-simplestore (reposimplestore !)
102
102
103 creating repo with format.dotencode=false
103 creating repo with format.dotencode=false
104
104
105 $ hg --config format.generaldelta=false --config format.usegeneraldelta=false --config format.sparse-revlog=no init old4
105 $ hg --config format.generaldelta=false --config format.usegeneraldelta=false --config format.sparse-revlog=no init old4
106 $ checknewrepo old4
106 $ checknewrepo old4
107 store created
107 store created
108 00changelog.i created
108 00changelog.i created
109 dotencode
109 dotencode
110 dirstate-v2 (dirstate-v2 !)
110 dirstate-v2 (dirstate-v2 !)
111 fncache
111 fncache
112 persistent-nodemap (rust !)
112 persistent-nodemap (rust !)
113 revlog-compression-zstd (zstd !)
113 revlog-compression-zstd (zstd !)
114 revlogv1
114 revlogv1
115 store
115 store
116 testonly-simplestore (reposimplestore !)
116 testonly-simplestore (reposimplestore !)
117
117
118 test failure
118 test failure
119
119
120 $ hg init local
120 $ hg init local
121 abort: repository local already exists
121 abort: repository local already exists
122 [255]
122 [255]
123
123
124 init+push to remote2
124 init+push to remote2
125
125
126 $ hg init ssh://user@dummy/remote2
126 $ hg init ssh://user@dummy/remote2
127 $ hg incoming -R remote2 local
127 $ hg incoming -R remote2 local
128 comparing with local
128 comparing with local
129 changeset: 0:08b9e9f63b32
129 changeset: 0:08b9e9f63b32
130 tag: tip
130 tag: tip
131 user: test
131 user: test
132 date: Thu Jan 01 00:00:00 1970 +0000
132 date: Thu Jan 01 00:00:00 1970 +0000
133 summary: init
133 summary: init
134
134
135
135
136 $ hg push -R local ssh://user@dummy/remote2
136 $ hg push -R local ssh://user@dummy/remote2
137 pushing to ssh://user@dummy/remote2
137 pushing to ssh://user@dummy/remote2
138 searching for changes
138 searching for changes
139 remote: adding changesets
139 remote: adding changesets
140 remote: adding manifests
140 remote: adding manifests
141 remote: adding file changes
141 remote: adding file changes
142 remote: added 1 changesets with 1 changes to 1 files
142 remote: added 1 changesets with 1 changes to 1 files
143
143
144 clone to remote1
144 clone to remote1
145
145
146 $ hg clone local ssh://user@dummy/remote1
146 $ hg clone local ssh://user@dummy/remote1
147 searching for changes
147 searching for changes
148 remote: adding changesets
148 remote: adding changesets
149 remote: adding manifests
149 remote: adding manifests
150 remote: adding file changes
150 remote: adding file changes
151 remote: added 1 changesets with 1 changes to 1 files
151 remote: added 1 changesets with 1 changes to 1 files
152
152
153 The largefiles extension doesn't crash
153 The largefiles extension doesn't crash
154 $ hg clone local ssh://user@dummy/remotelf --config extensions.largefiles=
154 $ hg clone local ssh://user@dummy/remotelf --config extensions.largefiles=
155 The fsmonitor extension is incompatible with the largefiles extension and has been disabled. (fsmonitor !)
155 The fsmonitor extension is incompatible with the largefiles extension and has been disabled. (fsmonitor !)
156 The fsmonitor extension is incompatible with the largefiles extension and has been disabled. (fsmonitor !)
156 The fsmonitor extension is incompatible with the largefiles extension and has been disabled. (fsmonitor !)
157 searching for changes
157 searching for changes
158 remote: adding changesets
158 remote: adding changesets
159 remote: adding manifests
159 remote: adding manifests
160 remote: adding file changes
160 remote: adding file changes
161 remote: added 1 changesets with 1 changes to 1 files
161 remote: added 1 changesets with 1 changes to 1 files
162
162
163 init to existing repo
163 init to existing repo
164
164
165 $ hg init ssh://user@dummy/remote1
165 $ hg init ssh://user@dummy/remote1
166 abort: repository remote1 already exists
166 abort: repository remote1 already exists
167 abort: could not create remote repo
167 abort: could not create remote repo
168 [255]
168 [255]
169
169
170 clone to existing repo
170 clone to existing repo
171
171
172 $ hg clone local ssh://user@dummy/remote1
172 $ hg clone local ssh://user@dummy/remote1
173 abort: repository remote1 already exists
173 abort: repository remote1 already exists
174 abort: could not create remote repo
174 abort: could not create remote repo
175 [255]
175 [255]
176
176
177 output of dummyssh
177 output of dummyssh
178
178
179 $ cat dummylog
179 $ cat dummylog
180 Got arguments 1:user@dummy 2:hg init remote2
180 Got arguments 1:user@dummy 2:hg init remote2
181 Got arguments 1:user@dummy 2:hg -R remote2 serve --stdio
181 Got arguments 1:user@dummy 2:hg -R remote2 serve --stdio
182 Got arguments 1:user@dummy 2:hg -R remote2 serve --stdio
182 Got arguments 1:user@dummy 2:hg -R remote2 serve --stdio
183 Got arguments 1:user@dummy 2:hg init remote1
183 Got arguments 1:user@dummy 2:hg init remote1
184 Got arguments 1:user@dummy 2:hg -R remote1 serve --stdio
184 Got arguments 1:user@dummy 2:hg -R remote1 serve --stdio
185 Got arguments 1:user@dummy 2:hg init remotelf
185 Got arguments 1:user@dummy 2:hg init remotelf
186 Got arguments 1:user@dummy 2:hg -R remotelf serve --stdio
186 Got arguments 1:user@dummy 2:hg -R remotelf serve --stdio
187 Got arguments 1:user@dummy 2:hg init remote1
187 Got arguments 1:user@dummy 2:hg init remote1
188 Got arguments 1:user@dummy 2:hg init remote1
188 Got arguments 1:user@dummy 2:hg init remote1
189
189
190 comparing repositories
190 comparing repositories
191
191
192 $ hg tip -q -R local
192 $ hg tip -q -R local
193 0:08b9e9f63b32
193 0:08b9e9f63b32
194 $ hg tip -q -R remote1
194 $ hg tip -q -R remote1
195 0:08b9e9f63b32
195 0:08b9e9f63b32
196 $ hg tip -q -R remote2
196 $ hg tip -q -R remote2
197 0:08b9e9f63b32
197 0:08b9e9f63b32
198
198
199 check names for repositories (clashes with URL schemes, special chars)
199 check names for repositories (clashes with URL schemes, special chars)
200
200
201 $ for i in bundle file hg http https old-http ssh static-http "with space"; do
201 $ for i in bundle file hg http https old-http ssh static-http "with space"; do
202 > printf "hg init \"$i\"... "
202 > printf "hg init \"$i\"... "
203 > hg init "$i"
203 > hg init "$i"
204 > test -d "$i" -a -d "$i/.hg" && echo "ok" || echo "failed"
204 > test -d "$i" -a -d "$i/.hg" && echo "ok" || echo "failed"
205 > done
205 > done
206 hg init "bundle"... ok
206 hg init "bundle"... ok
207 hg init "file"... ok
207 hg init "file"... ok
208 hg init "hg"... ok
208 hg init "hg"... ok
209 hg init "http"... ok
209 hg init "http"... ok
210 hg init "https"... ok
210 hg init "https"... ok
211 hg init "old-http"... ok
211 hg init "old-http"... ok
212 hg init "ssh"... ok
212 hg init "ssh"... ok
213 hg init "static-http"... ok
213 hg init "static-http"... ok
214 hg init "with space"... ok
214 hg init "with space"... ok
215 #if eol-in-paths
215 #if eol-in-paths
216 /* " " is not a valid name for a directory on Windows */
216 /* " " is not a valid name for a directory on Windows */
217 $ hg init " "
217 $ hg init " "
218 $ test -d " "
218 $ test -d " "
219 $ test -d " /.hg"
219 $ test -d " /.hg"
220 #endif
220 #endif
221
221
222 creating 'local/sub/repo'
222 creating 'local/sub/repo'
223
223
224 $ hg init local/sub/repo
224 $ hg init local/sub/repo
225 $ checknewrepo local/sub/repo
225 $ checknewrepo local/sub/repo
226 store created
226 store created
227 00changelog.i created
227 00changelog.i created
228 dotencode
228 dotencode
229 dirstate-v2 (dirstate-v2 !)
229 dirstate-v2 (dirstate-v2 !)
230 fncache
230 fncache
231 generaldelta
231 generaldelta
232 persistent-nodemap (rust !)
232 persistent-nodemap (rust !)
233 revlog-compression-zstd (zstd !)
233 revlog-compression-zstd (zstd !)
234 revlogv1
234 revlogv1
235 sparserevlog
235 sparserevlog
236 store
236 store
237 testonly-simplestore (reposimplestore !)
237 testonly-simplestore (reposimplestore !)
238
238
239 prepare test of init of url configured from paths
239 prepare test of init of url configured from paths
240
240
241 $ echo '[paths]' >> $HGRCPATH
241 $ echo '[paths]' >> $HGRCPATH
242 $ echo "somewhere = `pwd`/url from paths" >> $HGRCPATH
242 $ echo "somewhere = `pwd`/url from paths" >> $HGRCPATH
243 $ echo "elsewhere = `pwd`/another paths url" >> $HGRCPATH
243 $ echo "elsewhere = `pwd`/another paths url" >> $HGRCPATH
244
244
245 init should (for consistency with clone) expand the url
245 init should (for consistency with clone) expand the url
246
246
247 $ hg init somewhere
247 $ hg init somewhere
248 $ checknewrepo "url from paths"
248 $ checknewrepo "url from paths"
249 store created
249 store created
250 00changelog.i created
250 00changelog.i created
251 dotencode
251 dotencode
252 dirstate-v2 (dirstate-v2 !)
252 dirstate-v2 (dirstate-v2 !)
253 fncache
253 fncache
254 generaldelta
254 generaldelta
255 persistent-nodemap (rust !)
255 persistent-nodemap (rust !)
256 revlog-compression-zstd (zstd !)
256 revlog-compression-zstd (zstd !)
257 revlogv1
257 revlogv1
258 sparserevlog
258 sparserevlog
259 store
259 store
260 testonly-simplestore (reposimplestore !)
260 testonly-simplestore (reposimplestore !)
261
261
262 verify that clone also expand urls
262 verify that clone also expand urls
263
263
264 $ hg clone somewhere elsewhere
264 $ hg clone somewhere elsewhere
265 updating to branch default
265 updating to branch default
266 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
266 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
267 $ checknewrepo "another paths url"
267 $ checknewrepo "another paths url"
268 store created
268 store created
269 00changelog.i created
269 00changelog.i created
270 dotencode
270 dotencode
271 dirstate-v2 (dirstate-v2 !)
271 dirstate-v2 (dirstate-v2 !)
272 fncache
272 fncache
273 generaldelta
273 generaldelta
274 persistent-nodemap (rust !)
274 persistent-nodemap (rust !)
275 revlog-compression-zstd (zstd !)
275 revlog-compression-zstd (zstd !)
276 revlogv1
276 revlogv1
277 sparserevlog
277 sparserevlog
278 store
278 store
279 testonly-simplestore (reposimplestore !)
279 testonly-simplestore (reposimplestore !)
280
280
281 clone bookmarks
281 clone bookmarks
282
282
283 $ hg -R local bookmark test
283 $ hg -R local bookmark test
284 $ hg -R local bookmarks
284 $ hg -R local bookmarks
285 * test 0:08b9e9f63b32
285 * test 0:08b9e9f63b32
286 $ hg clone local ssh://user@dummy/remote-bookmarks
286 $ hg clone local ssh://user@dummy/remote-bookmarks
287 searching for changes
287 searching for changes
288 remote: adding changesets
288 remote: adding changesets
289 remote: adding manifests
289 remote: adding manifests
290 remote: adding file changes
290 remote: adding file changes
291 remote: added 1 changesets with 1 changes to 1 files
291 remote: added 1 changesets with 1 changes to 1 files
292 exporting bookmark test
292 exporting bookmark test
293 $ hg -R remote-bookmarks bookmarks
293 $ hg -R remote-bookmarks bookmarks
294 test 0:08b9e9f63b32
294 test 0:08b9e9f63b32
295
295
296 Check format constraint
296 Check format constraint
297 -----------------------
297 -----------------------
298
298
299 $ hg init issue6056 --config format.usegeneraldelta=0 --config format.sparse-revlog=0
299 $ hg init issue6056 --config format.usegeneraldelta=0 --config format.sparse-revlog=0
300 $ cd issue6056
300 $ cd issue6056
301 $ echo foo > 1
301 $ echo foo > 1
302 $ echo foo > 2
302 $ echo foo > 2
303 $ echo foo > 3
303 $ echo foo > 3
304 $ echo foo > 4
304 $ echo foo > 4
305 $ echo foo > 5
305 $ echo foo > 5
306 $ hg add *
306 $ hg add *
307
307
308 Build a bogus repository (sparserevlog without general delta)
308 Build a bogus repository (sparserevlog without general delta)
309
309
310 $ hg commit -m 'initial changesets'
310 $ hg commit -m 'initial changesets'
311 $ echo 'sparserevlog' >> .hg/requires
311 $ echo 'sparserevlog' >> .hg/requires
312 $ for x in `$TESTDIR/seq.py 100`; do
312 $ for x in `$TESTDIR/seq.py 100`; do
313 > echo $x >> `expr $x % 5 + 1`
313 > echo $x >> `expr $x % 5 + 1`
314 > hg commit -m $x
314 > hg commit -m $x
315 > done
315 > done
316 $ cd ..
316 $ cd ..
@@ -1,411 +1,411 b''
1 $ USERCACHE="$TESTTMP/cache"; export USERCACHE
1 $ USERCACHE="$TESTTMP/cache"; export USERCACHE
2 $ mkdir "${USERCACHE}"
2 $ mkdir "${USERCACHE}"
3 $ cat >> $HGRCPATH <<EOF
3 $ cat >> $HGRCPATH <<EOF
4 > [extensions]
4 > [extensions]
5 > largefiles =
5 > largefiles =
6 > share =
6 > share =
7 > strip =
7 > strip =
8 > convert =
8 > convert =
9 > [largefiles]
9 > [largefiles]
10 > minsize = 0.5
10 > minsize = 0.5
11 > patterns = **.other
11 > patterns = **.other
12 > **.dat
12 > **.dat
13 > usercache=${USERCACHE}
13 > usercache=${USERCACHE}
14 > EOF
14 > EOF
15
15
16 "lfconvert" works
16 "lfconvert" works
17 $ hg init bigfile-repo
17 $ hg init bigfile-repo
18 $ cd bigfile-repo
18 $ cd bigfile-repo
19 $ cat >> .hg/hgrc <<EOF
19 $ cat >> .hg/hgrc <<EOF
20 > [extensions]
20 > [extensions]
21 > largefiles = !
21 > largefiles = !
22 > EOF
22 > EOF
23 $ mkdir sub
23 $ mkdir sub
24 $ dd if=/dev/zero bs=1k count=256 > large 2> /dev/null
24 $ dd if=/dev/zero bs=1k count=256 > large 2> /dev/null
25 $ dd if=/dev/zero bs=1k count=256 > large2 2> /dev/null
25 $ dd if=/dev/zero bs=1k count=256 > large2 2> /dev/null
26 $ echo normal > normal1
26 $ echo normal > normal1
27 $ echo alsonormal > sub/normal2
27 $ echo alsonormal > sub/normal2
28 $ dd if=/dev/zero bs=1k count=10 > sub/maybelarge.dat 2> /dev/null
28 $ dd if=/dev/zero bs=1k count=10 > sub/maybelarge.dat 2> /dev/null
29 $ hg addremove
29 $ hg addremove
30 adding large
30 adding large
31 adding large2
31 adding large2
32 adding normal1
32 adding normal1
33 adding sub/maybelarge.dat
33 adding sub/maybelarge.dat
34 adding sub/normal2
34 adding sub/normal2
35 $ hg commit -m"add large, normal1" large normal1
35 $ hg commit -m"add large, normal1" large normal1
36 $ hg commit -m"add sub/*" sub
36 $ hg commit -m"add sub/*" sub
37
37
38 Test tag parsing
38 Test tag parsing
39 $ cat >> .hgtags <<EOF
39 $ cat >> .hgtags <<EOF
40 > IncorrectlyFormattedTag!
40 > IncorrectlyFormattedTag!
41 > invalidhash sometag
41 > invalidhash sometag
42 > 0123456789abcdef anothertag
42 > 0123456789abcdef anothertag
43 > EOF
43 > EOF
44 $ hg add .hgtags
44 $ hg add .hgtags
45 $ hg commit -m"add large2" large2 .hgtags
45 $ hg commit -m"add large2" large2 .hgtags
46
46
47 Test link+rename largefile codepath
47 Test link+rename largefile codepath
48 $ [ -d .hg/largefiles ] && echo fail || echo pass
48 $ [ -d .hg/largefiles ] && echo fail || echo pass
49 pass
49 pass
50 $ cd ..
50 $ cd ..
51 $ hg lfconvert --size 0.2 bigfile-repo largefiles-repo
51 $ hg lfconvert --size 0.2 bigfile-repo largefiles-repo
52 initializing destination largefiles-repo
52 initializing destination largefiles-repo
53 skipping incorrectly formatted tag IncorrectlyFormattedTag!
53 skipping incorrectly formatted tag IncorrectlyFormattedTag!
54 skipping incorrectly formatted id invalidhash
54 skipping incorrectly formatted id invalidhash
55 no mapping for id 0123456789abcdef
55 no mapping for id 0123456789abcdef
56 #if symlink
56 #if symlink
57 $ hg --cwd bigfile-repo rename large2 large3
57 $ hg --cwd bigfile-repo rename large2 large3
58 $ ln -sf large bigfile-repo/large3
58 $ ln -sf large bigfile-repo/large3
59 $ hg --cwd bigfile-repo commit -m"make large2 a symlink" large2 large3
59 $ hg --cwd bigfile-repo commit -m"make large2 a symlink" large2 large3
60 $ hg lfconvert --size 0.2 bigfile-repo largefiles-repo-symlink
60 $ hg lfconvert --size 0.2 bigfile-repo largefiles-repo-symlink
61 initializing destination largefiles-repo-symlink
61 initializing destination largefiles-repo-symlink
62 skipping incorrectly formatted tag IncorrectlyFormattedTag!
62 skipping incorrectly formatted tag IncorrectlyFormattedTag!
63 skipping incorrectly formatted id invalidhash
63 skipping incorrectly formatted id invalidhash
64 no mapping for id 0123456789abcdef
64 no mapping for id 0123456789abcdef
65 abort: renamed/copied largefile large3 becomes symlink
65 abort: renamed/copied largefile large3 becomes symlink
66 [255]
66 [255]
67 #endif
67 #endif
68 $ cd bigfile-repo
68 $ cd bigfile-repo
69 $ hg strip --no-backup 2
69 $ hg strip --no-backup 2
70 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
70 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
71 $ cd ..
71 $ cd ..
72 $ rm -rf largefiles-repo largefiles-repo-symlink
72 $ rm -rf largefiles-repo largefiles-repo-symlink
73
73
74 $ hg lfconvert --size 0.2 bigfile-repo largefiles-repo
74 $ hg lfconvert --size 0.2 bigfile-repo largefiles-repo
75 initializing destination largefiles-repo
75 initializing destination largefiles-repo
76
76
77 "lfconvert" converts content correctly
77 "lfconvert" converts content correctly
78 $ cd largefiles-repo
78 $ cd largefiles-repo
79 $ hg up
79 $ hg up
80 getting changed largefiles
80 getting changed largefiles
81 2 largefiles updated, 0 removed
81 2 largefiles updated, 0 removed
82 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
82 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
83 $ hg locate
83 $ hg locate
84 .hglf/large
84 .hglf/large
85 .hglf/sub/maybelarge.dat
85 .hglf/sub/maybelarge.dat
86 normal1
86 normal1
87 sub/normal2
87 sub/normal2
88 $ cat normal1
88 $ cat normal1
89 normal
89 normal
90 $ cat sub/normal2
90 $ cat sub/normal2
91 alsonormal
91 alsonormal
92 $ md5sum.py large sub/maybelarge.dat
92 $ md5sum.py large sub/maybelarge.dat
93 ec87a838931d4d5d2e94a04644788a55 large
93 ec87a838931d4d5d2e94a04644788a55 large
94 1276481102f218c981e0324180bafd9f sub/maybelarge.dat
94 1276481102f218c981e0324180bafd9f sub/maybelarge.dat
95
95
96 "lfconvert" adds 'largefiles' to .hg/requires.
96 "lfconvert" adds 'largefiles' to .hg/requires.
97 $ cat .hg/requires
97 $ hg debugrequires
98 dotencode
98 dotencode
99 dirstate-v2 (dirstate-v2 !)
99 dirstate-v2 (dirstate-v2 !)
100 fncache
100 fncache
101 generaldelta
101 generaldelta
102 largefiles
102 largefiles
103 persistent-nodemap (rust !)
103 persistent-nodemap (rust !)
104 revlog-compression-zstd (zstd !)
104 revlog-compression-zstd (zstd !)
105 revlogv1
105 revlogv1
106 sparserevlog
106 sparserevlog
107 store
107 store
108 testonly-simplestore (reposimplestore !)
108 testonly-simplestore (reposimplestore !)
109
109
110 "lfconvert" includes a newline at the end of the standin files.
110 "lfconvert" includes a newline at the end of the standin files.
111 $ cat .hglf/large .hglf/sub/maybelarge.dat
111 $ cat .hglf/large .hglf/sub/maybelarge.dat
112 2e000fa7e85759c7f4c254d4d9c33ef481e459a7
112 2e000fa7e85759c7f4c254d4d9c33ef481e459a7
113 34e163be8e43c5631d8b92e9c43ab0bf0fa62b9c
113 34e163be8e43c5631d8b92e9c43ab0bf0fa62b9c
114 $ cd ..
114 $ cd ..
115
115
116 add some changesets to rename/remove/merge
116 add some changesets to rename/remove/merge
117 $ cd bigfile-repo
117 $ cd bigfile-repo
118 $ hg mv -q sub stuff
118 $ hg mv -q sub stuff
119 $ hg commit -m"rename sub/ to stuff/"
119 $ hg commit -m"rename sub/ to stuff/"
120 $ hg update -q 1
120 $ hg update -q 1
121 $ echo blah >> normal3
121 $ echo blah >> normal3
122 $ echo blah >> sub/normal2
122 $ echo blah >> sub/normal2
123 $ echo blah >> sub/maybelarge.dat
123 $ echo blah >> sub/maybelarge.dat
124 $ md5sum.py sub/maybelarge.dat
124 $ md5sum.py sub/maybelarge.dat
125 1dd0b99ff80e19cff409702a1d3f5e15 sub/maybelarge.dat
125 1dd0b99ff80e19cff409702a1d3f5e15 sub/maybelarge.dat
126 $ hg commit -A -m"add normal3, modify sub/*"
126 $ hg commit -A -m"add normal3, modify sub/*"
127 adding normal3
127 adding normal3
128 created new head
128 created new head
129 $ hg rm large normal3
129 $ hg rm large normal3
130 $ hg commit -q -m"remove large, normal3"
130 $ hg commit -q -m"remove large, normal3"
131 $ hg merge
131 $ hg merge
132 tool internal:merge (for pattern stuff/maybelarge.dat) can't handle binary
132 tool internal:merge (for pattern stuff/maybelarge.dat) can't handle binary
133 no tool found to merge stuff/maybelarge.dat
133 no tool found to merge stuff/maybelarge.dat
134 file 'stuff/maybelarge.dat' needs to be resolved.
134 file 'stuff/maybelarge.dat' needs to be resolved.
135 You can keep (l)ocal [working copy], take (o)ther [merge rev], or leave (u)nresolved.
135 You can keep (l)ocal [working copy], take (o)ther [merge rev], or leave (u)nresolved.
136 What do you want to do? u
136 What do you want to do? u
137 merging sub/normal2 and stuff/normal2 to stuff/normal2
137 merging sub/normal2 and stuff/normal2 to stuff/normal2
138 0 files updated, 1 files merged, 0 files removed, 1 files unresolved
138 0 files updated, 1 files merged, 0 files removed, 1 files unresolved
139 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
139 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
140 [1]
140 [1]
141 $ hg cat -r . sub/maybelarge.dat > stuff/maybelarge.dat
141 $ hg cat -r . sub/maybelarge.dat > stuff/maybelarge.dat
142 $ hg resolve -m stuff/maybelarge.dat
142 $ hg resolve -m stuff/maybelarge.dat
143 (no more unresolved files)
143 (no more unresolved files)
144 $ hg commit -m"merge"
144 $ hg commit -m"merge"
145 $ hg log -G --template "{rev}:{node|short} {desc|firstline}\n"
145 $ hg log -G --template "{rev}:{node|short} {desc|firstline}\n"
146 @ 5:4884f215abda merge
146 @ 5:4884f215abda merge
147 |\
147 |\
148 | o 4:7285f817b77e remove large, normal3
148 | o 4:7285f817b77e remove large, normal3
149 | |
149 | |
150 | o 3:67e3892e3534 add normal3, modify sub/*
150 | o 3:67e3892e3534 add normal3, modify sub/*
151 | |
151 | |
152 o | 2:c96c8beb5d56 rename sub/ to stuff/
152 o | 2:c96c8beb5d56 rename sub/ to stuff/
153 |/
153 |/
154 o 1:020c65d24e11 add sub/*
154 o 1:020c65d24e11 add sub/*
155 |
155 |
156 o 0:117b8328f97a add large, normal1
156 o 0:117b8328f97a add large, normal1
157
157
158 $ cd ..
158 $ cd ..
159
159
160 lfconvert with rename, merge, and remove
160 lfconvert with rename, merge, and remove
161 $ rm -rf largefiles-repo
161 $ rm -rf largefiles-repo
162 $ hg lfconvert --size 0.2 bigfile-repo largefiles-repo
162 $ hg lfconvert --size 0.2 bigfile-repo largefiles-repo
163 initializing destination largefiles-repo
163 initializing destination largefiles-repo
164 $ cd largefiles-repo
164 $ cd largefiles-repo
165 $ hg log -G --template "{rev}:{node|short} {desc|firstline}\n"
165 $ hg log -G --template "{rev}:{node|short} {desc|firstline}\n"
166 o 5:9cc5aa7204f0 merge
166 o 5:9cc5aa7204f0 merge
167 |\
167 |\
168 | o 4:a5a02de7a8e4 remove large, normal3
168 | o 4:a5a02de7a8e4 remove large, normal3
169 | |
169 | |
170 | o 3:55759520c76f add normal3, modify sub/*
170 | o 3:55759520c76f add normal3, modify sub/*
171 | |
171 | |
172 o | 2:261ad3f3f037 rename sub/ to stuff/
172 o | 2:261ad3f3f037 rename sub/ to stuff/
173 |/
173 |/
174 o 1:334e5237836d add sub/*
174 o 1:334e5237836d add sub/*
175 |
175 |
176 o 0:d4892ec57ce2 add large, normal1
176 o 0:d4892ec57ce2 add large, normal1
177
177
178 $ hg locate -r 2
178 $ hg locate -r 2
179 .hglf/large
179 .hglf/large
180 .hglf/stuff/maybelarge.dat
180 .hglf/stuff/maybelarge.dat
181 normal1
181 normal1
182 stuff/normal2
182 stuff/normal2
183 $ hg locate -r 3
183 $ hg locate -r 3
184 .hglf/large
184 .hglf/large
185 .hglf/sub/maybelarge.dat
185 .hglf/sub/maybelarge.dat
186 normal1
186 normal1
187 normal3
187 normal3
188 sub/normal2
188 sub/normal2
189 $ hg locate -r 4
189 $ hg locate -r 4
190 .hglf/sub/maybelarge.dat
190 .hglf/sub/maybelarge.dat
191 normal1
191 normal1
192 sub/normal2
192 sub/normal2
193 $ hg locate -r 5
193 $ hg locate -r 5
194 .hglf/stuff/maybelarge.dat
194 .hglf/stuff/maybelarge.dat
195 normal1
195 normal1
196 stuff/normal2
196 stuff/normal2
197 $ hg update
197 $ hg update
198 getting changed largefiles
198 getting changed largefiles
199 1 largefiles updated, 0 removed
199 1 largefiles updated, 0 removed
200 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
200 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
201 $ cat stuff/normal2
201 $ cat stuff/normal2
202 alsonormal
202 alsonormal
203 blah
203 blah
204 $ md5sum.py stuff/maybelarge.dat
204 $ md5sum.py stuff/maybelarge.dat
205 1dd0b99ff80e19cff409702a1d3f5e15 stuff/maybelarge.dat
205 1dd0b99ff80e19cff409702a1d3f5e15 stuff/maybelarge.dat
206 $ cat .hglf/stuff/maybelarge.dat
206 $ cat .hglf/stuff/maybelarge.dat
207 76236b6a2c6102826c61af4297dd738fb3b1de38
207 76236b6a2c6102826c61af4297dd738fb3b1de38
208 $ cd ..
208 $ cd ..
209
209
210 "lfconvert" error cases
210 "lfconvert" error cases
211 $ hg lfconvert http://localhost/foo foo
211 $ hg lfconvert http://localhost/foo foo
212 abort: http://localhost/foo is not a local Mercurial repo
212 abort: http://localhost/foo is not a local Mercurial repo
213 [255]
213 [255]
214 $ hg lfconvert foo ssh://localhost/foo
214 $ hg lfconvert foo ssh://localhost/foo
215 abort: ssh://localhost/foo is not a local Mercurial repo
215 abort: ssh://localhost/foo is not a local Mercurial repo
216 [255]
216 [255]
217 $ hg lfconvert nosuchrepo foo
217 $ hg lfconvert nosuchrepo foo
218 abort: repository nosuchrepo not found
218 abort: repository nosuchrepo not found
219 [255]
219 [255]
220 $ hg share -q -U bigfile-repo shared
220 $ hg share -q -U bigfile-repo shared
221 $ printf 'bogus' > shared/.hg/sharedpath
221 $ printf 'bogus' > shared/.hg/sharedpath
222 $ hg lfconvert shared foo
222 $ hg lfconvert shared foo
223 abort: .hg/sharedpath points to nonexistent directory $TESTTMP/bogus
223 abort: .hg/sharedpath points to nonexistent directory $TESTTMP/bogus
224 [255]
224 [255]
225 $ hg lfconvert bigfile-repo largefiles-repo
225 $ hg lfconvert bigfile-repo largefiles-repo
226 initializing destination largefiles-repo
226 initializing destination largefiles-repo
227 abort: repository largefiles-repo already exists
227 abort: repository largefiles-repo already exists
228 [255]
228 [255]
229
229
230 add another largefile to the new largefiles repo
230 add another largefile to the new largefiles repo
231 $ cd largefiles-repo
231 $ cd largefiles-repo
232 $ dd if=/dev/zero bs=1k count=1k > anotherlarge 2> /dev/null
232 $ dd if=/dev/zero bs=1k count=1k > anotherlarge 2> /dev/null
233 $ hg add --lfsize=1 anotherlarge
233 $ hg add --lfsize=1 anotherlarge
234 $ hg commit -m "add anotherlarge (should be a largefile)"
234 $ hg commit -m "add anotherlarge (should be a largefile)"
235 $ cat .hglf/anotherlarge
235 $ cat .hglf/anotherlarge
236 3b71f43ff30f4b15b5cd85dd9e95ebc7e84eb5a3
236 3b71f43ff30f4b15b5cd85dd9e95ebc7e84eb5a3
237 $ hg tag mytag
237 $ hg tag mytag
238 $ cd ..
238 $ cd ..
239
239
240 round-trip: converting back to a normal (non-largefiles) repo with
240 round-trip: converting back to a normal (non-largefiles) repo with
241 "lfconvert --to-normal" should give the same as ../bigfile-repo. The
241 "lfconvert --to-normal" should give the same as ../bigfile-repo. The
242 convert extension is disabled to show config items can be loaded without it.
242 convert extension is disabled to show config items can be loaded without it.
243 $ cd largefiles-repo
243 $ cd largefiles-repo
244 $ hg --config extensions.convert=! lfconvert --to-normal . ../normal-repo
244 $ hg --config extensions.convert=! lfconvert --to-normal . ../normal-repo
245 initializing destination ../normal-repo
245 initializing destination ../normal-repo
246 0 additional largefiles cached
246 0 additional largefiles cached
247 scanning source...
247 scanning source...
248 sorting...
248 sorting...
249 converting...
249 converting...
250 7 add large, normal1
250 7 add large, normal1
251 6 add sub/*
251 6 add sub/*
252 5 rename sub/ to stuff/
252 5 rename sub/ to stuff/
253 4 add normal3, modify sub/*
253 4 add normal3, modify sub/*
254 3 remove large, normal3
254 3 remove large, normal3
255 2 merge
255 2 merge
256 1 add anotherlarge (should be a largefile)
256 1 add anotherlarge (should be a largefile)
257 0 Added tag mytag for changeset 17126745edfd
257 0 Added tag mytag for changeset 17126745edfd
258 $ cd ../normal-repo
258 $ cd ../normal-repo
259 $ cat >> .hg/hgrc <<EOF
259 $ cat >> .hg/hgrc <<EOF
260 > [extensions]
260 > [extensions]
261 > largefiles = !
261 > largefiles = !
262 > EOF
262 > EOF
263
263
264 $ hg log -G --template "{rev}:{node|short} {desc|firstline}\n"
264 $ hg log -G --template "{rev}:{node|short} {desc|firstline}\n"
265 o 7:b5fedc110b9d Added tag mytag for changeset 867ab992ecf4
265 o 7:b5fedc110b9d Added tag mytag for changeset 867ab992ecf4
266 |
266 |
267 o 6:867ab992ecf4 add anotherlarge (should be a largefile)
267 o 6:867ab992ecf4 add anotherlarge (should be a largefile)
268 |
268 |
269 o 5:4884f215abda merge
269 o 5:4884f215abda merge
270 |\
270 |\
271 | o 4:7285f817b77e remove large, normal3
271 | o 4:7285f817b77e remove large, normal3
272 | |
272 | |
273 | o 3:67e3892e3534 add normal3, modify sub/*
273 | o 3:67e3892e3534 add normal3, modify sub/*
274 | |
274 | |
275 o | 2:c96c8beb5d56 rename sub/ to stuff/
275 o | 2:c96c8beb5d56 rename sub/ to stuff/
276 |/
276 |/
277 o 1:020c65d24e11 add sub/*
277 o 1:020c65d24e11 add sub/*
278 |
278 |
279 o 0:117b8328f97a add large, normal1
279 o 0:117b8328f97a add large, normal1
280
280
281 $ hg update
281 $ hg update
282 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
282 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
283 $ hg locate
283 $ hg locate
284 .hgtags
284 .hgtags
285 anotherlarge
285 anotherlarge
286 normal1
286 normal1
287 stuff/maybelarge.dat
287 stuff/maybelarge.dat
288 stuff/normal2
288 stuff/normal2
289 $ [ -d .hg/largefiles ] && echo fail || echo pass
289 $ [ -d .hg/largefiles ] && echo fail || echo pass
290 pass
290 pass
291
291
292 $ cd ..
292 $ cd ..
293
293
294 Clearing the usercache ensures that commitctx doesn't try to cache largefiles
294 Clearing the usercache ensures that commitctx doesn't try to cache largefiles
295 from the working dir on a convert.
295 from the working dir on a convert.
296 $ rm "${USERCACHE}"/*
296 $ rm "${USERCACHE}"/*
297 $ hg convert largefiles-repo
297 $ hg convert largefiles-repo
298 assuming destination largefiles-repo-hg
298 assuming destination largefiles-repo-hg
299 initializing destination largefiles-repo-hg repository
299 initializing destination largefiles-repo-hg repository
300 scanning source...
300 scanning source...
301 sorting...
301 sorting...
302 converting...
302 converting...
303 7 add large, normal1
303 7 add large, normal1
304 6 add sub/*
304 6 add sub/*
305 5 rename sub/ to stuff/
305 5 rename sub/ to stuff/
306 4 add normal3, modify sub/*
306 4 add normal3, modify sub/*
307 3 remove large, normal3
307 3 remove large, normal3
308 2 merge
308 2 merge
309 1 add anotherlarge (should be a largefile)
309 1 add anotherlarge (should be a largefile)
310 0 Added tag mytag for changeset 17126745edfd
310 0 Added tag mytag for changeset 17126745edfd
311
311
312 $ hg -R largefiles-repo-hg log -G --template "{rev}:{node|short} {desc|firstline}\n"
312 $ hg -R largefiles-repo-hg log -G --template "{rev}:{node|short} {desc|firstline}\n"
313 o 7:2f08f66459b7 Added tag mytag for changeset 17126745edfd
313 o 7:2f08f66459b7 Added tag mytag for changeset 17126745edfd
314 |
314 |
315 o 6:17126745edfd add anotherlarge (should be a largefile)
315 o 6:17126745edfd add anotherlarge (should be a largefile)
316 |
316 |
317 o 5:9cc5aa7204f0 merge
317 o 5:9cc5aa7204f0 merge
318 |\
318 |\
319 | o 4:a5a02de7a8e4 remove large, normal3
319 | o 4:a5a02de7a8e4 remove large, normal3
320 | |
320 | |
321 | o 3:55759520c76f add normal3, modify sub/*
321 | o 3:55759520c76f add normal3, modify sub/*
322 | |
322 | |
323 o | 2:261ad3f3f037 rename sub/ to stuff/
323 o | 2:261ad3f3f037 rename sub/ to stuff/
324 |/
324 |/
325 o 1:334e5237836d add sub/*
325 o 1:334e5237836d add sub/*
326 |
326 |
327 o 0:d4892ec57ce2 add large, normal1
327 o 0:d4892ec57ce2 add large, normal1
328
328
329 Verify will fail (for now) if the usercache is purged before converting, since
329 Verify will fail (for now) if the usercache is purged before converting, since
330 largefiles are not cached in the converted repo's local store by the conversion
330 largefiles are not cached in the converted repo's local store by the conversion
331 process.
331 process.
332 $ cd largefiles-repo-hg
332 $ cd largefiles-repo-hg
333 $ cat >> .hg/hgrc <<EOF
333 $ cat >> .hg/hgrc <<EOF
334 > [experimental]
334 > [experimental]
335 > evolution.createmarkers=True
335 > evolution.createmarkers=True
336 > EOF
336 > EOF
337 $ hg debugobsolete `hg log -r tip -T "{node}"`
337 $ hg debugobsolete `hg log -r tip -T "{node}"`
338 1 new obsolescence markers
338 1 new obsolescence markers
339 obsoleted 1 changesets
339 obsoleted 1 changesets
340 $ cd ..
340 $ cd ..
341
341
342 $ hg -R largefiles-repo-hg verify --large --lfa
342 $ hg -R largefiles-repo-hg verify --large --lfa
343 checking changesets
343 checking changesets
344 checking manifests
344 checking manifests
345 crosschecking files in changesets and manifests
345 crosschecking files in changesets and manifests
346 checking files
346 checking files
347 checked 8 changesets with 13 changes to 9 files
347 checked 8 changesets with 13 changes to 9 files
348 searching 7 changesets for largefiles
348 searching 7 changesets for largefiles
349 changeset 0:d4892ec57ce2: large references missing $TESTTMP/largefiles-repo-hg/.hg/largefiles/2e000fa7e85759c7f4c254d4d9c33ef481e459a7
349 changeset 0:d4892ec57ce2: large references missing $TESTTMP/largefiles-repo-hg/.hg/largefiles/2e000fa7e85759c7f4c254d4d9c33ef481e459a7
350 changeset 1:334e5237836d: sub/maybelarge.dat references missing $TESTTMP/largefiles-repo-hg/.hg/largefiles/34e163be8e43c5631d8b92e9c43ab0bf0fa62b9c
350 changeset 1:334e5237836d: sub/maybelarge.dat references missing $TESTTMP/largefiles-repo-hg/.hg/largefiles/34e163be8e43c5631d8b92e9c43ab0bf0fa62b9c
351 changeset 2:261ad3f3f037: stuff/maybelarge.dat references missing $TESTTMP/largefiles-repo-hg/.hg/largefiles/34e163be8e43c5631d8b92e9c43ab0bf0fa62b9c
351 changeset 2:261ad3f3f037: stuff/maybelarge.dat references missing $TESTTMP/largefiles-repo-hg/.hg/largefiles/34e163be8e43c5631d8b92e9c43ab0bf0fa62b9c
352 changeset 3:55759520c76f: sub/maybelarge.dat references missing $TESTTMP/largefiles-repo-hg/.hg/largefiles/76236b6a2c6102826c61af4297dd738fb3b1de38
352 changeset 3:55759520c76f: sub/maybelarge.dat references missing $TESTTMP/largefiles-repo-hg/.hg/largefiles/76236b6a2c6102826c61af4297dd738fb3b1de38
353 changeset 5:9cc5aa7204f0: stuff/maybelarge.dat references missing $TESTTMP/largefiles-repo-hg/.hg/largefiles/76236b6a2c6102826c61af4297dd738fb3b1de38
353 changeset 5:9cc5aa7204f0: stuff/maybelarge.dat references missing $TESTTMP/largefiles-repo-hg/.hg/largefiles/76236b6a2c6102826c61af4297dd738fb3b1de38
354 changeset 6:17126745edfd: anotherlarge references missing $TESTTMP/largefiles-repo-hg/.hg/largefiles/3b71f43ff30f4b15b5cd85dd9e95ebc7e84eb5a3
354 changeset 6:17126745edfd: anotherlarge references missing $TESTTMP/largefiles-repo-hg/.hg/largefiles/3b71f43ff30f4b15b5cd85dd9e95ebc7e84eb5a3
355 verified existence of 6 revisions of 4 largefiles
355 verified existence of 6 revisions of 4 largefiles
356 [1]
356 [1]
357 $ hg -R largefiles-repo-hg showconfig paths
357 $ hg -R largefiles-repo-hg showconfig paths
358 [1]
358 [1]
359
359
360
360
361 Avoid a traceback if a largefile isn't available (issue3519)
361 Avoid a traceback if a largefile isn't available (issue3519)
362
362
363 Ensure the largefile can be cached in the source if necessary
363 Ensure the largefile can be cached in the source if necessary
364 $ hg clone -U largefiles-repo issue3519
364 $ hg clone -U largefiles-repo issue3519
365 $ rm -f "${USERCACHE}"/*
365 $ rm -f "${USERCACHE}"/*
366 $ hg -R issue3519 branch -q mybranch
366 $ hg -R issue3519 branch -q mybranch
367 $ hg -R issue3519 ci -m 'change branch name only'
367 $ hg -R issue3519 ci -m 'change branch name only'
368 $ hg lfconvert --to-normal issue3519 normalized3519
368 $ hg lfconvert --to-normal issue3519 normalized3519
369 initializing destination normalized3519
369 initializing destination normalized3519
370 4 additional largefiles cached
370 4 additional largefiles cached
371 scanning source...
371 scanning source...
372 sorting...
372 sorting...
373 converting...
373 converting...
374 8 add large, normal1
374 8 add large, normal1
375 7 add sub/*
375 7 add sub/*
376 6 rename sub/ to stuff/
376 6 rename sub/ to stuff/
377 5 add normal3, modify sub/*
377 5 add normal3, modify sub/*
378 4 remove large, normal3
378 4 remove large, normal3
379 3 merge
379 3 merge
380 2 add anotherlarge (should be a largefile)
380 2 add anotherlarge (should be a largefile)
381 1 Added tag mytag for changeset 17126745edfd
381 1 Added tag mytag for changeset 17126745edfd
382 0 change branch name only
382 0 change branch name only
383
383
384 Ensure empty commits aren't lost in the conversion
384 Ensure empty commits aren't lost in the conversion
385 $ hg -R normalized3519 log -r tip -T '{desc}\n'
385 $ hg -R normalized3519 log -r tip -T '{desc}\n'
386 change branch name only
386 change branch name only
387
387
388 Ensure the abort message is useful if a largefile is entirely unavailable
388 Ensure the abort message is useful if a largefile is entirely unavailable
389 $ rm -rf normalized3519
389 $ rm -rf normalized3519
390 $ rm "${USERCACHE}"/*
390 $ rm "${USERCACHE}"/*
391 $ rm issue3519/.hg/largefiles/*
391 $ rm issue3519/.hg/largefiles/*
392 $ rm largefiles-repo/.hg/largefiles/*
392 $ rm largefiles-repo/.hg/largefiles/*
393 $ hg lfconvert --to-normal issue3519 normalized3519
393 $ hg lfconvert --to-normal issue3519 normalized3519
394 initializing destination normalized3519
394 initializing destination normalized3519
395 large: largefile 2e000fa7e85759c7f4c254d4d9c33ef481e459a7 not available from file:/*/$TESTTMP/largefiles-repo (glob)
395 large: largefile 2e000fa7e85759c7f4c254d4d9c33ef481e459a7 not available from file:/*/$TESTTMP/largefiles-repo (glob)
396 large: largefile 2e000fa7e85759c7f4c254d4d9c33ef481e459a7 not available from file:/*/$TESTTMP/largefiles-repo (glob)
396 large: largefile 2e000fa7e85759c7f4c254d4d9c33ef481e459a7 not available from file:/*/$TESTTMP/largefiles-repo (glob)
397 sub/maybelarge.dat: largefile 34e163be8e43c5631d8b92e9c43ab0bf0fa62b9c not available from file:/*/$TESTTMP/largefiles-repo (glob)
397 sub/maybelarge.dat: largefile 34e163be8e43c5631d8b92e9c43ab0bf0fa62b9c not available from file:/*/$TESTTMP/largefiles-repo (glob)
398 large: largefile 2e000fa7e85759c7f4c254d4d9c33ef481e459a7 not available from file:/*/$TESTTMP/largefiles-repo (glob)
398 large: largefile 2e000fa7e85759c7f4c254d4d9c33ef481e459a7 not available from file:/*/$TESTTMP/largefiles-repo (glob)
399 stuff/maybelarge.dat: largefile 34e163be8e43c5631d8b92e9c43ab0bf0fa62b9c not available from file:/*/$TESTTMP/largefiles-repo (glob)
399 stuff/maybelarge.dat: largefile 34e163be8e43c5631d8b92e9c43ab0bf0fa62b9c not available from file:/*/$TESTTMP/largefiles-repo (glob)
400 large: largefile 2e000fa7e85759c7f4c254d4d9c33ef481e459a7 not available from file:/*/$TESTTMP/largefiles-repo (glob)
400 large: largefile 2e000fa7e85759c7f4c254d4d9c33ef481e459a7 not available from file:/*/$TESTTMP/largefiles-repo (glob)
401 sub/maybelarge.dat: largefile 76236b6a2c6102826c61af4297dd738fb3b1de38 not available from file:/*/$TESTTMP/largefiles-repo (glob)
401 sub/maybelarge.dat: largefile 76236b6a2c6102826c61af4297dd738fb3b1de38 not available from file:/*/$TESTTMP/largefiles-repo (glob)
402 sub/maybelarge.dat: largefile 76236b6a2c6102826c61af4297dd738fb3b1de38 not available from file:/*/$TESTTMP/largefiles-repo (glob)
402 sub/maybelarge.dat: largefile 76236b6a2c6102826c61af4297dd738fb3b1de38 not available from file:/*/$TESTTMP/largefiles-repo (glob)
403 stuff/maybelarge.dat: largefile 76236b6a2c6102826c61af4297dd738fb3b1de38 not available from file:/*/$TESTTMP/largefiles-repo (glob)
403 stuff/maybelarge.dat: largefile 76236b6a2c6102826c61af4297dd738fb3b1de38 not available from file:/*/$TESTTMP/largefiles-repo (glob)
404 anotherlarge: largefile 3b71f43ff30f4b15b5cd85dd9e95ebc7e84eb5a3 not available from file:/*/$TESTTMP/largefiles-repo (glob)
404 anotherlarge: largefile 3b71f43ff30f4b15b5cd85dd9e95ebc7e84eb5a3 not available from file:/*/$TESTTMP/largefiles-repo (glob)
405 stuff/maybelarge.dat: largefile 76236b6a2c6102826c61af4297dd738fb3b1de38 not available from file:/*/$TESTTMP/largefiles-repo (glob)
405 stuff/maybelarge.dat: largefile 76236b6a2c6102826c61af4297dd738fb3b1de38 not available from file:/*/$TESTTMP/largefiles-repo (glob)
406 0 additional largefiles cached
406 0 additional largefiles cached
407 11 largefiles failed to download
407 11 largefiles failed to download
408 abort: all largefiles must be present locally
408 abort: all largefiles must be present locally
409 [255]
409 [255]
410
410
411
411
@@ -1,360 +1,360 b''
1 #require no-reposimplestore no-chg
1 #require no-reposimplestore no-chg
2
2
3 This tests the interaction between the largefiles and lfs extensions, and
3 This tests the interaction between the largefiles and lfs extensions, and
4 conversion from largefiles -> lfs.
4 conversion from largefiles -> lfs.
5
5
6 $ cat >> $HGRCPATH << EOF
6 $ cat >> $HGRCPATH << EOF
7 > [extensions]
7 > [extensions]
8 > largefiles =
8 > largefiles =
9 >
9 >
10 > [lfs]
10 > [lfs]
11 > # standin files are 41 bytes. Stay bigger for clarity.
11 > # standin files are 41 bytes. Stay bigger for clarity.
12 > threshold = 42
12 > threshold = 42
13 > EOF
13 > EOF
14
14
15 Setup a repo with a normal file and a largefile, above and below the lfs
15 Setup a repo with a normal file and a largefile, above and below the lfs
16 threshold to test lfconvert. *.txt start life as a normal file; *.bin start as
16 threshold to test lfconvert. *.txt start life as a normal file; *.bin start as
17 an lfs/largefile.
17 an lfs/largefile.
18
18
19 $ hg init largefiles
19 $ hg init largefiles
20 $ cd largefiles
20 $ cd largefiles
21 $ echo 'normal' > normal.txt
21 $ echo 'normal' > normal.txt
22 $ echo 'normal above lfs threshold 0000000000000000000000000' > lfs.txt
22 $ echo 'normal above lfs threshold 0000000000000000000000000' > lfs.txt
23 $ hg ci -Am 'normal.txt'
23 $ hg ci -Am 'normal.txt'
24 adding lfs.txt
24 adding lfs.txt
25 adding normal.txt
25 adding normal.txt
26 $ echo 'largefile' > large.bin
26 $ echo 'largefile' > large.bin
27 $ echo 'largefile above lfs threshold 0000000000000000000000' > lfs.bin
27 $ echo 'largefile above lfs threshold 0000000000000000000000' > lfs.bin
28 $ hg add --large large.bin lfs.bin
28 $ hg add --large large.bin lfs.bin
29 $ hg ci -m 'add largefiles'
29 $ hg ci -m 'add largefiles'
30
30
31 $ cat >> $HGRCPATH << EOF
31 $ cat >> $HGRCPATH << EOF
32 > [extensions]
32 > [extensions]
33 > lfs =
33 > lfs =
34 > EOF
34 > EOF
35
35
36 Add an lfs file and normal file that collide with files on the other branch.
36 Add an lfs file and normal file that collide with files on the other branch.
37 large.bin is added as a normal file, and is named as such only to clash with the
37 large.bin is added as a normal file, and is named as such only to clash with the
38 largefile on the other branch.
38 largefile on the other branch.
39
39
40 $ hg up -q '.^'
40 $ hg up -q '.^'
41 $ echo 'below lfs threshold' > large.bin
41 $ echo 'below lfs threshold' > large.bin
42 $ echo 'lfs above the lfs threshold for length 0000000000000' > lfs.bin
42 $ echo 'lfs above the lfs threshold for length 0000000000000' > lfs.bin
43 $ hg ci -Am 'add with lfs extension'
43 $ hg ci -Am 'add with lfs extension'
44 adding large.bin
44 adding large.bin
45 adding lfs.bin
45 adding lfs.bin
46 created new head
46 created new head
47
47
48 $ hg log -G
48 $ hg log -G
49 @ changeset: 2:e989d0fa3764
49 @ changeset: 2:e989d0fa3764
50 | tag: tip
50 | tag: tip
51 | parent: 0:29361292f54d
51 | parent: 0:29361292f54d
52 | user: test
52 | user: test
53 | date: Thu Jan 01 00:00:00 1970 +0000
53 | date: Thu Jan 01 00:00:00 1970 +0000
54 | summary: add with lfs extension
54 | summary: add with lfs extension
55 |
55 |
56 | o changeset: 1:6513aaab9ca0
56 | o changeset: 1:6513aaab9ca0
57 |/ user: test
57 |/ user: test
58 | date: Thu Jan 01 00:00:00 1970 +0000
58 | date: Thu Jan 01 00:00:00 1970 +0000
59 | summary: add largefiles
59 | summary: add largefiles
60 |
60 |
61 o changeset: 0:29361292f54d
61 o changeset: 0:29361292f54d
62 user: test
62 user: test
63 date: Thu Jan 01 00:00:00 1970 +0000
63 date: Thu Jan 01 00:00:00 1970 +0000
64 summary: normal.txt
64 summary: normal.txt
65
65
66 --------------------------------------------------------------------------------
66 --------------------------------------------------------------------------------
67 Merge largefiles into lfs branch
67 Merge largefiles into lfs branch
68
68
69 The largefiles extension will prompt to use the normal or largefile when merged
69 The largefiles extension will prompt to use the normal or largefile when merged
70 into the lfs files. `hg manifest` will show standins if present. They aren't,
70 into the lfs files. `hg manifest` will show standins if present. They aren't,
71 because largefiles merge doesn't merge content. If it did, selecting (n)ormal
71 because largefiles merge doesn't merge content. If it did, selecting (n)ormal
72 would convert to lfs on commit, if appropriate.
72 would convert to lfs on commit, if appropriate.
73
73
74 BUG: Largefiles isn't running the merge tool, like when two lfs files are
74 BUG: Largefiles isn't running the merge tool, like when two lfs files are
75 merged. This is probably by design, but it should probably at least prompt if
75 merged. This is probably by design, but it should probably at least prompt if
76 content should be taken from (l)ocal or (o)ther as well.
76 content should be taken from (l)ocal or (o)ther as well.
77
77
78 $ hg --config ui.interactive=True merge 6513aaab9ca0 <<EOF
78 $ hg --config ui.interactive=True merge 6513aaab9ca0 <<EOF
79 > n
79 > n
80 > n
80 > n
81 > EOF
81 > EOF
82 remote turned local normal file large.bin into a largefile
82 remote turned local normal file large.bin into a largefile
83 use (l)argefile or keep (n)ormal file? n
83 use (l)argefile or keep (n)ormal file? n
84 remote turned local normal file lfs.bin into a largefile
84 remote turned local normal file lfs.bin into a largefile
85 use (l)argefile or keep (n)ormal file? n
85 use (l)argefile or keep (n)ormal file? n
86 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
86 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
87 (branch merge, don't forget to commit)
87 (branch merge, don't forget to commit)
88 $ hg ci -m 'merge lfs with largefiles -> normal'
88 $ hg ci -m 'merge lfs with largefiles -> normal'
89 $ hg manifest
89 $ hg manifest
90 large.bin
90 large.bin
91 lfs.bin
91 lfs.bin
92 lfs.txt
92 lfs.txt
93 normal.txt
93 normal.txt
94
94
95 The merged lfs.bin resolved to lfs because the (n)ormal option was picked. The
95 The merged lfs.bin resolved to lfs because the (n)ormal option was picked. The
96 lfs.txt file is unchanged by the merge, because it was added before lfs was
96 lfs.txt file is unchanged by the merge, because it was added before lfs was
97 enabled, and the content didn't change.
97 enabled, and the content didn't change.
98 $ hg debugdata lfs.bin 0
98 $ hg debugdata lfs.bin 0
99 version https://git-lfs.github.com/spec/v1
99 version https://git-lfs.github.com/spec/v1
100 oid sha256:81c7492b2c05e130431f65a87651b54a30c5da72c99ce35a1e9b9872a807312b
100 oid sha256:81c7492b2c05e130431f65a87651b54a30c5da72c99ce35a1e9b9872a807312b
101 size 53
101 size 53
102 x-is-binary 0
102 x-is-binary 0
103 $ hg debugdata lfs.txt 0
103 $ hg debugdata lfs.txt 0
104 normal above lfs threshold 0000000000000000000000000
104 normal above lfs threshold 0000000000000000000000000
105
105
106 Another filelog entry is NOT made by the merge, so nothing is committed as lfs.
106 Another filelog entry is NOT made by the merge, so nothing is committed as lfs.
107 $ hg log -r . -T '{join(lfs_files, ", ")}\n'
107 $ hg log -r . -T '{join(lfs_files, ", ")}\n'
108
108
109
109
110 Replay the last merge, but pick (l)arge this time. The manifest will show any
110 Replay the last merge, but pick (l)arge this time. The manifest will show any
111 standins.
111 standins.
112
112
113 $ hg up -Cq e989d0fa3764
113 $ hg up -Cq e989d0fa3764
114
114
115 $ hg --config ui.interactive=True merge 6513aaab9ca0 <<EOF
115 $ hg --config ui.interactive=True merge 6513aaab9ca0 <<EOF
116 > l
116 > l
117 > l
117 > l
118 > EOF
118 > EOF
119 remote turned local normal file large.bin into a largefile
119 remote turned local normal file large.bin into a largefile
120 use (l)argefile or keep (n)ormal file? l
120 use (l)argefile or keep (n)ormal file? l
121 remote turned local normal file lfs.bin into a largefile
121 remote turned local normal file lfs.bin into a largefile
122 use (l)argefile or keep (n)ormal file? l
122 use (l)argefile or keep (n)ormal file? l
123 getting changed largefiles
123 getting changed largefiles
124 2 largefiles updated, 0 removed
124 2 largefiles updated, 0 removed
125 2 files updated, 0 files merged, 2 files removed, 0 files unresolved
125 2 files updated, 0 files merged, 2 files removed, 0 files unresolved
126 (branch merge, don't forget to commit)
126 (branch merge, don't forget to commit)
127 $ hg ci -m 'merge lfs with largefiles -> large'
127 $ hg ci -m 'merge lfs with largefiles -> large'
128 created new head
128 created new head
129 $ hg manifest
129 $ hg manifest
130 .hglf/large.bin
130 .hglf/large.bin
131 .hglf/lfs.bin
131 .hglf/lfs.bin
132 lfs.txt
132 lfs.txt
133 normal.txt
133 normal.txt
134
134
135 --------------------------------------------------------------------------------
135 --------------------------------------------------------------------------------
136 Merge lfs into largefiles branch
136 Merge lfs into largefiles branch
137
137
138 $ hg up -Cq 6513aaab9ca0
138 $ hg up -Cq 6513aaab9ca0
139 $ hg --config ui.interactive=True merge e989d0fa3764 <<EOF
139 $ hg --config ui.interactive=True merge e989d0fa3764 <<EOF
140 > n
140 > n
141 > n
141 > n
142 > EOF
142 > EOF
143 remote turned local largefile large.bin into a normal file
143 remote turned local largefile large.bin into a normal file
144 keep (l)argefile or use (n)ormal file? n
144 keep (l)argefile or use (n)ormal file? n
145 remote turned local largefile lfs.bin into a normal file
145 remote turned local largefile lfs.bin into a normal file
146 keep (l)argefile or use (n)ormal file? n
146 keep (l)argefile or use (n)ormal file? n
147 getting changed largefiles
147 getting changed largefiles
148 0 largefiles updated, 0 removed
148 0 largefiles updated, 0 removed
149 2 files updated, 0 files merged, 2 files removed, 0 files unresolved
149 2 files updated, 0 files merged, 2 files removed, 0 files unresolved
150 (branch merge, don't forget to commit)
150 (branch merge, don't forget to commit)
151 $ hg ci -m 'merge largefiles with lfs -> normal'
151 $ hg ci -m 'merge largefiles with lfs -> normal'
152 created new head
152 created new head
153 $ hg manifest
153 $ hg manifest
154 large.bin
154 large.bin
155 lfs.bin
155 lfs.bin
156 lfs.txt
156 lfs.txt
157 normal.txt
157 normal.txt
158
158
159 The merged lfs.bin got converted to lfs because the (n)ormal option was picked.
159 The merged lfs.bin got converted to lfs because the (n)ormal option was picked.
160 The lfs.txt file is unchanged by the merge, because it was added before lfs was
160 The lfs.txt file is unchanged by the merge, because it was added before lfs was
161 enabled.
161 enabled.
162 $ hg debugdata lfs.bin 0
162 $ hg debugdata lfs.bin 0
163 version https://git-lfs.github.com/spec/v1
163 version https://git-lfs.github.com/spec/v1
164 oid sha256:81c7492b2c05e130431f65a87651b54a30c5da72c99ce35a1e9b9872a807312b
164 oid sha256:81c7492b2c05e130431f65a87651b54a30c5da72c99ce35a1e9b9872a807312b
165 size 53
165 size 53
166 x-is-binary 0
166 x-is-binary 0
167 $ hg debugdata lfs.txt 0
167 $ hg debugdata lfs.txt 0
168 normal above lfs threshold 0000000000000000000000000
168 normal above lfs threshold 0000000000000000000000000
169
169
170 Another filelog entry is NOT made by the merge, so nothing is committed as lfs.
170 Another filelog entry is NOT made by the merge, so nothing is committed as lfs.
171 $ hg log -r . -T '{join(lfs_files, ", ")}\n'
171 $ hg log -r . -T '{join(lfs_files, ", ")}\n'
172
172
173
173
174 Replay the last merge, but pick (l)arge this time. The manifest will show the
174 Replay the last merge, but pick (l)arge this time. The manifest will show the
175 standins.
175 standins.
176
176
177 $ hg up -Cq 6513aaab9ca0
177 $ hg up -Cq 6513aaab9ca0
178
178
179 $ hg --config ui.interactive=True merge e989d0fa3764 <<EOF
179 $ hg --config ui.interactive=True merge e989d0fa3764 <<EOF
180 > l
180 > l
181 > l
181 > l
182 > EOF
182 > EOF
183 remote turned local largefile large.bin into a normal file
183 remote turned local largefile large.bin into a normal file
184 keep (l)argefile or use (n)ormal file? l
184 keep (l)argefile or use (n)ormal file? l
185 remote turned local largefile lfs.bin into a normal file
185 remote turned local largefile lfs.bin into a normal file
186 keep (l)argefile or use (n)ormal file? l
186 keep (l)argefile or use (n)ormal file? l
187 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
187 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
188 (branch merge, don't forget to commit)
188 (branch merge, don't forget to commit)
189 $ hg ci -m 'merge largefiles with lfs -> large'
189 $ hg ci -m 'merge largefiles with lfs -> large'
190 created new head
190 created new head
191 $ hg manifest
191 $ hg manifest
192 .hglf/large.bin
192 .hglf/large.bin
193 .hglf/lfs.bin
193 .hglf/lfs.bin
194 lfs.txt
194 lfs.txt
195 normal.txt
195 normal.txt
196
196
197 --------------------------------------------------------------------------------
197 --------------------------------------------------------------------------------
198
198
199 When both largefiles and lfs are configured to add by size, the tie goes to
199 When both largefiles and lfs are configured to add by size, the tie goes to
200 largefiles since it hooks cmdutil.add() and lfs hooks the filelog write in the
200 largefiles since it hooks cmdutil.add() and lfs hooks the filelog write in the
201 commit. By the time the commit occurs, the tracked file is smaller than the
201 commit. By the time the commit occurs, the tracked file is smaller than the
202 threshold (assuming it is > 41, so the standins don't become lfs objects).
202 threshold (assuming it is > 41, so the standins don't become lfs objects).
203
203
204 $ "$PYTHON" -c 'import sys ; sys.stdout.write("y\n" * 1048576)' > large_by_size.bin
204 $ "$PYTHON" -c 'import sys ; sys.stdout.write("y\n" * 1048576)' > large_by_size.bin
205 $ hg --config largefiles.minsize=1 ci -Am 'large by size'
205 $ hg --config largefiles.minsize=1 ci -Am 'large by size'
206 adding large_by_size.bin as a largefile
206 adding large_by_size.bin as a largefile
207 $ hg manifest
207 $ hg manifest
208 .hglf/large.bin
208 .hglf/large.bin
209 .hglf/large_by_size.bin
209 .hglf/large_by_size.bin
210 .hglf/lfs.bin
210 .hglf/lfs.bin
211 lfs.txt
211 lfs.txt
212 normal.txt
212 normal.txt
213
213
214 $ hg rm large_by_size.bin
214 $ hg rm large_by_size.bin
215 $ hg ci -m 'remove large_by_size.bin'
215 $ hg ci -m 'remove large_by_size.bin'
216
216
217 Largefiles doesn't do anything special with diff, so it falls back to diffing
217 Largefiles doesn't do anything special with diff, so it falls back to diffing
218 the standins. Extdiff also is standin based comparison. Diff and extdiff both
218 the standins. Extdiff also is standin based comparison. Diff and extdiff both
219 work on the original file for lfs objects.
219 work on the original file for lfs objects.
220
220
221 Largefile -> lfs transition
221 Largefile -> lfs transition
222 $ hg diff -r 1 -r 3
222 $ hg diff -r 1 -r 3
223 diff -r 6513aaab9ca0 -r dcc5ce63e252 .hglf/large.bin
223 diff -r 6513aaab9ca0 -r dcc5ce63e252 .hglf/large.bin
224 --- a/.hglf/large.bin Thu Jan 01 00:00:00 1970 +0000
224 --- a/.hglf/large.bin Thu Jan 01 00:00:00 1970 +0000
225 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
225 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
226 @@ -1,1 +0,0 @@
226 @@ -1,1 +0,0 @@
227 -cef9a458373df9b0743a0d3c14d0c66fb19b8629
227 -cef9a458373df9b0743a0d3c14d0c66fb19b8629
228 diff -r 6513aaab9ca0 -r dcc5ce63e252 .hglf/lfs.bin
228 diff -r 6513aaab9ca0 -r dcc5ce63e252 .hglf/lfs.bin
229 --- a/.hglf/lfs.bin Thu Jan 01 00:00:00 1970 +0000
229 --- a/.hglf/lfs.bin Thu Jan 01 00:00:00 1970 +0000
230 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
230 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
231 @@ -1,1 +0,0 @@
231 @@ -1,1 +0,0 @@
232 -557fb6309cef935e1ac2c8296508379e4b15a6e6
232 -557fb6309cef935e1ac2c8296508379e4b15a6e6
233 diff -r 6513aaab9ca0 -r dcc5ce63e252 large.bin
233 diff -r 6513aaab9ca0 -r dcc5ce63e252 large.bin
234 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
234 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
235 +++ b/large.bin Thu Jan 01 00:00:00 1970 +0000
235 +++ b/large.bin Thu Jan 01 00:00:00 1970 +0000
236 @@ -0,0 +1,1 @@
236 @@ -0,0 +1,1 @@
237 +below lfs threshold
237 +below lfs threshold
238 diff -r 6513aaab9ca0 -r dcc5ce63e252 lfs.bin
238 diff -r 6513aaab9ca0 -r dcc5ce63e252 lfs.bin
239 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
239 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
240 +++ b/lfs.bin Thu Jan 01 00:00:00 1970 +0000
240 +++ b/lfs.bin Thu Jan 01 00:00:00 1970 +0000
241 @@ -0,0 +1,1 @@
241 @@ -0,0 +1,1 @@
242 +lfs above the lfs threshold for length 0000000000000
242 +lfs above the lfs threshold for length 0000000000000
243
243
244 lfs -> largefiles transition
244 lfs -> largefiles transition
245 $ hg diff -r 2 -r 6
245 $ hg diff -r 2 -r 6
246 diff -r e989d0fa3764 -r 95e1e80325c8 .hglf/large.bin
246 diff -r e989d0fa3764 -r 95e1e80325c8 .hglf/large.bin
247 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
247 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
248 +++ b/.hglf/large.bin Thu Jan 01 00:00:00 1970 +0000
248 +++ b/.hglf/large.bin Thu Jan 01 00:00:00 1970 +0000
249 @@ -0,0 +1,1 @@
249 @@ -0,0 +1,1 @@
250 +cef9a458373df9b0743a0d3c14d0c66fb19b8629
250 +cef9a458373df9b0743a0d3c14d0c66fb19b8629
251 diff -r e989d0fa3764 -r 95e1e80325c8 .hglf/lfs.bin
251 diff -r e989d0fa3764 -r 95e1e80325c8 .hglf/lfs.bin
252 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
252 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
253 +++ b/.hglf/lfs.bin Thu Jan 01 00:00:00 1970 +0000
253 +++ b/.hglf/lfs.bin Thu Jan 01 00:00:00 1970 +0000
254 @@ -0,0 +1,1 @@
254 @@ -0,0 +1,1 @@
255 +557fb6309cef935e1ac2c8296508379e4b15a6e6
255 +557fb6309cef935e1ac2c8296508379e4b15a6e6
256 diff -r e989d0fa3764 -r 95e1e80325c8 large.bin
256 diff -r e989d0fa3764 -r 95e1e80325c8 large.bin
257 --- a/large.bin Thu Jan 01 00:00:00 1970 +0000
257 --- a/large.bin Thu Jan 01 00:00:00 1970 +0000
258 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
258 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
259 @@ -1,1 +0,0 @@
259 @@ -1,1 +0,0 @@
260 -below lfs threshold
260 -below lfs threshold
261 diff -r e989d0fa3764 -r 95e1e80325c8 lfs.bin
261 diff -r e989d0fa3764 -r 95e1e80325c8 lfs.bin
262 --- a/lfs.bin Thu Jan 01 00:00:00 1970 +0000
262 --- a/lfs.bin Thu Jan 01 00:00:00 1970 +0000
263 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
263 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
264 @@ -1,1 +0,0 @@
264 @@ -1,1 +0,0 @@
265 -lfs above the lfs threshold for length 0000000000000
265 -lfs above the lfs threshold for length 0000000000000
266
266
267 A largefiles repo can be converted to lfs. The lfconvert command uses the
267 A largefiles repo can be converted to lfs. The lfconvert command uses the
268 convert extension under the hood with --to-normal. So the --config based
268 convert extension under the hood with --to-normal. So the --config based
269 parameters are available, but not --authormap, --branchmap, etc.
269 parameters are available, but not --authormap, --branchmap, etc.
270
270
271 $ cd ..
271 $ cd ..
272 $ hg lfconvert --to-normal largefiles nolargefiles 2>&1
272 $ hg lfconvert --to-normal largefiles nolargefiles 2>&1
273 initializing destination nolargefiles
273 initializing destination nolargefiles
274 0 additional largefiles cached
274 0 additional largefiles cached
275 scanning source...
275 scanning source...
276 sorting...
276 sorting...
277 converting...
277 converting...
278 8 normal.txt
278 8 normal.txt
279 7 add largefiles
279 7 add largefiles
280 6 add with lfs extension
280 6 add with lfs extension
281 5 merge lfs with largefiles -> normal
281 5 merge lfs with largefiles -> normal
282 4 merge lfs with largefiles -> large
282 4 merge lfs with largefiles -> large
283 3 merge largefiles with lfs -> normal
283 3 merge largefiles with lfs -> normal
284 2 merge largefiles with lfs -> large
284 2 merge largefiles with lfs -> large
285 1 large by size
285 1 large by size
286 0 remove large_by_size.bin
286 0 remove large_by_size.bin
287 $ cd nolargefiles
287 $ cd nolargefiles
288
288
289 The requirement is added to the destination repo.
289 The requirement is added to the destination repo.
290
290
291 $ cat .hg/requires
291 $ hg debugrequires
292 dotencode
292 dotencode
293 dirstate-v2 (dirstate-v2 !)
293 dirstate-v2 (dirstate-v2 !)
294 fncache
294 fncache
295 generaldelta
295 generaldelta
296 lfs
296 lfs
297 persistent-nodemap (rust !)
297 persistent-nodemap (rust !)
298 revlog-compression-zstd (zstd !)
298 revlog-compression-zstd (zstd !)
299 revlogv1
299 revlogv1
300 sparserevlog
300 sparserevlog
301 store
301 store
302
302
303 $ hg log -r 'all()' -G -T '{rev} {join(lfs_files, ", ")} ({desc})\n'
303 $ hg log -r 'all()' -G -T '{rev} {join(lfs_files, ", ")} ({desc})\n'
304 o 8 large_by_size.bin (remove large_by_size.bin)
304 o 8 large_by_size.bin (remove large_by_size.bin)
305 |
305 |
306 o 7 large_by_size.bin (large by size)
306 o 7 large_by_size.bin (large by size)
307 |
307 |
308 o 6 (merge largefiles with lfs -> large)
308 o 6 (merge largefiles with lfs -> large)
309 |\
309 |\
310 +---o 5 (merge largefiles with lfs -> normal)
310 +---o 5 (merge largefiles with lfs -> normal)
311 | |/
311 | |/
312 +---o 4 lfs.bin (merge lfs with largefiles -> large)
312 +---o 4 lfs.bin (merge lfs with largefiles -> large)
313 | |/
313 | |/
314 +---o 3 (merge lfs with largefiles -> normal)
314 +---o 3 (merge lfs with largefiles -> normal)
315 | |/
315 | |/
316 | o 2 lfs.bin (add with lfs extension)
316 | o 2 lfs.bin (add with lfs extension)
317 | |
317 | |
318 o | 1 lfs.bin (add largefiles)
318 o | 1 lfs.bin (add largefiles)
319 |/
319 |/
320 o 0 lfs.txt (normal.txt)
320 o 0 lfs.txt (normal.txt)
321
321
322 $ hg debugdata lfs.bin 0
322 $ hg debugdata lfs.bin 0
323 version https://git-lfs.github.com/spec/v1
323 version https://git-lfs.github.com/spec/v1
324 oid sha256:2172a5bd492dd41ec533b9bb695f7691b6351719407ac797f0ccad5348c81e62
324 oid sha256:2172a5bd492dd41ec533b9bb695f7691b6351719407ac797f0ccad5348c81e62
325 size 53
325 size 53
326 x-is-binary 0
326 x-is-binary 0
327 $ hg debugdata lfs.bin 1
327 $ hg debugdata lfs.bin 1
328 version https://git-lfs.github.com/spec/v1
328 version https://git-lfs.github.com/spec/v1
329 oid sha256:81c7492b2c05e130431f65a87651b54a30c5da72c99ce35a1e9b9872a807312b
329 oid sha256:81c7492b2c05e130431f65a87651b54a30c5da72c99ce35a1e9b9872a807312b
330 size 53
330 size 53
331 x-is-binary 0
331 x-is-binary 0
332 $ hg debugdata lfs.bin 2
332 $ hg debugdata lfs.bin 2
333 version https://git-lfs.github.com/spec/v1
333 version https://git-lfs.github.com/spec/v1
334 oid sha256:2172a5bd492dd41ec533b9bb695f7691b6351719407ac797f0ccad5348c81e62
334 oid sha256:2172a5bd492dd41ec533b9bb695f7691b6351719407ac797f0ccad5348c81e62
335 size 53
335 size 53
336 x-is-binary 0
336 x-is-binary 0
337 $ hg debugdata lfs.bin 3
337 $ hg debugdata lfs.bin 3
338 abort: invalid revision identifier 3
338 abort: invalid revision identifier 3
339 [255]
339 [255]
340
340
341 No diffs when comparing merge and p1 that kept p1's changes. Diff of lfs to
341 No diffs when comparing merge and p1 that kept p1's changes. Diff of lfs to
342 largefiles no longer operates in standin files.
342 largefiles no longer operates in standin files.
343
343
344 This `head -n 20` looks dumb (since we expect no output), but if something
344 This `head -n 20` looks dumb (since we expect no output), but if something
345 breaks you can get 1048576 lines of +y in the output, which takes a looooooong
345 breaks you can get 1048576 lines of +y in the output, which takes a looooooong
346 time to print.
346 time to print.
347 $ hg diff -r 2:3 | head -n 20
347 $ hg diff -r 2:3 | head -n 20
348 $ hg diff -r 2:6 | head -n 20
348 $ hg diff -r 2:6 | head -n 20
349 diff -r e989d0fa3764 -r 752e3a0d8488 large.bin
349 diff -r e989d0fa3764 -r 752e3a0d8488 large.bin
350 --- a/large.bin Thu Jan 01 00:00:00 1970 +0000
350 --- a/large.bin Thu Jan 01 00:00:00 1970 +0000
351 +++ b/large.bin Thu Jan 01 00:00:00 1970 +0000
351 +++ b/large.bin Thu Jan 01 00:00:00 1970 +0000
352 @@ -1,1 +1,1 @@
352 @@ -1,1 +1,1 @@
353 -below lfs threshold
353 -below lfs threshold
354 +largefile
354 +largefile
355 diff -r e989d0fa3764 -r 752e3a0d8488 lfs.bin
355 diff -r e989d0fa3764 -r 752e3a0d8488 lfs.bin
356 --- a/lfs.bin Thu Jan 01 00:00:00 1970 +0000
356 --- a/lfs.bin Thu Jan 01 00:00:00 1970 +0000
357 +++ b/lfs.bin Thu Jan 01 00:00:00 1970 +0000
357 +++ b/lfs.bin Thu Jan 01 00:00:00 1970 +0000
358 @@ -1,1 +1,1 @@
358 @@ -1,1 +1,1 @@
359 -lfs above the lfs threshold for length 0000000000000
359 -lfs above the lfs threshold for length 0000000000000
360 +largefile above lfs threshold 0000000000000000000000
360 +largefile above lfs threshold 0000000000000000000000
@@ -1,43 +1,43 b''
1 Make a narrow clone then archive it
1 Make a narrow clone then archive it
2 $ . "$TESTDIR/narrow-library.sh"
2 $ . "$TESTDIR/narrow-library.sh"
3
3
4 $ hg init master
4 $ hg init master
5 $ cd master
5 $ cd master
6
6
7 $ for x in `$TESTDIR/seq.py 3`; do
7 $ for x in `$TESTDIR/seq.py 3`; do
8 > echo $x > "f$x"
8 > echo $x > "f$x"
9 > hg add "f$x"
9 > hg add "f$x"
10 > hg commit -m "Add $x"
10 > hg commit -m "Add $x"
11 > done
11 > done
12 $ cat >> .hg/hgrc << EOF
12 $ cat >> .hg/hgrc << EOF
13 > [narrowacl]
13 > [narrowacl]
14 > default.includes=f1 f2
14 > default.includes=f1 f2
15 > EOF
15 > EOF
16 $ hg serve -a localhost -p $HGPORT1 -d --pid-file=hg.pid
16 $ hg serve -a localhost -p $HGPORT1 -d --pid-file=hg.pid
17 $ cat hg.pid >> "$DAEMON_PIDS"
17 $ cat hg.pid >> "$DAEMON_PIDS"
18
18
19 $ cd ..
19 $ cd ..
20 $ hg clone http://localhost:$HGPORT1 narrowclone1
20 $ hg clone http://localhost:$HGPORT1 narrowclone1
21 requesting all changes
21 requesting all changes
22 adding changesets
22 adding changesets
23 adding manifests
23 adding manifests
24 adding file changes
24 adding file changes
25 added 3 changesets with 2 changes to 2 files
25 added 3 changesets with 2 changes to 2 files
26 new changesets * (glob)
26 new changesets * (glob)
27 updating to branch default
27 updating to branch default
28 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
28 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
29
29
30 The clone directory should only contain f1 and f2
30 The clone directory should only contain f1 and f2
31 $ ls -A -1 narrowclone1 | sort
31 $ ls -A -1 narrowclone1 | sort
32 .hg
32 .hg
33 f1
33 f1
34 f2
34 f2
35
35
36 Requirements should contain narrowhg
36 Requirements should contain narrowhg
37 $ cat narrowclone1/.hg/requires | grep narrowhg
37 $ hg debugrequires -R narrowclone1 | grep narrowhg
38 narrowhg-experimental
38 narrowhg-experimental
39
39
40 NarrowHG should track f1 and f2
40 NarrowHG should track f1 and f2
41 $ hg -R narrowclone1 tracked
41 $ hg -R narrowclone1 tracked
42 I path:f1
42 I path:f1
43 I path:f2
43 I path:f2
@@ -1,165 +1,165 b''
1 $ . "$TESTDIR/narrow-library.sh"
1 $ . "$TESTDIR/narrow-library.sh"
2
2
3 $ hg init master
3 $ hg init master
4 $ cd master
4 $ cd master
5 $ mkdir dir
5 $ mkdir dir
6 $ mkdir dir/src
6 $ mkdir dir/src
7 $ cd dir/src
7 $ cd dir/src
8 $ for x in `$TESTDIR/seq.py 20`; do echo $x > "f$x"; hg add "f$x"; hg commit -m "Commit src $x"; done
8 $ for x in `$TESTDIR/seq.py 20`; do echo $x > "f$x"; hg add "f$x"; hg commit -m "Commit src $x"; done
9 $ cd ..
9 $ cd ..
10 $ mkdir tests
10 $ mkdir tests
11 $ cd tests
11 $ cd tests
12 $ for x in `$TESTDIR/seq.py 20`; do echo $x > "t$x"; hg add "t$x"; hg commit -m "Commit test $x"; done
12 $ for x in `$TESTDIR/seq.py 20`; do echo $x > "t$x"; hg add "t$x"; hg commit -m "Commit test $x"; done
13 $ cd ../../..
13 $ cd ../../..
14
14
15 narrow clone a file, f10
15 narrow clone a file, f10
16
16
17 $ hg clone --narrow ssh://user@dummy/master narrow --noupdate --include "dir/src/f10"
17 $ hg clone --narrow ssh://user@dummy/master narrow --noupdate --include "dir/src/f10"
18 requesting all changes
18 requesting all changes
19 adding changesets
19 adding changesets
20 adding manifests
20 adding manifests
21 adding file changes
21 adding file changes
22 added 40 changesets with 1 changes to 1 files
22 added 40 changesets with 1 changes to 1 files
23 new changesets *:* (glob)
23 new changesets *:* (glob)
24 $ cd narrow
24 $ cd narrow
25 $ cat .hg/requires | grep -v generaldelta
25 $ hg debugrequires | grep -v generaldelta
26 dotencode
26 dotencode
27 dirstate-v2 (dirstate-v2 !)
27 dirstate-v2 (dirstate-v2 !)
28 fncache
28 fncache
29 narrowhg-experimental
29 narrowhg-experimental
30 persistent-nodemap (rust !)
30 persistent-nodemap (rust !)
31 revlog-compression-zstd (zstd !)
31 revlog-compression-zstd (zstd !)
32 revlogv1
32 revlogv1
33 sparserevlog
33 sparserevlog
34 store
34 store
35 testonly-simplestore (reposimplestore !)
35 testonly-simplestore (reposimplestore !)
36
36
37 $ hg tracked
37 $ hg tracked
38 I path:dir/src/f10
38 I path:dir/src/f10
39 $ hg update
39 $ hg update
40 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
40 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
41 $ find * | sort
41 $ find * | sort
42 dir
42 dir
43 dir/src
43 dir/src
44 dir/src/f10
44 dir/src/f10
45 $ cat dir/src/f10
45 $ cat dir/src/f10
46 10
46 10
47
47
48 $ cd ..
48 $ cd ..
49
49
50 narrow clone a directory, tests/, except tests/t19
50 narrow clone a directory, tests/, except tests/t19
51
51
52 $ hg clone --narrow ssh://user@dummy/master narrowdir --noupdate --include "dir/tests/" --exclude "dir/tests/t19"
52 $ hg clone --narrow ssh://user@dummy/master narrowdir --noupdate --include "dir/tests/" --exclude "dir/tests/t19"
53 requesting all changes
53 requesting all changes
54 adding changesets
54 adding changesets
55 adding manifests
55 adding manifests
56 adding file changes
56 adding file changes
57 added 40 changesets with 19 changes to 19 files
57 added 40 changesets with 19 changes to 19 files
58 new changesets *:* (glob)
58 new changesets *:* (glob)
59 $ cd narrowdir
59 $ cd narrowdir
60 $ hg tracked
60 $ hg tracked
61 I path:dir/tests
61 I path:dir/tests
62 X path:dir/tests/t19
62 X path:dir/tests/t19
63 $ hg update
63 $ hg update
64 19 files updated, 0 files merged, 0 files removed, 0 files unresolved
64 19 files updated, 0 files merged, 0 files removed, 0 files unresolved
65 $ find * | sort
65 $ find * | sort
66 dir
66 dir
67 dir/tests
67 dir/tests
68 dir/tests/t1
68 dir/tests/t1
69 dir/tests/t10
69 dir/tests/t10
70 dir/tests/t11
70 dir/tests/t11
71 dir/tests/t12
71 dir/tests/t12
72 dir/tests/t13
72 dir/tests/t13
73 dir/tests/t14
73 dir/tests/t14
74 dir/tests/t15
74 dir/tests/t15
75 dir/tests/t16
75 dir/tests/t16
76 dir/tests/t17
76 dir/tests/t17
77 dir/tests/t18
77 dir/tests/t18
78 dir/tests/t2
78 dir/tests/t2
79 dir/tests/t20
79 dir/tests/t20
80 dir/tests/t3
80 dir/tests/t3
81 dir/tests/t4
81 dir/tests/t4
82 dir/tests/t5
82 dir/tests/t5
83 dir/tests/t6
83 dir/tests/t6
84 dir/tests/t7
84 dir/tests/t7
85 dir/tests/t8
85 dir/tests/t8
86 dir/tests/t9
86 dir/tests/t9
87
87
88 $ cd ..
88 $ cd ..
89
89
90 narrow clone everything but a directory (tests/)
90 narrow clone everything but a directory (tests/)
91
91
92 $ hg clone --narrow ssh://user@dummy/master narrowroot --noupdate --exclude "dir/tests"
92 $ hg clone --narrow ssh://user@dummy/master narrowroot --noupdate --exclude "dir/tests"
93 requesting all changes
93 requesting all changes
94 adding changesets
94 adding changesets
95 adding manifests
95 adding manifests
96 adding file changes
96 adding file changes
97 added 40 changesets with 20 changes to 20 files
97 added 40 changesets with 20 changes to 20 files
98 new changesets *:* (glob)
98 new changesets *:* (glob)
99 $ cd narrowroot
99 $ cd narrowroot
100 $ hg tracked
100 $ hg tracked
101 I path:.
101 I path:.
102 X path:dir/tests
102 X path:dir/tests
103 $ hg update
103 $ hg update
104 20 files updated, 0 files merged, 0 files removed, 0 files unresolved
104 20 files updated, 0 files merged, 0 files removed, 0 files unresolved
105 $ find * | sort
105 $ find * | sort
106 dir
106 dir
107 dir/src
107 dir/src
108 dir/src/f1
108 dir/src/f1
109 dir/src/f10
109 dir/src/f10
110 dir/src/f11
110 dir/src/f11
111 dir/src/f12
111 dir/src/f12
112 dir/src/f13
112 dir/src/f13
113 dir/src/f14
113 dir/src/f14
114 dir/src/f15
114 dir/src/f15
115 dir/src/f16
115 dir/src/f16
116 dir/src/f17
116 dir/src/f17
117 dir/src/f18
117 dir/src/f18
118 dir/src/f19
118 dir/src/f19
119 dir/src/f2
119 dir/src/f2
120 dir/src/f20
120 dir/src/f20
121 dir/src/f3
121 dir/src/f3
122 dir/src/f4
122 dir/src/f4
123 dir/src/f5
123 dir/src/f5
124 dir/src/f6
124 dir/src/f6
125 dir/src/f7
125 dir/src/f7
126 dir/src/f8
126 dir/src/f8
127 dir/src/f9
127 dir/src/f9
128
128
129 $ cd ..
129 $ cd ..
130
130
131 Testing the --narrowspec flag to clone
131 Testing the --narrowspec flag to clone
132
132
133 $ cat >> narrowspecs <<EOF
133 $ cat >> narrowspecs <<EOF
134 > %include foo
134 > %include foo
135 > [include]
135 > [include]
136 > path:dir/tests/
136 > path:dir/tests/
137 > path:dir/src/f12
137 > path:dir/src/f12
138 > EOF
138 > EOF
139
139
140 $ hg clone ssh://user@dummy/master specfile --narrowspec narrowspecs
140 $ hg clone ssh://user@dummy/master specfile --narrowspec narrowspecs
141 reading narrowspec from '$TESTTMP/narrowspecs'
141 reading narrowspec from '$TESTTMP/narrowspecs'
142 config error: cannot specify other files using '%include' in narrowspec
142 config error: cannot specify other files using '%include' in narrowspec
143 [30]
143 [30]
144
144
145 $ cat > narrowspecs <<EOF
145 $ cat > narrowspecs <<EOF
146 > [include]
146 > [include]
147 > path:dir/tests/
147 > path:dir/tests/
148 > path:dir/src/f12
148 > path:dir/src/f12
149 > EOF
149 > EOF
150
150
151 $ hg clone ssh://user@dummy/master specfile --narrowspec narrowspecs
151 $ hg clone ssh://user@dummy/master specfile --narrowspec narrowspecs
152 reading narrowspec from '$TESTTMP/narrowspecs'
152 reading narrowspec from '$TESTTMP/narrowspecs'
153 requesting all changes
153 requesting all changes
154 adding changesets
154 adding changesets
155 adding manifests
155 adding manifests
156 adding file changes
156 adding file changes
157 added 40 changesets with 21 changes to 21 files
157 added 40 changesets with 21 changes to 21 files
158 new changesets 681085829a73:26ce255d5b5d
158 new changesets 681085829a73:26ce255d5b5d
159 updating to branch default
159 updating to branch default
160 21 files updated, 0 files merged, 0 files removed, 0 files unresolved
160 21 files updated, 0 files merged, 0 files removed, 0 files unresolved
161 $ cd specfile
161 $ cd specfile
162 $ hg tracked
162 $ hg tracked
163 I path:dir/src/f12
163 I path:dir/src/f12
164 I path:dir/tests
164 I path:dir/tests
165 $ cd ..
165 $ cd ..
@@ -1,102 +1,102 b''
1 #testcases tree flat-fncache flat-nofncache
1 #testcases tree flat-fncache flat-nofncache
2
2
3 Tests narrow stream clones
3 Tests narrow stream clones
4
4
5 $ . "$TESTDIR/narrow-library.sh"
5 $ . "$TESTDIR/narrow-library.sh"
6
6
7 #if tree
7 #if tree
8 $ cat << EOF >> $HGRCPATH
8 $ cat << EOF >> $HGRCPATH
9 > [experimental]
9 > [experimental]
10 > treemanifest = 1
10 > treemanifest = 1
11 > EOF
11 > EOF
12 #endif
12 #endif
13
13
14 #if flat-nofncache
14 #if flat-nofncache
15 $ cat << EOF >> $HGRCPATH
15 $ cat << EOF >> $HGRCPATH
16 > [format]
16 > [format]
17 > usefncache = 0
17 > usefncache = 0
18 > EOF
18 > EOF
19 #endif
19 #endif
20
20
21 Server setup
21 Server setup
22
22
23 $ hg init master
23 $ hg init master
24 $ cd master
24 $ cd master
25 $ mkdir dir
25 $ mkdir dir
26 $ mkdir dir/src
26 $ mkdir dir/src
27 $ cd dir/src
27 $ cd dir/src
28 $ for x in `$TESTDIR/seq.py 20`; do echo $x > "F$x"; hg add "F$x"; hg commit -m "Commit src $x"; done
28 $ for x in `$TESTDIR/seq.py 20`; do echo $x > "F$x"; hg add "F$x"; hg commit -m "Commit src $x"; done
29
29
30 $ cd ..
30 $ cd ..
31 $ mkdir tests
31 $ mkdir tests
32 $ cd tests
32 $ cd tests
33 $ for x in `$TESTDIR/seq.py 20`; do echo $x > "F$x"; hg add "F$x"; hg commit -m "Commit src $x"; done
33 $ for x in `$TESTDIR/seq.py 20`; do echo $x > "F$x"; hg add "F$x"; hg commit -m "Commit src $x"; done
34 $ cd ../../..
34 $ cd ../../..
35
35
36 Trying to stream clone when the server does not support it
36 Trying to stream clone when the server does not support it
37
37
38 $ hg clone --narrow ssh://user@dummy/master narrow --noupdate --include "dir/src/F10" --stream
38 $ hg clone --narrow ssh://user@dummy/master narrow --noupdate --include "dir/src/F10" --stream
39 streaming all changes
39 streaming all changes
40 remote: abort: server does not support narrow stream clones
40 remote: abort: server does not support narrow stream clones
41 abort: pull failed on remote
41 abort: pull failed on remote
42 [100]
42 [100]
43
43
44 Enable stream clone on the server
44 Enable stream clone on the server
45
45
46 $ echo "[experimental]" >> master/.hg/hgrc
46 $ echo "[experimental]" >> master/.hg/hgrc
47 $ echo "server.stream-narrow-clones=True" >> master/.hg/hgrc
47 $ echo "server.stream-narrow-clones=True" >> master/.hg/hgrc
48
48
49 Cloning a specific file when stream clone is supported
49 Cloning a specific file when stream clone is supported
50
50
51 $ hg clone --narrow ssh://user@dummy/master narrow --noupdate --include "dir/src/F10" --stream
51 $ hg clone --narrow ssh://user@dummy/master narrow --noupdate --include "dir/src/F10" --stream
52 streaming all changes
52 streaming all changes
53 * files to transfer, * KB of data (glob)
53 * files to transfer, * KB of data (glob)
54 transferred * KB in * seconds (* */sec) (glob)
54 transferred * KB in * seconds (* */sec) (glob)
55
55
56 $ cd narrow
56 $ cd narrow
57 $ ls -A
57 $ ls -A
58 .hg
58 .hg
59 $ hg tracked
59 $ hg tracked
60 I path:dir/src/F10
60 I path:dir/src/F10
61
61
62 Making sure we have the correct set of requirements
62 Making sure we have the correct set of requirements
63
63
64 $ cat .hg/requires
64 $ hg debugrequires
65 dotencode (tree !)
65 dotencode (tree !)
66 dotencode (flat-fncache !)
66 dotencode (flat-fncache !)
67 dirstate-v2 (dirstate-v2 !)
67 dirstate-v2 (dirstate-v2 !)
68 fncache (tree !)
68 fncache (tree !)
69 fncache (flat-fncache !)
69 fncache (flat-fncache !)
70 generaldelta
70 generaldelta
71 narrowhg-experimental
71 narrowhg-experimental
72 persistent-nodemap (rust !)
72 persistent-nodemap (rust !)
73 revlog-compression-zstd (zstd !)
73 revlog-compression-zstd (zstd !)
74 revlogv1
74 revlogv1
75 sparserevlog
75 sparserevlog
76 store
76 store
77 treemanifest (tree !)
77 treemanifest (tree !)
78
78
79 Making sure store has the required files
79 Making sure store has the required files
80
80
81 $ ls .hg/store/
81 $ ls .hg/store/
82 00changelog.i
82 00changelog.i
83 00manifest.i
83 00manifest.i
84 data
84 data
85 fncache (tree !)
85 fncache (tree !)
86 fncache (flat-fncache !)
86 fncache (flat-fncache !)
87 meta (tree !)
87 meta (tree !)
88 narrowspec
88 narrowspec
89 undo
89 undo
90 undo.backupfiles
90 undo.backupfiles
91 undo.narrowspec
91 undo.narrowspec
92 undo.phaseroots
92 undo.phaseroots
93
93
94 Checking that repository has all the required data and not broken
94 Checking that repository has all the required data and not broken
95
95
96 $ hg verify
96 $ hg verify
97 checking changesets
97 checking changesets
98 checking manifests
98 checking manifests
99 checking directory manifests (tree !)
99 checking directory manifests (tree !)
100 crosschecking files in changesets and manifests
100 crosschecking files in changesets and manifests
101 checking files
101 checking files
102 checked 40 changesets with 1 changes to 1 files
102 checked 40 changesets with 1 changes to 1 files
@@ -1,298 +1,298 b''
1 $ . "$TESTDIR/narrow-library.sh"
1 $ . "$TESTDIR/narrow-library.sh"
2
2
3 $ hg init master
3 $ hg init master
4 $ cd master
4 $ cd master
5 $ cat >> .hg/hgrc <<EOF
5 $ cat >> .hg/hgrc <<EOF
6 > [narrow]
6 > [narrow]
7 > serveellipses=True
7 > serveellipses=True
8 > EOF
8 > EOF
9 $ mkdir dir
9 $ mkdir dir
10 $ mkdir dir/src
10 $ mkdir dir/src
11 $ cd dir/src
11 $ cd dir/src
12 $ for x in `$TESTDIR/seq.py 20`; do echo $x > "f$x"; hg add "f$x"; hg commit -m "Commit src $x"; done
12 $ for x in `$TESTDIR/seq.py 20`; do echo $x > "f$x"; hg add "f$x"; hg commit -m "Commit src $x"; done
13 $ cd ..
13 $ cd ..
14 $ mkdir tests
14 $ mkdir tests
15 $ cd tests
15 $ cd tests
16 $ for x in `$TESTDIR/seq.py 20`; do echo $x > "t$x"; hg add "t$x"; hg commit -m "Commit test $x"; done
16 $ for x in `$TESTDIR/seq.py 20`; do echo $x > "t$x"; hg add "t$x"; hg commit -m "Commit test $x"; done
17 $ cd ../../..
17 $ cd ../../..
18
18
19 Only path: and rootfilesin: pattern prefixes are allowed
19 Only path: and rootfilesin: pattern prefixes are allowed
20
20
21 $ hg clone --narrow ssh://user@dummy/master badnarrow --noupdate --include 'glob:**'
21 $ hg clone --narrow ssh://user@dummy/master badnarrow --noupdate --include 'glob:**'
22 abort: invalid prefix on narrow pattern: glob:**
22 abort: invalid prefix on narrow pattern: glob:**
23 (narrow patterns must begin with one of the following: path:, rootfilesin:)
23 (narrow patterns must begin with one of the following: path:, rootfilesin:)
24 [255]
24 [255]
25
25
26 $ hg clone --narrow ssh://user@dummy/master badnarrow --noupdate --exclude 'set:ignored'
26 $ hg clone --narrow ssh://user@dummy/master badnarrow --noupdate --exclude 'set:ignored'
27 abort: invalid prefix on narrow pattern: set:ignored
27 abort: invalid prefix on narrow pattern: set:ignored
28 (narrow patterns must begin with one of the following: path:, rootfilesin:)
28 (narrow patterns must begin with one of the following: path:, rootfilesin:)
29 [255]
29 [255]
30
30
31 narrow clone a file, f10
31 narrow clone a file, f10
32
32
33 $ hg clone --narrow ssh://user@dummy/master narrow --noupdate --include "dir/src/f10"
33 $ hg clone --narrow ssh://user@dummy/master narrow --noupdate --include "dir/src/f10"
34 requesting all changes
34 requesting all changes
35 adding changesets
35 adding changesets
36 adding manifests
36 adding manifests
37 adding file changes
37 adding file changes
38 added 3 changesets with 1 changes to 1 files
38 added 3 changesets with 1 changes to 1 files
39 new changesets *:* (glob)
39 new changesets *:* (glob)
40 $ cd narrow
40 $ cd narrow
41 $ cat .hg/requires | grep -v generaldelta
41 $ hg debugrequires | grep -v generaldelta
42 dotencode
42 dotencode
43 dirstate-v2 (dirstate-v2 !)
43 dirstate-v2 (dirstate-v2 !)
44 fncache
44 fncache
45 narrowhg-experimental
45 narrowhg-experimental
46 persistent-nodemap (rust !)
46 persistent-nodemap (rust !)
47 revlog-compression-zstd (zstd !)
47 revlog-compression-zstd (zstd !)
48 revlogv1
48 revlogv1
49 sparserevlog
49 sparserevlog
50 store
50 store
51 testonly-simplestore (reposimplestore !)
51 testonly-simplestore (reposimplestore !)
52
52
53 $ hg tracked
53 $ hg tracked
54 I path:dir/src/f10
54 I path:dir/src/f10
55 $ hg tracked
55 $ hg tracked
56 I path:dir/src/f10
56 I path:dir/src/f10
57 $ hg update
57 $ hg update
58 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
58 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
59 $ find * | sort
59 $ find * | sort
60 dir
60 dir
61 dir/src
61 dir/src
62 dir/src/f10
62 dir/src/f10
63 $ cat dir/src/f10
63 $ cat dir/src/f10
64 10
64 10
65
65
66 $ cd ..
66 $ cd ..
67
67
68 local-to-local narrow clones work
68 local-to-local narrow clones work
69
69
70 $ hg clone --narrow master narrow-via-localpeer --noupdate --include "dir/src/f10"
70 $ hg clone --narrow master narrow-via-localpeer --noupdate --include "dir/src/f10"
71 requesting all changes
71 requesting all changes
72 adding changesets
72 adding changesets
73 adding manifests
73 adding manifests
74 adding file changes
74 adding file changes
75 added 3 changesets with 1 changes to 1 files
75 added 3 changesets with 1 changes to 1 files
76 new changesets 5d21aaea77f8:26ce255d5b5d
76 new changesets 5d21aaea77f8:26ce255d5b5d
77 $ hg tracked -R narrow-via-localpeer
77 $ hg tracked -R narrow-via-localpeer
78 I path:dir/src/f10
78 I path:dir/src/f10
79 $ rm -Rf narrow-via-localpeer
79 $ rm -Rf narrow-via-localpeer
80
80
81 narrow clone with a newline should fail
81 narrow clone with a newline should fail
82
82
83 $ hg clone --narrow ssh://user@dummy/master narrow_fail --noupdate --include 'dir/src/f10
83 $ hg clone --narrow ssh://user@dummy/master narrow_fail --noupdate --include 'dir/src/f10
84 > '
84 > '
85 abort: newlines are not allowed in narrowspec paths
85 abort: newlines are not allowed in narrowspec paths
86 [255]
86 [255]
87
87
88 narrow clone a directory, tests/, except tests/t19
88 narrow clone a directory, tests/, except tests/t19
89
89
90 $ hg clone --narrow ssh://user@dummy/master narrowdir --noupdate --include "dir/tests/" --exclude "dir/tests/t19"
90 $ hg clone --narrow ssh://user@dummy/master narrowdir --noupdate --include "dir/tests/" --exclude "dir/tests/t19"
91 requesting all changes
91 requesting all changes
92 adding changesets
92 adding changesets
93 adding manifests
93 adding manifests
94 adding file changes
94 adding file changes
95 added 21 changesets with 19 changes to 19 files
95 added 21 changesets with 19 changes to 19 files
96 new changesets *:* (glob)
96 new changesets *:* (glob)
97 $ cd narrowdir
97 $ cd narrowdir
98 $ hg tracked
98 $ hg tracked
99 I path:dir/tests
99 I path:dir/tests
100 X path:dir/tests/t19
100 X path:dir/tests/t19
101 $ hg tracked
101 $ hg tracked
102 I path:dir/tests
102 I path:dir/tests
103 X path:dir/tests/t19
103 X path:dir/tests/t19
104 $ hg update
104 $ hg update
105 19 files updated, 0 files merged, 0 files removed, 0 files unresolved
105 19 files updated, 0 files merged, 0 files removed, 0 files unresolved
106 $ find * | sort
106 $ find * | sort
107 dir
107 dir
108 dir/tests
108 dir/tests
109 dir/tests/t1
109 dir/tests/t1
110 dir/tests/t10
110 dir/tests/t10
111 dir/tests/t11
111 dir/tests/t11
112 dir/tests/t12
112 dir/tests/t12
113 dir/tests/t13
113 dir/tests/t13
114 dir/tests/t14
114 dir/tests/t14
115 dir/tests/t15
115 dir/tests/t15
116 dir/tests/t16
116 dir/tests/t16
117 dir/tests/t17
117 dir/tests/t17
118 dir/tests/t18
118 dir/tests/t18
119 dir/tests/t2
119 dir/tests/t2
120 dir/tests/t20
120 dir/tests/t20
121 dir/tests/t3
121 dir/tests/t3
122 dir/tests/t4
122 dir/tests/t4
123 dir/tests/t5
123 dir/tests/t5
124 dir/tests/t6
124 dir/tests/t6
125 dir/tests/t7
125 dir/tests/t7
126 dir/tests/t8
126 dir/tests/t8
127 dir/tests/t9
127 dir/tests/t9
128
128
129 $ cd ..
129 $ cd ..
130
130
131 narrow clone everything but a directory (tests/)
131 narrow clone everything but a directory (tests/)
132
132
133 $ hg clone --narrow ssh://user@dummy/master narrowroot --noupdate --exclude "dir/tests"
133 $ hg clone --narrow ssh://user@dummy/master narrowroot --noupdate --exclude "dir/tests"
134 requesting all changes
134 requesting all changes
135 adding changesets
135 adding changesets
136 adding manifests
136 adding manifests
137 adding file changes
137 adding file changes
138 added 21 changesets with 20 changes to 20 files
138 added 21 changesets with 20 changes to 20 files
139 new changesets *:* (glob)
139 new changesets *:* (glob)
140 $ cd narrowroot
140 $ cd narrowroot
141 $ hg tracked
141 $ hg tracked
142 I path:.
142 I path:.
143 X path:dir/tests
143 X path:dir/tests
144 $ hg tracked
144 $ hg tracked
145 I path:.
145 I path:.
146 X path:dir/tests
146 X path:dir/tests
147 $ hg update
147 $ hg update
148 20 files updated, 0 files merged, 0 files removed, 0 files unresolved
148 20 files updated, 0 files merged, 0 files removed, 0 files unresolved
149 $ find * | sort
149 $ find * | sort
150 dir
150 dir
151 dir/src
151 dir/src
152 dir/src/f1
152 dir/src/f1
153 dir/src/f10
153 dir/src/f10
154 dir/src/f11
154 dir/src/f11
155 dir/src/f12
155 dir/src/f12
156 dir/src/f13
156 dir/src/f13
157 dir/src/f14
157 dir/src/f14
158 dir/src/f15
158 dir/src/f15
159 dir/src/f16
159 dir/src/f16
160 dir/src/f17
160 dir/src/f17
161 dir/src/f18
161 dir/src/f18
162 dir/src/f19
162 dir/src/f19
163 dir/src/f2
163 dir/src/f2
164 dir/src/f20
164 dir/src/f20
165 dir/src/f3
165 dir/src/f3
166 dir/src/f4
166 dir/src/f4
167 dir/src/f5
167 dir/src/f5
168 dir/src/f6
168 dir/src/f6
169 dir/src/f7
169 dir/src/f7
170 dir/src/f8
170 dir/src/f8
171 dir/src/f9
171 dir/src/f9
172
172
173 $ cd ..
173 $ cd ..
174
174
175 narrow clone no paths at all
175 narrow clone no paths at all
176
176
177 $ hg clone --narrow ssh://user@dummy/master narrowempty --noupdate
177 $ hg clone --narrow ssh://user@dummy/master narrowempty --noupdate
178 requesting all changes
178 requesting all changes
179 adding changesets
179 adding changesets
180 adding manifests
180 adding manifests
181 adding file changes
181 adding file changes
182 added 1 changesets with 0 changes to 0 files
182 added 1 changesets with 0 changes to 0 files
183 new changesets * (glob)
183 new changesets * (glob)
184 $ cd narrowempty
184 $ cd narrowempty
185 $ hg tracked
185 $ hg tracked
186 $ hg update
186 $ hg update
187 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
187 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
188 $ ls -A
188 $ ls -A
189 .hg
189 .hg
190
190
191 $ cd ..
191 $ cd ..
192
192
193 simple clone
193 simple clone
194 $ hg clone ssh://user@dummy/master simpleclone
194 $ hg clone ssh://user@dummy/master simpleclone
195 requesting all changes
195 requesting all changes
196 adding changesets
196 adding changesets
197 adding manifests
197 adding manifests
198 adding file changes
198 adding file changes
199 added 40 changesets with 40 changes to 40 files
199 added 40 changesets with 40 changes to 40 files
200 new changesets * (glob)
200 new changesets * (glob)
201 updating to branch default
201 updating to branch default
202 40 files updated, 0 files merged, 0 files removed, 0 files unresolved
202 40 files updated, 0 files merged, 0 files removed, 0 files unresolved
203 $ cd simpleclone
203 $ cd simpleclone
204 $ find * | sort
204 $ find * | sort
205 dir
205 dir
206 dir/src
206 dir/src
207 dir/src/f1
207 dir/src/f1
208 dir/src/f10
208 dir/src/f10
209 dir/src/f11
209 dir/src/f11
210 dir/src/f12
210 dir/src/f12
211 dir/src/f13
211 dir/src/f13
212 dir/src/f14
212 dir/src/f14
213 dir/src/f15
213 dir/src/f15
214 dir/src/f16
214 dir/src/f16
215 dir/src/f17
215 dir/src/f17
216 dir/src/f18
216 dir/src/f18
217 dir/src/f19
217 dir/src/f19
218 dir/src/f2
218 dir/src/f2
219 dir/src/f20
219 dir/src/f20
220 dir/src/f3
220 dir/src/f3
221 dir/src/f4
221 dir/src/f4
222 dir/src/f5
222 dir/src/f5
223 dir/src/f6
223 dir/src/f6
224 dir/src/f7
224 dir/src/f7
225 dir/src/f8
225 dir/src/f8
226 dir/src/f9
226 dir/src/f9
227 dir/tests
227 dir/tests
228 dir/tests/t1
228 dir/tests/t1
229 dir/tests/t10
229 dir/tests/t10
230 dir/tests/t11
230 dir/tests/t11
231 dir/tests/t12
231 dir/tests/t12
232 dir/tests/t13
232 dir/tests/t13
233 dir/tests/t14
233 dir/tests/t14
234 dir/tests/t15
234 dir/tests/t15
235 dir/tests/t16
235 dir/tests/t16
236 dir/tests/t17
236 dir/tests/t17
237 dir/tests/t18
237 dir/tests/t18
238 dir/tests/t19
238 dir/tests/t19
239 dir/tests/t2
239 dir/tests/t2
240 dir/tests/t20
240 dir/tests/t20
241 dir/tests/t3
241 dir/tests/t3
242 dir/tests/t4
242 dir/tests/t4
243 dir/tests/t5
243 dir/tests/t5
244 dir/tests/t6
244 dir/tests/t6
245 dir/tests/t7
245 dir/tests/t7
246 dir/tests/t8
246 dir/tests/t8
247 dir/tests/t9
247 dir/tests/t9
248
248
249 $ cd ..
249 $ cd ..
250
250
251 Testing the --narrowspec flag to clone
251 Testing the --narrowspec flag to clone
252
252
253 $ cat >> narrowspecs <<EOF
253 $ cat >> narrowspecs <<EOF
254 > %include foo
254 > %include foo
255 > [include]
255 > [include]
256 > path:dir/tests/
256 > path:dir/tests/
257 > path:dir/src/f12
257 > path:dir/src/f12
258 > EOF
258 > EOF
259
259
260 $ hg clone ssh://user@dummy/master specfile --narrowspec narrowspecs
260 $ hg clone ssh://user@dummy/master specfile --narrowspec narrowspecs
261 reading narrowspec from '$TESTTMP/narrowspecs'
261 reading narrowspec from '$TESTTMP/narrowspecs'
262 config error: cannot specify other files using '%include' in narrowspec
262 config error: cannot specify other files using '%include' in narrowspec
263 [30]
263 [30]
264
264
265 $ cat > narrowspecs <<EOF
265 $ cat > narrowspecs <<EOF
266 > [include]
266 > [include]
267 > path:dir/tests/
267 > path:dir/tests/
268 > path:dir/src/f12
268 > path:dir/src/f12
269 > EOF
269 > EOF
270
270
271 $ hg clone ssh://user@dummy/master specfile --narrowspec narrowspecs
271 $ hg clone ssh://user@dummy/master specfile --narrowspec narrowspecs
272 reading narrowspec from '$TESTTMP/narrowspecs'
272 reading narrowspec from '$TESTTMP/narrowspecs'
273 requesting all changes
273 requesting all changes
274 adding changesets
274 adding changesets
275 adding manifests
275 adding manifests
276 adding file changes
276 adding file changes
277 added 23 changesets with 21 changes to 21 files
277 added 23 changesets with 21 changes to 21 files
278 new changesets c13e3773edb4:26ce255d5b5d
278 new changesets c13e3773edb4:26ce255d5b5d
279 updating to branch default
279 updating to branch default
280 21 files updated, 0 files merged, 0 files removed, 0 files unresolved
280 21 files updated, 0 files merged, 0 files removed, 0 files unresolved
281 $ cd specfile
281 $ cd specfile
282 $ hg tracked
282 $ hg tracked
283 I path:dir/src/f12
283 I path:dir/src/f12
284 I path:dir/tests
284 I path:dir/tests
285 $ cd ..
285 $ cd ..
286
286
287 Narrow spec with invalid patterns is rejected
287 Narrow spec with invalid patterns is rejected
288
288
289 $ cat > narrowspecs <<EOF
289 $ cat > narrowspecs <<EOF
290 > [include]
290 > [include]
291 > glob:**
291 > glob:**
292 > EOF
292 > EOF
293
293
294 $ hg clone ssh://user@dummy/master badspecfile --narrowspec narrowspecs
294 $ hg clone ssh://user@dummy/master badspecfile --narrowspec narrowspecs
295 reading narrowspec from '$TESTTMP/narrowspecs'
295 reading narrowspec from '$TESTTMP/narrowspecs'
296 abort: invalid prefix on narrow pattern: glob:**
296 abort: invalid prefix on narrow pattern: glob:**
297 (narrow patterns must begin with one of the following: path:, rootfilesin:)
297 (narrow patterns must begin with one of the following: path:, rootfilesin:)
298 [255]
298 [255]
@@ -1,97 +1,97 b''
1 Testing interaction of sparse and narrow when both are enabled on the client
1 Testing interaction of sparse and narrow when both are enabled on the client
2 side and we do a non-ellipsis clone
2 side and we do a non-ellipsis clone
3
3
4 #testcases tree flat
4 #testcases tree flat
5 $ . "$TESTDIR/narrow-library.sh"
5 $ . "$TESTDIR/narrow-library.sh"
6 $ cat << EOF >> $HGRCPATH
6 $ cat << EOF >> $HGRCPATH
7 > [extensions]
7 > [extensions]
8 > sparse =
8 > sparse =
9 > EOF
9 > EOF
10
10
11 #if tree
11 #if tree
12 $ cat << EOF >> $HGRCPATH
12 $ cat << EOF >> $HGRCPATH
13 > [experimental]
13 > [experimental]
14 > treemanifest = 1
14 > treemanifest = 1
15 > EOF
15 > EOF
16 #endif
16 #endif
17
17
18 $ hg init master
18 $ hg init master
19 $ cd master
19 $ cd master
20
20
21 $ mkdir inside
21 $ mkdir inside
22 $ echo 'inside' > inside/f
22 $ echo 'inside' > inside/f
23 $ hg add inside/f
23 $ hg add inside/f
24 $ hg commit -m 'add inside'
24 $ hg commit -m 'add inside'
25
25
26 $ mkdir widest
26 $ mkdir widest
27 $ echo 'widest' > widest/f
27 $ echo 'widest' > widest/f
28 $ hg add widest/f
28 $ hg add widest/f
29 $ hg commit -m 'add widest'
29 $ hg commit -m 'add widest'
30
30
31 $ mkdir outside
31 $ mkdir outside
32 $ echo 'outside' > outside/f
32 $ echo 'outside' > outside/f
33 $ hg add outside/f
33 $ hg add outside/f
34 $ hg commit -m 'add outside'
34 $ hg commit -m 'add outside'
35
35
36 $ cd ..
36 $ cd ..
37
37
38 narrow clone the inside file
38 narrow clone the inside file
39
39
40 $ hg clone --narrow ssh://user@dummy/master narrow --include inside/f
40 $ hg clone --narrow ssh://user@dummy/master narrow --include inside/f
41 requesting all changes
41 requesting all changes
42 adding changesets
42 adding changesets
43 adding manifests
43 adding manifests
44 adding file changes
44 adding file changes
45 added 3 changesets with 1 changes to 1 files
45 added 3 changesets with 1 changes to 1 files
46 new changesets *:* (glob)
46 new changesets *:* (glob)
47 updating to branch default
47 updating to branch default
48 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
48 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
49 $ cd narrow
49 $ cd narrow
50 $ hg tracked
50 $ hg tracked
51 I path:inside/f
51 I path:inside/f
52 $ hg files
52 $ hg files
53 inside/f
53 inside/f
54
54
55 XXX: we should have a flag in `hg debugsparse` to list the sparse profile
55 XXX: we should have a flag in `hg debugsparse` to list the sparse profile
56 $ test -f .hg/sparse
56 $ test -f .hg/sparse
57 [1]
57 [1]
58
58
59 $ cat .hg/requires
59 $ hg debugrequires
60 dotencode
60 dotencode
61 dirstate-v2 (dirstate-v2 !)
61 dirstate-v2 (dirstate-v2 !)
62 fncache
62 fncache
63 generaldelta
63 generaldelta
64 narrowhg-experimental
64 narrowhg-experimental
65 persistent-nodemap (rust !)
65 persistent-nodemap (rust !)
66 revlog-compression-zstd (zstd !)
66 revlog-compression-zstd (zstd !)
67 revlogv1
67 revlogv1
68 sparserevlog
68 sparserevlog
69 store
69 store
70 treemanifest (tree !)
70 treemanifest (tree !)
71
71
72 $ hg debugrebuilddirstate
72 $ hg debugrebuilddirstate
73
73
74 We only make the following assertions for the flat test case since in the
74 We only make the following assertions for the flat test case since in the
75 treemanifest test case debugsparse fails with "path ends in directory
75 treemanifest test case debugsparse fails with "path ends in directory
76 separator: outside/" which seems like a bug unrelated to the regression this is
76 separator: outside/" which seems like a bug unrelated to the regression this is
77 testing for.
77 testing for.
78
78
79 #if flat
79 #if flat
80 widening with both sparse and narrow is possible
80 widening with both sparse and narrow is possible
81
81
82 $ cat >> .hg/hgrc <<EOF
82 $ cat >> .hg/hgrc <<EOF
83 > [extensions]
83 > [extensions]
84 > sparse =
84 > sparse =
85 > narrow =
85 > narrow =
86 > EOF
86 > EOF
87
87
88 $ hg debugsparse -X outside/f -X widest/f
88 $ hg debugsparse -X outside/f -X widest/f
89 $ hg tracked -q --addinclude outside/f
89 $ hg tracked -q --addinclude outside/f
90 $ find . -name .hg -prune -o -type f -print | sort
90 $ find . -name .hg -prune -o -type f -print | sort
91 ./inside/f
91 ./inside/f
92
92
93 $ hg debugsparse -d outside/f
93 $ hg debugsparse -d outside/f
94 $ find . -name .hg -prune -o -type f -print | sort
94 $ find . -name .hg -prune -o -type f -print | sort
95 ./inside/f
95 ./inside/f
96 ./outside/f
96 ./outside/f
97 #endif
97 #endif
@@ -1,127 +1,127 b''
1 #require no-windows
1 #require no-windows
2
2
3 $ . "$TESTDIR/remotefilelog-library.sh"
3 $ . "$TESTDIR/remotefilelog-library.sh"
4
4
5 $ hg init master
5 $ hg init master
6 $ cd master
6 $ cd master
7 $ echo treemanifest >> .hg/requires
7 $ echo treemanifest >> .hg/requires
8 $ cat >> .hg/hgrc <<EOF
8 $ cat >> .hg/hgrc <<EOF
9 > [remotefilelog]
9 > [remotefilelog]
10 > server=True
10 > server=True
11 > EOF
11 > EOF
12 # uppercase directory name to test encoding
12 # uppercase directory name to test encoding
13 $ mkdir -p A/B
13 $ mkdir -p A/B
14 $ echo x > A/B/x
14 $ echo x > A/B/x
15 $ hg commit -qAm x
15 $ hg commit -qAm x
16
16
17 $ cd ..
17 $ cd ..
18
18
19 # shallow clone from full
19 # shallow clone from full
20
20
21 $ hgcloneshallow ssh://user@dummy/master shallow --noupdate
21 $ hgcloneshallow ssh://user@dummy/master shallow --noupdate
22 streaming all changes
22 streaming all changes
23 4 files to transfer, 449 bytes of data
23 4 files to transfer, 449 bytes of data
24 transferred 449 bytes in * seconds (*/sec) (glob)
24 transferred 449 bytes in * seconds (*/sec) (glob)
25 searching for changes
25 searching for changes
26 no changes found
26 no changes found
27 $ cd shallow
27 $ cd shallow
28 $ cat .hg/requires
28 $ hg debugrequires
29 dotencode
29 dotencode
30 dirstate-v2 (dirstate-v2 !)
30 dirstate-v2 (dirstate-v2 !)
31 exp-remotefilelog-repo-req-1
31 exp-remotefilelog-repo-req-1
32 fncache
32 fncache
33 generaldelta
33 generaldelta
34 persistent-nodemap (rust !)
34 persistent-nodemap (rust !)
35 revlog-compression-zstd (zstd !)
35 revlog-compression-zstd (zstd !)
36 revlogv1
36 revlogv1
37 sparserevlog
37 sparserevlog
38 store
38 store
39 treemanifest
39 treemanifest
40 $ find .hg/store/meta | sort
40 $ find .hg/store/meta | sort
41 .hg/store/meta
41 .hg/store/meta
42 .hg/store/meta/_a
42 .hg/store/meta/_a
43 .hg/store/meta/_a/00manifest.i
43 .hg/store/meta/_a/00manifest.i
44 .hg/store/meta/_a/_b
44 .hg/store/meta/_a/_b
45 .hg/store/meta/_a/_b/00manifest.i
45 .hg/store/meta/_a/_b/00manifest.i
46
46
47 $ hg update
47 $ hg update
48 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
48 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
49 1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over *s (glob)
49 1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over *s (glob)
50
50
51 $ cat A/B/x
51 $ cat A/B/x
52 x
52 x
53
53
54 $ ls .hg/store/data
54 $ ls .hg/store/data
55 $ echo foo > A/B/F
55 $ echo foo > A/B/F
56 $ hg add A/B/F
56 $ hg add A/B/F
57 $ hg ci -m 'local content'
57 $ hg ci -m 'local content'
58 $ ls .hg/store/data
58 $ ls .hg/store/data
59 ca31988f085bfb945cb8115b78fabdee40f741aa
59 ca31988f085bfb945cb8115b78fabdee40f741aa
60
60
61 $ cd ..
61 $ cd ..
62
62
63 # shallow clone from shallow
63 # shallow clone from shallow
64
64
65 $ hgcloneshallow ssh://user@dummy/shallow shallow2 --noupdate
65 $ hgcloneshallow ssh://user@dummy/shallow shallow2 --noupdate
66 streaming all changes
66 streaming all changes
67 5 files to transfer, 1008 bytes of data
67 5 files to transfer, 1008 bytes of data
68 transferred 1008 bytes in * seconds (*/sec) (glob)
68 transferred 1008 bytes in * seconds (*/sec) (glob)
69 searching for changes
69 searching for changes
70 no changes found
70 no changes found
71 $ cd shallow2
71 $ cd shallow2
72 $ cat .hg/requires
72 $ hg debugrequires
73 dotencode
73 dotencode
74 dirstate-v2 (dirstate-v2 !)
74 dirstate-v2 (dirstate-v2 !)
75 exp-remotefilelog-repo-req-1
75 exp-remotefilelog-repo-req-1
76 fncache
76 fncache
77 generaldelta
77 generaldelta
78 persistent-nodemap (rust !)
78 persistent-nodemap (rust !)
79 revlog-compression-zstd (zstd !)
79 revlog-compression-zstd (zstd !)
80 revlogv1
80 revlogv1
81 sparserevlog
81 sparserevlog
82 store
82 store
83 treemanifest
83 treemanifest
84 $ ls .hg/store/data
84 $ ls .hg/store/data
85 ca31988f085bfb945cb8115b78fabdee40f741aa
85 ca31988f085bfb945cb8115b78fabdee40f741aa
86
86
87 $ hg update
87 $ hg update
88 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
88 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
89
89
90 $ cat A/B/x
90 $ cat A/B/x
91 x
91 x
92
92
93 $ cd ..
93 $ cd ..
94
94
95 # full clone from shallow
95 # full clone from shallow
96 # - send stderr to /dev/null because the order of stdout/err causes
96 # - send stderr to /dev/null because the order of stdout/err causes
97 # flakiness here
97 # flakiness here
98 $ hg clone --noupdate ssh://user@dummy/shallow full 2>/dev/null
98 $ hg clone --noupdate ssh://user@dummy/shallow full 2>/dev/null
99 streaming all changes
99 streaming all changes
100 [100]
100 [100]
101
101
102 # getbundle full clone
102 # getbundle full clone
103
103
104 $ printf '[server]\npreferuncompressed=False\n' >> master/.hg/hgrc
104 $ printf '[server]\npreferuncompressed=False\n' >> master/.hg/hgrc
105 $ hgcloneshallow ssh://user@dummy/master shallow3
105 $ hgcloneshallow ssh://user@dummy/master shallow3
106 requesting all changes
106 requesting all changes
107 adding changesets
107 adding changesets
108 adding manifests
108 adding manifests
109 adding file changes
109 adding file changes
110 added 1 changesets with 0 changes to 0 files
110 added 1 changesets with 0 changes to 0 files
111 new changesets 18d955ee7ba0
111 new changesets 18d955ee7ba0
112 updating to branch default
112 updating to branch default
113 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
113 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
114
114
115 $ ls shallow3/.hg/store/data
115 $ ls shallow3/.hg/store/data
116 $ cat shallow3/.hg/requires
116 $ hg debugrequires -R shallow3/
117 dotencode
117 dotencode
118 dirstate-v2 (dirstate-v2 !)
118 dirstate-v2 (dirstate-v2 !)
119 exp-remotefilelog-repo-req-1
119 exp-remotefilelog-repo-req-1
120 fncache
120 fncache
121 generaldelta
121 generaldelta
122 persistent-nodemap (rust !)
122 persistent-nodemap (rust !)
123 revlog-compression-zstd (zstd !)
123 revlog-compression-zstd (zstd !)
124 revlogv1
124 revlogv1
125 sparserevlog
125 sparserevlog
126 store
126 store
127 treemanifest
127 treemanifest
@@ -1,124 +1,124 b''
1 #require no-windows
1 #require no-windows
2
2
3 $ . "$TESTDIR/remotefilelog-library.sh"
3 $ . "$TESTDIR/remotefilelog-library.sh"
4
4
5 $ hg init master
5 $ hg init master
6 $ cd master
6 $ cd master
7 $ cat >> .hg/hgrc <<EOF
7 $ cat >> .hg/hgrc <<EOF
8 > [remotefilelog]
8 > [remotefilelog]
9 > server=True
9 > server=True
10 > EOF
10 > EOF
11 $ echo x > x
11 $ echo x > x
12 $ hg commit -qAm x
12 $ hg commit -qAm x
13
13
14 $ cd ..
14 $ cd ..
15
15
16 # shallow clone from full
16 # shallow clone from full
17
17
18 $ hgcloneshallow ssh://user@dummy/master shallow --noupdate
18 $ hgcloneshallow ssh://user@dummy/master shallow --noupdate
19 streaming all changes
19 streaming all changes
20 2 files to transfer, 227 bytes of data
20 2 files to transfer, 227 bytes of data
21 transferred 227 bytes in * seconds (*/sec) (glob)
21 transferred 227 bytes in * seconds (*/sec) (glob)
22 searching for changes
22 searching for changes
23 no changes found
23 no changes found
24 $ cd shallow
24 $ cd shallow
25 $ cat .hg/requires
25 $ hg debugrequires
26 dotencode
26 dotencode
27 dirstate-v2 (dirstate-v2 !)
27 dirstate-v2 (dirstate-v2 !)
28 exp-remotefilelog-repo-req-1
28 exp-remotefilelog-repo-req-1
29 fncache
29 fncache
30 generaldelta
30 generaldelta
31 persistent-nodemap (rust !)
31 persistent-nodemap (rust !)
32 revlog-compression-zstd (zstd !)
32 revlog-compression-zstd (zstd !)
33 revlogv1
33 revlogv1
34 sparserevlog
34 sparserevlog
35 store
35 store
36
36
37 $ hg update
37 $ hg update
38 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
38 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
39 1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over *s (glob)
39 1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over *s (glob)
40
40
41 $ cat x
41 $ cat x
42 x
42 x
43
43
44 $ ls .hg/store/data
44 $ ls .hg/store/data
45 $ echo foo > f
45 $ echo foo > f
46 $ hg add f
46 $ hg add f
47 $ hg ci -m 'local content'
47 $ hg ci -m 'local content'
48 $ ls .hg/store/data
48 $ ls .hg/store/data
49 4a0a19218e082a343a1b17e5333409af9d98f0f5
49 4a0a19218e082a343a1b17e5333409af9d98f0f5
50
50
51 $ cd ..
51 $ cd ..
52
52
53 # shallow clone from shallow
53 # shallow clone from shallow
54
54
55 $ hgcloneshallow ssh://user@dummy/shallow shallow2 --noupdate
55 $ hgcloneshallow ssh://user@dummy/shallow shallow2 --noupdate
56 streaming all changes
56 streaming all changes
57 3 files to transfer, 564 bytes of data
57 3 files to transfer, 564 bytes of data
58 transferred 564 bytes in * seconds (*/sec) (glob)
58 transferred 564 bytes in * seconds (*/sec) (glob)
59 searching for changes
59 searching for changes
60 no changes found
60 no changes found
61 $ cd shallow2
61 $ cd shallow2
62 $ cat .hg/requires
62 $ hg debugrequires
63 dotencode
63 dotencode
64 dirstate-v2 (dirstate-v2 !)
64 dirstate-v2 (dirstate-v2 !)
65 exp-remotefilelog-repo-req-1
65 exp-remotefilelog-repo-req-1
66 fncache
66 fncache
67 generaldelta
67 generaldelta
68 persistent-nodemap (rust !)
68 persistent-nodemap (rust !)
69 revlog-compression-zstd (zstd !)
69 revlog-compression-zstd (zstd !)
70 revlogv1
70 revlogv1
71 sparserevlog
71 sparserevlog
72 store
72 store
73 $ ls .hg/store/data
73 $ ls .hg/store/data
74 4a0a19218e082a343a1b17e5333409af9d98f0f5
74 4a0a19218e082a343a1b17e5333409af9d98f0f5
75
75
76 $ hg update
76 $ hg update
77 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
77 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
78
78
79 $ cat x
79 $ cat x
80 x
80 x
81
81
82 $ cd ..
82 $ cd ..
83
83
84 # full clone from shallow
84 # full clone from shallow
85
85
86 Note: the output to STDERR comes from a different process to the output on
86 Note: the output to STDERR comes from a different process to the output on
87 STDOUT and their relative ordering is not deterministic. As a result, the test
87 STDOUT and their relative ordering is not deterministic. As a result, the test
88 was failing sporadically. To avoid this, we capture STDERR to a file and
88 was failing sporadically. To avoid this, we capture STDERR to a file and
89 check its contents separately.
89 check its contents separately.
90
90
91 $ TEMP_STDERR=full-clone-from-shallow.stderr.tmp
91 $ TEMP_STDERR=full-clone-from-shallow.stderr.tmp
92 $ hg clone --noupdate ssh://user@dummy/shallow full 2>$TEMP_STDERR
92 $ hg clone --noupdate ssh://user@dummy/shallow full 2>$TEMP_STDERR
93 streaming all changes
93 streaming all changes
94 [100]
94 [100]
95 $ cat $TEMP_STDERR
95 $ cat $TEMP_STDERR
96 remote: abort: Cannot clone from a shallow repo to a full repo.
96 remote: abort: Cannot clone from a shallow repo to a full repo.
97 abort: pull failed on remote
97 abort: pull failed on remote
98 $ rm $TEMP_STDERR
98 $ rm $TEMP_STDERR
99
99
100 # getbundle full clone
100 # getbundle full clone
101
101
102 $ printf '[server]\npreferuncompressed=False\n' >> master/.hg/hgrc
102 $ printf '[server]\npreferuncompressed=False\n' >> master/.hg/hgrc
103 $ hgcloneshallow ssh://user@dummy/master shallow3
103 $ hgcloneshallow ssh://user@dummy/master shallow3
104 requesting all changes
104 requesting all changes
105 adding changesets
105 adding changesets
106 adding manifests
106 adding manifests
107 adding file changes
107 adding file changes
108 added 1 changesets with 0 changes to 0 files
108 added 1 changesets with 0 changes to 0 files
109 new changesets b292c1e3311f
109 new changesets b292c1e3311f
110 updating to branch default
110 updating to branch default
111 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
111 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
112
112
113 $ ls shallow3/.hg/store/data
113 $ ls shallow3/.hg/store/data
114 $ cat shallow3/.hg/requires
114 $ hg debugrequires -R shallow3/
115 dotencode
115 dotencode
116 dirstate-v2 (dirstate-v2 !)
116 dirstate-v2 (dirstate-v2 !)
117 exp-remotefilelog-repo-req-1
117 exp-remotefilelog-repo-req-1
118 fncache
118 fncache
119 generaldelta
119 generaldelta
120 persistent-nodemap (rust !)
120 persistent-nodemap (rust !)
121 revlog-compression-zstd (zstd !)
121 revlog-compression-zstd (zstd !)
122 revlogv1
122 revlogv1
123 sparserevlog
123 sparserevlog
124 store
124 store
@@ -1,121 +1,121 b''
1 #require no-windows
1 #require no-windows
2
2
3 $ . "$TESTDIR/remotefilelog-library.sh"
3 $ . "$TESTDIR/remotefilelog-library.sh"
4
4
5 $ hg init master
5 $ hg init master
6 $ cd master
6 $ cd master
7 $ cat >> .hg/hgrc <<EOF
7 $ cat >> .hg/hgrc <<EOF
8 > [remotefilelog]
8 > [remotefilelog]
9 > server=True
9 > server=True
10 > EOF
10 > EOF
11 $ echo x > x
11 $ echo x > x
12 $ hg commit -qAm x
12 $ hg commit -qAm x
13 $ mkdir dir
13 $ mkdir dir
14 $ echo y > dir/y
14 $ echo y > dir/y
15 $ hg commit -qAm y
15 $ hg commit -qAm y
16
16
17 $ cd ..
17 $ cd ..
18
18
19 Shallow clone from full
19 Shallow clone from full
20
20
21 $ hgcloneshallow ssh://user@dummy/master shallow --noupdate
21 $ hgcloneshallow ssh://user@dummy/master shallow --noupdate
22 streaming all changes
22 streaming all changes
23 2 files to transfer, 473 bytes of data
23 2 files to transfer, 473 bytes of data
24 transferred 473 bytes in * seconds (*/sec) (glob)
24 transferred 473 bytes in * seconds (*/sec) (glob)
25 searching for changes
25 searching for changes
26 no changes found
26 no changes found
27 $ cd shallow
27 $ cd shallow
28 $ cat .hg/requires
28 $ hg debugrequires
29 dotencode
29 dotencode
30 dirstate-v2 (dirstate-v2 !)
30 dirstate-v2 (dirstate-v2 !)
31 exp-remotefilelog-repo-req-1
31 exp-remotefilelog-repo-req-1
32 fncache
32 fncache
33 generaldelta
33 generaldelta
34 persistent-nodemap (rust !)
34 persistent-nodemap (rust !)
35 revlog-compression-zstd (zstd !)
35 revlog-compression-zstd (zstd !)
36 revlogv1
36 revlogv1
37 sparserevlog
37 sparserevlog
38 store
38 store
39
39
40 $ hg update
40 $ hg update
41 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
41 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
42 2 files fetched over 1 fetches - (2 misses, 0.00% hit ratio) over *s (glob)
42 2 files fetched over 1 fetches - (2 misses, 0.00% hit ratio) over *s (glob)
43
43
44 Log on a file without -f
44 Log on a file without -f
45
45
46 $ hg log dir/y
46 $ hg log dir/y
47 warning: file log can be slow on large repos - use -f to speed it up
47 warning: file log can be slow on large repos - use -f to speed it up
48 changeset: 1:2e73264fab97
48 changeset: 1:2e73264fab97
49 tag: tip
49 tag: tip
50 user: test
50 user: test
51 date: Thu Jan 01 00:00:00 1970 +0000
51 date: Thu Jan 01 00:00:00 1970 +0000
52 summary: y
52 summary: y
53
53
54 Log on a file with -f
54 Log on a file with -f
55
55
56 $ hg log -f dir/y
56 $ hg log -f dir/y
57 changeset: 1:2e73264fab97
57 changeset: 1:2e73264fab97
58 tag: tip
58 tag: tip
59 user: test
59 user: test
60 date: Thu Jan 01 00:00:00 1970 +0000
60 date: Thu Jan 01 00:00:00 1970 +0000
61 summary: y
61 summary: y
62
62
63 Log on a file with kind in path
63 Log on a file with kind in path
64 $ hg log -r "filelog('path:dir/y')"
64 $ hg log -r "filelog('path:dir/y')"
65 changeset: 1:2e73264fab97
65 changeset: 1:2e73264fab97
66 tag: tip
66 tag: tip
67 user: test
67 user: test
68 date: Thu Jan 01 00:00:00 1970 +0000
68 date: Thu Jan 01 00:00:00 1970 +0000
69 summary: y
69 summary: y
70
70
71 Log on multiple files with -f
71 Log on multiple files with -f
72
72
73 $ hg log -f dir/y x
73 $ hg log -f dir/y x
74 changeset: 1:2e73264fab97
74 changeset: 1:2e73264fab97
75 tag: tip
75 tag: tip
76 user: test
76 user: test
77 date: Thu Jan 01 00:00:00 1970 +0000
77 date: Thu Jan 01 00:00:00 1970 +0000
78 summary: y
78 summary: y
79
79
80 changeset: 0:b292c1e3311f
80 changeset: 0:b292c1e3311f
81 user: test
81 user: test
82 date: Thu Jan 01 00:00:00 1970 +0000
82 date: Thu Jan 01 00:00:00 1970 +0000
83 summary: x
83 summary: x
84
84
85 Log on a directory
85 Log on a directory
86
86
87 $ hg log dir
87 $ hg log dir
88 changeset: 1:2e73264fab97
88 changeset: 1:2e73264fab97
89 tag: tip
89 tag: tip
90 user: test
90 user: test
91 date: Thu Jan 01 00:00:00 1970 +0000
91 date: Thu Jan 01 00:00:00 1970 +0000
92 summary: y
92 summary: y
93
93
94 Log on a file from inside a directory
94 Log on a file from inside a directory
95
95
96 $ cd dir
96 $ cd dir
97 $ hg log y
97 $ hg log y
98 warning: file log can be slow on large repos - use -f to speed it up
98 warning: file log can be slow on large repos - use -f to speed it up
99 changeset: 1:2e73264fab97
99 changeset: 1:2e73264fab97
100 tag: tip
100 tag: tip
101 user: test
101 user: test
102 date: Thu Jan 01 00:00:00 1970 +0000
102 date: Thu Jan 01 00:00:00 1970 +0000
103 summary: y
103 summary: y
104
104
105 Log on a file via -fr
105 Log on a file via -fr
106 $ cd ..
106 $ cd ..
107 $ hg log -fr tip dir/ --template '{rev}\n'
107 $ hg log -fr tip dir/ --template '{rev}\n'
108 1
108 1
109
109
110 Trace renames
110 Trace renames
111 $ hg mv x z
111 $ hg mv x z
112 $ hg commit -m move
112 $ hg commit -m move
113 $ hg log -f z -T '{desc} {file_copies}\n' -G
113 $ hg log -f z -T '{desc} {file_copies}\n' -G
114 @ move z (x)
114 @ move z (x)
115 :
115 :
116 o x
116 o x
117
117
118
118
119 Verify remotefilelog handles rename metadata stripping when comparing file sizes
119 Verify remotefilelog handles rename metadata stripping when comparing file sizes
120 $ hg debugrebuilddirstate
120 $ hg debugrebuilddirstate
121 $ hg status
121 $ hg status
@@ -1,258 +1,258 b''
1 A new repository uses zlib storage, which doesn't need a requirement
1 A new repository uses zlib storage, which doesn't need a requirement
2
2
3 $ cat << EOF >> $HGRCPATH
3 $ cat << EOF >> $HGRCPATH
4 > [format]
4 > [format]
5 > # stabilize test accross variant
5 > # stabilize test accross variant
6 > revlog-compression=zlib
6 > revlog-compression=zlib
7 > EOF
7 > EOF
8
8
9
9
10 $ hg init default
10 $ hg init default
11 $ cd default
11 $ cd default
12 $ cat .hg/requires
12 $ hg debugrequires
13 dotencode
13 dotencode
14 dirstate-v2 (dirstate-v2 !)
14 dirstate-v2 (dirstate-v2 !)
15 fncache
15 fncache
16 generaldelta
16 generaldelta
17 persistent-nodemap (rust !)
17 persistent-nodemap (rust !)
18 revlogv1
18 revlogv1
19 sparserevlog
19 sparserevlog
20 store
20 store
21 testonly-simplestore (reposimplestore !)
21 testonly-simplestore (reposimplestore !)
22
22
23 $ touch foo
23 $ touch foo
24 $ hg -q commit -A -m 'initial commit with a lot of repeated repeated repeated text to trigger compression'
24 $ hg -q commit -A -m 'initial commit with a lot of repeated repeated repeated text to trigger compression'
25 $ hg debugrevlog -c | grep 0x78
25 $ hg debugrevlog -c | grep 0x78
26 0x78 (x) : 1 (100.00%)
26 0x78 (x) : 1 (100.00%)
27 0x78 (x) : 110 (100.00%)
27 0x78 (x) : 110 (100.00%)
28
28
29 $ cd ..
29 $ cd ..
30
30
31 Unknown compression engine to format.compression aborts
31 Unknown compression engine to format.compression aborts
32
32
33 $ hg --config format.revlog-compression=unknown init unknown
33 $ hg --config format.revlog-compression=unknown init unknown
34 abort: compression engines "unknown" defined by format.revlog-compression not available
34 abort: compression engines "unknown" defined by format.revlog-compression not available
35 (run "hg debuginstall" to list available compression engines)
35 (run "hg debuginstall" to list available compression engines)
36 [255]
36 [255]
37
37
38 unknown compression engine in a list with known one works fine
38 unknown compression engine in a list with known one works fine
39
39
40 $ hg --config format.revlog-compression=zlib,unknown init zlib-before-unknow
40 $ hg --config format.revlog-compression=zlib,unknown init zlib-before-unknow
41 $ hg --config format.revlog-compression=unknown,zlib init unknown-before-zlib
41 $ hg --config format.revlog-compression=unknown,zlib init unknown-before-zlib
42
42
43 A requirement specifying an unknown compression engine results in bail
43 A requirement specifying an unknown compression engine results in bail
44
44
45 $ hg init unknownrequirement
45 $ hg init unknownrequirement
46 $ cd unknownrequirement
46 $ cd unknownrequirement
47 $ echo exp-compression-unknown >> .hg/requires
47 $ echo exp-compression-unknown >> .hg/requires
48 $ hg log
48 $ hg log
49 abort: repository requires features unknown to this Mercurial: exp-compression-unknown
49 abort: repository requires features unknown to this Mercurial: exp-compression-unknown
50 (see https://mercurial-scm.org/wiki/MissingRequirement for more information)
50 (see https://mercurial-scm.org/wiki/MissingRequirement for more information)
51 [255]
51 [255]
52
52
53 $ cd ..
53 $ cd ..
54
54
55 Specifying a new format.compression on an existing repo won't introduce data
55 Specifying a new format.compression on an existing repo won't introduce data
56 with that engine or a requirement
56 with that engine or a requirement
57
57
58 $ cd default
58 $ cd default
59 $ touch bar
59 $ touch bar
60 $ hg --config format.revlog-compression=none -q commit -A -m 'add bar with a lot of repeated repeated repeated text'
60 $ hg --config format.revlog-compression=none -q commit -A -m 'add bar with a lot of repeated repeated repeated text'
61
61
62 $ cat .hg/requires
62 $ hg debugrequires
63 dotencode
63 dotencode
64 dirstate-v2 (dirstate-v2 !)
64 dirstate-v2 (dirstate-v2 !)
65 fncache
65 fncache
66 generaldelta
66 generaldelta
67 persistent-nodemap (rust !)
67 persistent-nodemap (rust !)
68 revlogv1
68 revlogv1
69 sparserevlog
69 sparserevlog
70 store
70 store
71 testonly-simplestore (reposimplestore !)
71 testonly-simplestore (reposimplestore !)
72
72
73 $ hg debugrevlog -c | grep 0x78
73 $ hg debugrevlog -c | grep 0x78
74 0x78 (x) : 2 (100.00%)
74 0x78 (x) : 2 (100.00%)
75 0x78 (x) : 199 (100.00%)
75 0x78 (x) : 199 (100.00%)
76 $ cd ..
76 $ cd ..
77
77
78 #if zstd
78 #if zstd
79
79
80 $ hg --config format.revlog-compression=zstd init zstd
80 $ hg --config format.revlog-compression=zstd init zstd
81 $ cd zstd
81 $ cd zstd
82 $ cat .hg/requires
82 $ hg debugrequires
83 dotencode
83 dotencode
84 dirstate-v2 (dirstate-v2 !)
84 dirstate-v2 (dirstate-v2 !)
85 fncache
85 fncache
86 generaldelta
86 generaldelta
87 persistent-nodemap (rust !)
87 persistent-nodemap (rust !)
88 revlog-compression-zstd
88 revlog-compression-zstd
89 revlogv1
89 revlogv1
90 sparserevlog
90 sparserevlog
91 store
91 store
92 testonly-simplestore (reposimplestore !)
92 testonly-simplestore (reposimplestore !)
93
93
94 $ touch foo
94 $ touch foo
95 $ hg -q commit -A -m 'initial commit with a lot of repeated repeated repeated text'
95 $ hg -q commit -A -m 'initial commit with a lot of repeated repeated repeated text'
96
96
97 $ hg debugrevlog -c | grep 0x28
97 $ hg debugrevlog -c | grep 0x28
98 0x28 : 1 (100.00%)
98 0x28 : 1 (100.00%)
99 0x28 : 98 (100.00%)
99 0x28 : 98 (100.00%)
100
100
101 $ cd ..
101 $ cd ..
102
102
103
103
104 #endif
104 #endif
105
105
106 checking zlib options
106 checking zlib options
107 =====================
107 =====================
108
108
109 $ hg init zlib-level-default
109 $ hg init zlib-level-default
110 $ hg init zlib-level-1
110 $ hg init zlib-level-1
111 $ cat << EOF >> zlib-level-1/.hg/hgrc
111 $ cat << EOF >> zlib-level-1/.hg/hgrc
112 > [storage]
112 > [storage]
113 > revlog.zlib.level=1
113 > revlog.zlib.level=1
114 > EOF
114 > EOF
115 $ hg init zlib-level-9
115 $ hg init zlib-level-9
116 $ cat << EOF >> zlib-level-9/.hg/hgrc
116 $ cat << EOF >> zlib-level-9/.hg/hgrc
117 > [storage]
117 > [storage]
118 > revlog.zlib.level=9
118 > revlog.zlib.level=9
119 > EOF
119 > EOF
120
120
121
121
122 $ commitone() {
122 $ commitone() {
123 > repo=$1
123 > repo=$1
124 > cp $RUNTESTDIR/bundles/issue4438-r1.hg $repo/a
124 > cp $RUNTESTDIR/bundles/issue4438-r1.hg $repo/a
125 > hg -R $repo add $repo/a
125 > hg -R $repo add $repo/a
126 > hg -R $repo commit -m some-commit
126 > hg -R $repo commit -m some-commit
127 > }
127 > }
128
128
129 $ for repo in zlib-level-default zlib-level-1 zlib-level-9; do
129 $ for repo in zlib-level-default zlib-level-1 zlib-level-9; do
130 > commitone $repo
130 > commitone $repo
131 > done
131 > done
132
132
133 $ $RUNTESTDIR/f -s */.hg/store/data/*
133 $ $RUNTESTDIR/f -s */.hg/store/data/*
134 default/.hg/store/data/bar.i: size=64
134 default/.hg/store/data/bar.i: size=64
135 default/.hg/store/data/foo.i: size=64
135 default/.hg/store/data/foo.i: size=64
136 zlib-level-1/.hg/store/data/a.i: size=4146
136 zlib-level-1/.hg/store/data/a.i: size=4146
137 zlib-level-9/.hg/store/data/a.i: size=4138
137 zlib-level-9/.hg/store/data/a.i: size=4138
138 zlib-level-default/.hg/store/data/a.i: size=4138
138 zlib-level-default/.hg/store/data/a.i: size=4138
139 zstd/.hg/store/data/foo.i: size=64 (zstd !)
139 zstd/.hg/store/data/foo.i: size=64 (zstd !)
140
140
141 Test error cases
141 Test error cases
142
142
143 $ hg init zlib-level-invalid
143 $ hg init zlib-level-invalid
144 $ cat << EOF >> zlib-level-invalid/.hg/hgrc
144 $ cat << EOF >> zlib-level-invalid/.hg/hgrc
145 > [storage]
145 > [storage]
146 > revlog.zlib.level=foobar
146 > revlog.zlib.level=foobar
147 > EOF
147 > EOF
148 $ commitone zlib-level-invalid
148 $ commitone zlib-level-invalid
149 config error: storage.revlog.zlib.level is not a valid integer ('foobar')
149 config error: storage.revlog.zlib.level is not a valid integer ('foobar')
150 config error: storage.revlog.zlib.level is not a valid integer ('foobar')
150 config error: storage.revlog.zlib.level is not a valid integer ('foobar')
151 [30]
151 [30]
152
152
153 $ hg init zlib-level-out-of-range
153 $ hg init zlib-level-out-of-range
154 $ cat << EOF >> zlib-level-out-of-range/.hg/hgrc
154 $ cat << EOF >> zlib-level-out-of-range/.hg/hgrc
155 > [storage]
155 > [storage]
156 > revlog.zlib.level=42
156 > revlog.zlib.level=42
157 > EOF
157 > EOF
158
158
159 $ commitone zlib-level-out-of-range
159 $ commitone zlib-level-out-of-range
160 abort: invalid value for `storage.revlog.zlib.level` config: 42
160 abort: invalid value for `storage.revlog.zlib.level` config: 42
161 abort: invalid value for `storage.revlog.zlib.level` config: 42
161 abort: invalid value for `storage.revlog.zlib.level` config: 42
162 [255]
162 [255]
163
163
164 checking details of none compression
164 checking details of none compression
165 ====================================
165 ====================================
166
166
167 $ hg init none-compression --config format.revlog-compression=none
167 $ hg init none-compression --config format.revlog-compression=none
168
168
169 $ commitone() {
169 $ commitone() {
170 > repo=$1
170 > repo=$1
171 > cp $RUNTESTDIR/bundles/issue4438-r1.hg $repo/a
171 > cp $RUNTESTDIR/bundles/issue4438-r1.hg $repo/a
172 > hg -R $repo add $repo/a
172 > hg -R $repo add $repo/a
173 > hg -R $repo commit -m some-commit
173 > hg -R $repo commit -m some-commit
174 > }
174 > }
175
175
176 $ commitone none-compression
176 $ commitone none-compression
177
177
178 $ hg log -R none-compression
178 $ hg log -R none-compression
179 changeset: 0:68b53da39cd8
179 changeset: 0:68b53da39cd8
180 tag: tip
180 tag: tip
181 user: test
181 user: test
182 date: Thu Jan 01 00:00:00 1970 +0000
182 date: Thu Jan 01 00:00:00 1970 +0000
183 summary: some-commit
183 summary: some-commit
184
184
185
185
186 $ cat none-compression/.hg/requires
186 $ hg debugrequires -R none-compression/
187 dotencode
187 dotencode
188 exp-compression-none
188 exp-compression-none
189 dirstate-v2 (dirstate-v2 !)
189 dirstate-v2 (dirstate-v2 !)
190 fncache
190 fncache
191 generaldelta
191 generaldelta
192 persistent-nodemap (rust !)
192 persistent-nodemap (rust !)
193 revlogv1
193 revlogv1
194 sparserevlog
194 sparserevlog
195 store
195 store
196 testonly-simplestore (reposimplestore !)
196 testonly-simplestore (reposimplestore !)
197
197
198 $ $RUNTESTDIR/f -s none-compression/.hg/store/data/*
198 $ $RUNTESTDIR/f -s none-compression/.hg/store/data/*
199 none-compression/.hg/store/data/a.i: size=4216
199 none-compression/.hg/store/data/a.i: size=4216
200
200
201 #if zstd
201 #if zstd
202
202
203 checking zstd options
203 checking zstd options
204 =====================
204 =====================
205
205
206 $ hg init zstd-level-default --config format.revlog-compression=zstd
206 $ hg init zstd-level-default --config format.revlog-compression=zstd
207 $ hg init zstd-level-1 --config format.revlog-compression=zstd
207 $ hg init zstd-level-1 --config format.revlog-compression=zstd
208 $ cat << EOF >> zstd-level-1/.hg/hgrc
208 $ cat << EOF >> zstd-level-1/.hg/hgrc
209 > [storage]
209 > [storage]
210 > revlog.zstd.level=1
210 > revlog.zstd.level=1
211 > EOF
211 > EOF
212 $ hg init zstd-level-22 --config format.revlog-compression=zstd
212 $ hg init zstd-level-22 --config format.revlog-compression=zstd
213 $ cat << EOF >> zstd-level-22/.hg/hgrc
213 $ cat << EOF >> zstd-level-22/.hg/hgrc
214 > [storage]
214 > [storage]
215 > revlog.zstd.level=22
215 > revlog.zstd.level=22
216 > EOF
216 > EOF
217
217
218
218
219 $ commitone() {
219 $ commitone() {
220 > repo=$1
220 > repo=$1
221 > cp $RUNTESTDIR/bundles/issue4438-r1.hg $repo/a
221 > cp $RUNTESTDIR/bundles/issue4438-r1.hg $repo/a
222 > hg -R $repo add $repo/a
222 > hg -R $repo add $repo/a
223 > hg -R $repo commit -m some-commit
223 > hg -R $repo commit -m some-commit
224 > }
224 > }
225
225
226 $ for repo in zstd-level-default zstd-level-1 zstd-level-22; do
226 $ for repo in zstd-level-default zstd-level-1 zstd-level-22; do
227 > commitone $repo
227 > commitone $repo
228 > done
228 > done
229
229
230 $ $RUNTESTDIR/f -s zstd-*/.hg/store/data/*
230 $ $RUNTESTDIR/f -s zstd-*/.hg/store/data/*
231 zstd-level-1/.hg/store/data/a.i: size=4114
231 zstd-level-1/.hg/store/data/a.i: size=4114
232 zstd-level-22/.hg/store/data/a.i: size=4091
232 zstd-level-22/.hg/store/data/a.i: size=4091
233 zstd-level-default/\.hg/store/data/a\.i: size=(4094|4102) (re)
233 zstd-level-default/\.hg/store/data/a\.i: size=(4094|4102) (re)
234
234
235 Test error cases
235 Test error cases
236
236
237 $ hg init zstd-level-invalid --config format.revlog-compression=zstd
237 $ hg init zstd-level-invalid --config format.revlog-compression=zstd
238 $ cat << EOF >> zstd-level-invalid/.hg/hgrc
238 $ cat << EOF >> zstd-level-invalid/.hg/hgrc
239 > [storage]
239 > [storage]
240 > revlog.zstd.level=foobar
240 > revlog.zstd.level=foobar
241 > EOF
241 > EOF
242 $ commitone zstd-level-invalid
242 $ commitone zstd-level-invalid
243 config error: storage.revlog.zstd.level is not a valid integer ('foobar')
243 config error: storage.revlog.zstd.level is not a valid integer ('foobar')
244 config error: storage.revlog.zstd.level is not a valid integer ('foobar')
244 config error: storage.revlog.zstd.level is not a valid integer ('foobar')
245 [30]
245 [30]
246
246
247 $ hg init zstd-level-out-of-range --config format.revlog-compression=zstd
247 $ hg init zstd-level-out-of-range --config format.revlog-compression=zstd
248 $ cat << EOF >> zstd-level-out-of-range/.hg/hgrc
248 $ cat << EOF >> zstd-level-out-of-range/.hg/hgrc
249 > [storage]
249 > [storage]
250 > revlog.zstd.level=42
250 > revlog.zstd.level=42
251 > EOF
251 > EOF
252
252
253 $ commitone zstd-level-out-of-range
253 $ commitone zstd-level-out-of-range
254 abort: invalid value for `storage.revlog.zstd.level` config: 42
254 abort: invalid value for `storage.revlog.zstd.level` config: 42
255 abort: invalid value for `storage.revlog.zstd.level` config: 42
255 abort: invalid value for `storage.revlog.zstd.level` config: 42
256 [255]
256 [255]
257
257
258 #endif
258 #endif
@@ -1,139 +1,139 b''
1 #require reporevlogstore
1 #require reporevlogstore
2
2
3 A repo with unknown revlogv2 requirement string cannot be opened
3 A repo with unknown revlogv2 requirement string cannot be opened
4
4
5 $ hg init invalidreq
5 $ hg init invalidreq
6 $ cd invalidreq
6 $ cd invalidreq
7 $ echo exp-revlogv2.unknown >> .hg/requires
7 $ echo exp-revlogv2.unknown >> .hg/requires
8 $ hg log
8 $ hg log
9 abort: repository requires features unknown to this Mercurial: exp-revlogv2.unknown
9 abort: repository requires features unknown to this Mercurial: exp-revlogv2.unknown
10 (see https://mercurial-scm.org/wiki/MissingRequirement for more information)
10 (see https://mercurial-scm.org/wiki/MissingRequirement for more information)
11 [255]
11 [255]
12 $ cd ..
12 $ cd ..
13
13
14 Can create and open repo with revlog v2 requirement
14 Can create and open repo with revlog v2 requirement
15
15
16 $ cat >> $HGRCPATH << EOF
16 $ cat >> $HGRCPATH << EOF
17 > [experimental]
17 > [experimental]
18 > revlogv2 = enable-unstable-format-and-corrupt-my-data
18 > revlogv2 = enable-unstable-format-and-corrupt-my-data
19 > EOF
19 > EOF
20
20
21 $ hg init new-repo
21 $ hg init new-repo
22 $ cd new-repo
22 $ cd new-repo
23 $ cat .hg/requires
23 $ hg debugrequires
24 dotencode
24 dotencode
25 dirstate-v2 (dirstate-v2 !)
25 dirstate-v2 (dirstate-v2 !)
26 exp-revlogv2.2
26 exp-revlogv2.2
27 fncache
27 fncache
28 generaldelta
28 generaldelta
29 persistent-nodemap (rust !)
29 persistent-nodemap (rust !)
30 revlog-compression-zstd (zstd !)
30 revlog-compression-zstd (zstd !)
31 sparserevlog
31 sparserevlog
32 store
32 store
33
33
34 $ hg log
34 $ hg log
35
35
36 Unknown flags to revlog are rejected
36 Unknown flags to revlog are rejected
37
37
38 >>> with open('.hg/store/00changelog.i', 'wb') as fh:
38 >>> with open('.hg/store/00changelog.i', 'wb') as fh:
39 ... fh.write(b'\xff\x00\xde\xad') and None
39 ... fh.write(b'\xff\x00\xde\xad') and None
40
40
41 $ hg log
41 $ hg log
42 abort: unknown flags (0xff00) in version 57005 revlog 00changelog
42 abort: unknown flags (0xff00) in version 57005 revlog 00changelog
43 [50]
43 [50]
44
44
45 $ cd ..
45 $ cd ..
46
46
47 Writing a simple revlog v2 works
47 Writing a simple revlog v2 works
48
48
49 $ hg init simple
49 $ hg init simple
50 $ cd simple
50 $ cd simple
51 $ touch foo
51 $ touch foo
52 $ hg -q commit -A -m initial
52 $ hg -q commit -A -m initial
53
53
54 $ hg log
54 $ hg log
55 changeset: 0:96ee1d7354c4
55 changeset: 0:96ee1d7354c4
56 tag: tip
56 tag: tip
57 user: test
57 user: test
58 date: Thu Jan 01 00:00:00 1970 +0000
58 date: Thu Jan 01 00:00:00 1970 +0000
59 summary: initial
59 summary: initial
60
60
61
61
62 Header written as expected
62 Header written as expected
63
63
64 $ f --hexdump --bytes 4 .hg/store/00changelog.i
64 $ f --hexdump --bytes 4 .hg/store/00changelog.i
65 .hg/store/00changelog.i:
65 .hg/store/00changelog.i:
66 0000: 00 00 de ad |....|
66 0000: 00 00 de ad |....|
67
67
68 $ f --hexdump --bytes 4 .hg/store/data/foo.i
68 $ f --hexdump --bytes 4 .hg/store/data/foo.i
69 .hg/store/data/foo.i:
69 .hg/store/data/foo.i:
70 0000: 00 00 de ad |....|
70 0000: 00 00 de ad |....|
71
71
72 Bundle use a compatible changegroup format
72 Bundle use a compatible changegroup format
73 ------------------------------------------
73 ------------------------------------------
74
74
75 $ hg bundle --all ../basic.hg
75 $ hg bundle --all ../basic.hg
76 1 changesets found
76 1 changesets found
77 $ hg debugbundle --spec ../basic.hg
77 $ hg debugbundle --spec ../basic.hg
78 bzip2-v2
78 bzip2-v2
79
79
80 The expected files are generated
80 The expected files are generated
81 --------------------------------
81 --------------------------------
82
82
83 We should have have:
83 We should have have:
84 - a docket
84 - a docket
85 - a index file with a unique name
85 - a index file with a unique name
86 - a data file
86 - a data file
87
87
88 $ ls .hg/store/00changelog* .hg/store/00manifest*
88 $ ls .hg/store/00changelog* .hg/store/00manifest*
89 .hg/store/00changelog-1335303a.sda
89 .hg/store/00changelog-1335303a.sda
90 .hg/store/00changelog-6b8ab34b.idx
90 .hg/store/00changelog-6b8ab34b.idx
91 .hg/store/00changelog-b875dfc5.dat
91 .hg/store/00changelog-b875dfc5.dat
92 .hg/store/00changelog.i
92 .hg/store/00changelog.i
93 .hg/store/00manifest-05a21d65.idx
93 .hg/store/00manifest-05a21d65.idx
94 .hg/store/00manifest-43c37dde.dat
94 .hg/store/00manifest-43c37dde.dat
95 .hg/store/00manifest-e2c9362a.sda
95 .hg/store/00manifest-e2c9362a.sda
96 .hg/store/00manifest.i
96 .hg/store/00manifest.i
97
97
98 Local clone works
98 Local clone works
99 -----------------
99 -----------------
100
100
101 $ hg clone . ../cloned-repo
101 $ hg clone . ../cloned-repo
102 updating to branch default
102 updating to branch default
103 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
103 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
104 $ hg tip | tee ../tip-new
104 $ hg tip | tee ../tip-new
105 changeset: 0:96ee1d7354c4
105 changeset: 0:96ee1d7354c4
106 tag: tip
106 tag: tip
107 user: test
107 user: test
108 date: Thu Jan 01 00:00:00 1970 +0000
108 date: Thu Jan 01 00:00:00 1970 +0000
109 summary: initial
109 summary: initial
110
110
111 $ hg tip -R ../cloned-repo | tee ../tip-cloned
111 $ hg tip -R ../cloned-repo | tee ../tip-cloned
112 changeset: 0:96ee1d7354c4
112 changeset: 0:96ee1d7354c4
113 tag: tip
113 tag: tip
114 user: test
114 user: test
115 date: Thu Jan 01 00:00:00 1970 +0000
115 date: Thu Jan 01 00:00:00 1970 +0000
116 summary: initial
116 summary: initial
117
117
118
118
119 The two repository should be identical, this diff MUST be empty
119 The two repository should be identical, this diff MUST be empty
120
120
121 $ cmp ../tip-new ../tip-cloned || diff -U8 ../tip-new ../tip-cloned
121 $ cmp ../tip-new ../tip-cloned || diff -U8 ../tip-new ../tip-cloned
122
122
123
123
124 hg verify should be happy
124 hg verify should be happy
125 -------------------------
125 -------------------------
126
126
127 $ hg verify
127 $ hg verify
128 checking changesets
128 checking changesets
129 checking manifests
129 checking manifests
130 crosschecking files in changesets and manifests
130 crosschecking files in changesets and manifests
131 checking files
131 checking files
132 checked 1 changesets with 1 changes to 1 files
132 checked 1 changesets with 1 changes to 1 files
133
133
134 $ hg verify -R ../cloned-repo
134 $ hg verify -R ../cloned-repo
135 checking changesets
135 checking changesets
136 checking manifests
136 checking manifests
137 crosschecking files in changesets and manifests
137 crosschecking files in changesets and manifests
138 checking files
138 checking files
139 checked 1 changesets with 1 changes to 1 files
139 checked 1 changesets with 1 changes to 1 files
@@ -1,286 +1,286 b''
1 #testcases safe normal
1 #testcases safe normal
2
2
3 #if safe
3 #if safe
4 $ echo "[format]" >> $HGRCPATH
4 $ echo "[format]" >> $HGRCPATH
5 $ echo "use-share-safe = True" >> $HGRCPATH
5 $ echo "use-share-safe = True" >> $HGRCPATH
6 #endif
6 #endif
7
7
8 $ echo "[extensions]" >> $HGRCPATH
8 $ echo "[extensions]" >> $HGRCPATH
9 $ echo "share = " >> $HGRCPATH
9 $ echo "share = " >> $HGRCPATH
10
10
11 prepare repo1
11 prepare repo1
12
12
13 $ hg init repo1
13 $ hg init repo1
14 $ cd repo1
14 $ cd repo1
15 $ echo a > a
15 $ echo a > a
16 $ hg commit -A -m'init'
16 $ hg commit -A -m'init'
17 adding a
17 adding a
18
18
19 share it
19 share it
20
20
21 $ cd ..
21 $ cd ..
22 $ hg share repo1 repo2
22 $ hg share repo1 repo2
23 updating working directory
23 updating working directory
24 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
24 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
25
25
26 share shouldn't have a store dir
26 share shouldn't have a store dir
27
27
28 $ cd repo2
28 $ cd repo2
29 $ test -d .hg/store
29 $ test -d .hg/store
30 [1]
30 [1]
31 $ hg root -Tjson | sed 's|\\\\|\\|g'
31 $ hg root -Tjson | sed 's|\\\\|\\|g'
32 [
32 [
33 {
33 {
34 "hgpath": "$TESTTMP/repo2/.hg",
34 "hgpath": "$TESTTMP/repo2/.hg",
35 "reporoot": "$TESTTMP/repo2",
35 "reporoot": "$TESTTMP/repo2",
36 "storepath": "$TESTTMP/repo1/.hg/store"
36 "storepath": "$TESTTMP/repo1/.hg/store"
37 }
37 }
38 ]
38 ]
39
39
40 share shouldn't have a full cache dir, original repo should
40 share shouldn't have a full cache dir, original repo should
41
41
42 $ hg branches
42 $ hg branches
43 default 0:d3873e73d99e
43 default 0:d3873e73d99e
44 $ hg tags
44 $ hg tags
45 tip 0:d3873e73d99e
45 tip 0:d3873e73d99e
46 $ test -d .hg/cache
46 $ test -d .hg/cache
47 [1]
47 [1]
48 $ ls -1 .hg/wcache || true
48 $ ls -1 .hg/wcache || true
49 checkisexec (execbit !)
49 checkisexec (execbit !)
50 checklink (symlink no-rust !)
50 checklink (symlink no-rust !)
51 checklink-target (symlink no-rust !)
51 checklink-target (symlink no-rust !)
52 manifestfulltextcache (reporevlogstore !)
52 manifestfulltextcache (reporevlogstore !)
53 $ ls -1 ../repo1/.hg/cache
53 $ ls -1 ../repo1/.hg/cache
54 branch2-served
54 branch2-served
55 rbc-names-v1
55 rbc-names-v1
56 rbc-revs-v1
56 rbc-revs-v1
57 tags2-visible
57 tags2-visible
58
58
59 Cloning a shared repo should pick up the full cache dir on the other hand.
59 Cloning a shared repo should pick up the full cache dir on the other hand.
60
60
61 $ hg clone . ../repo2-clone
61 $ hg clone . ../repo2-clone
62 updating to branch default
62 updating to branch default
63 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
63 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
64 $ ls -1 ../repo2-clone/.hg/cache
64 $ ls -1 ../repo2-clone/.hg/cache
65 branch2-base
65 branch2-base
66 branch2-immutable
66 branch2-immutable
67 branch2-served
67 branch2-served
68 branch2-served.hidden
68 branch2-served.hidden
69 branch2-visible
69 branch2-visible
70 branch2-visible-hidden
70 branch2-visible-hidden
71 rbc-names-v1
71 rbc-names-v1
72 rbc-revs-v1
72 rbc-revs-v1
73 tags2
73 tags2
74 tags2-served
74 tags2-served
75 tags2-visible
75 tags2-visible
76
76
77 Some sed versions appends newline, some don't, and some just fails
77 Some sed versions appends newline, some don't, and some just fails
78
78
79 $ cat .hg/sharedpath; echo
79 $ cat .hg/sharedpath; echo
80 $TESTTMP/repo1/.hg
80 $TESTTMP/repo1/.hg
81
81
82 trailing newline on .hg/sharedpath is ok
82 trailing newline on .hg/sharedpath is ok
83 $ hg tip -q
83 $ hg tip -q
84 0:d3873e73d99e
84 0:d3873e73d99e
85 $ echo '' >> .hg/sharedpath
85 $ echo '' >> .hg/sharedpath
86 $ cat .hg/sharedpath
86 $ cat .hg/sharedpath
87 $TESTTMP/repo1/.hg
87 $TESTTMP/repo1/.hg
88 $ hg tip -q
88 $ hg tip -q
89 0:d3873e73d99e
89 0:d3873e73d99e
90
90
91 commit in shared clone
91 commit in shared clone
92
92
93 $ echo a >> a
93 $ echo a >> a
94 $ hg commit -m'change in shared clone'
94 $ hg commit -m'change in shared clone'
95
95
96 check original
96 check original
97
97
98 $ cd ../repo1
98 $ cd ../repo1
99 $ hg log
99 $ hg log
100 changeset: 1:8af4dc49db9e
100 changeset: 1:8af4dc49db9e
101 tag: tip
101 tag: tip
102 user: test
102 user: test
103 date: Thu Jan 01 00:00:00 1970 +0000
103 date: Thu Jan 01 00:00:00 1970 +0000
104 summary: change in shared clone
104 summary: change in shared clone
105
105
106 changeset: 0:d3873e73d99e
106 changeset: 0:d3873e73d99e
107 user: test
107 user: test
108 date: Thu Jan 01 00:00:00 1970 +0000
108 date: Thu Jan 01 00:00:00 1970 +0000
109 summary: init
109 summary: init
110
110
111 $ hg update
111 $ hg update
112 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
112 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
113 $ cat a # should be two lines of "a"
113 $ cat a # should be two lines of "a"
114 a
114 a
115 a
115 a
116
116
117 commit in original
117 commit in original
118
118
119 $ echo b > b
119 $ echo b > b
120 $ hg commit -A -m'another file'
120 $ hg commit -A -m'another file'
121 adding b
121 adding b
122
122
123 check in shared clone
123 check in shared clone
124
124
125 $ cd ../repo2
125 $ cd ../repo2
126 $ hg log
126 $ hg log
127 changeset: 2:c2e0ac586386
127 changeset: 2:c2e0ac586386
128 tag: tip
128 tag: tip
129 user: test
129 user: test
130 date: Thu Jan 01 00:00:00 1970 +0000
130 date: Thu Jan 01 00:00:00 1970 +0000
131 summary: another file
131 summary: another file
132
132
133 changeset: 1:8af4dc49db9e
133 changeset: 1:8af4dc49db9e
134 user: test
134 user: test
135 date: Thu Jan 01 00:00:00 1970 +0000
135 date: Thu Jan 01 00:00:00 1970 +0000
136 summary: change in shared clone
136 summary: change in shared clone
137
137
138 changeset: 0:d3873e73d99e
138 changeset: 0:d3873e73d99e
139 user: test
139 user: test
140 date: Thu Jan 01 00:00:00 1970 +0000
140 date: Thu Jan 01 00:00:00 1970 +0000
141 summary: init
141 summary: init
142
142
143 $ hg update
143 $ hg update
144 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
144 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
145 $ cat b # should exist with one "b"
145 $ cat b # should exist with one "b"
146 b
146 b
147
147
148 hg serve shared clone
148 hg serve shared clone
149
149
150 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid
150 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid
151 $ cat hg.pid >> $DAEMON_PIDS
151 $ cat hg.pid >> $DAEMON_PIDS
152 $ get-with-headers.py localhost:$HGPORT 'raw-file/'
152 $ get-with-headers.py localhost:$HGPORT 'raw-file/'
153 200 Script output follows
153 200 Script output follows
154
154
155
155
156 -rw-r--r-- 4 a
156 -rw-r--r-- 4 a
157 -rw-r--r-- 2 b
157 -rw-r--r-- 2 b
158
158
159
159
160 Cloning a shared repo via bundle2 results in a non-shared clone
160 Cloning a shared repo via bundle2 results in a non-shared clone
161
161
162 $ cd ..
162 $ cd ..
163 $ hg clone -q --stream ssh://user@dummy/`pwd`/repo2 cloned-via-bundle2
163 $ hg clone -q --stream ssh://user@dummy/`pwd`/repo2 cloned-via-bundle2
164 $ cat ./cloned-via-bundle2/.hg/requires | grep "shared"
164 $ hg -R cloned-via-bundle2 debugrequires | grep "shared"
165 [1]
165 [1]
166 $ hg id --cwd cloned-via-bundle2 -r tip
166 $ hg id --cwd cloned-via-bundle2 -r tip
167 c2e0ac586386 tip
167 c2e0ac586386 tip
168 $ cd repo2
168 $ cd repo2
169
169
170 test unshare command
170 test unshare command
171
171
172 $ hg unshare
172 $ hg unshare
173 $ test -d .hg/store
173 $ test -d .hg/store
174 $ test -f .hg/sharedpath
174 $ test -f .hg/sharedpath
175 [1]
175 [1]
176 $ grep shared .hg/requires
176 $ grep shared .hg/requires
177 [1]
177 [1]
178 $ hg unshare
178 $ hg unshare
179 abort: this is not a shared repo
179 abort: this is not a shared repo
180 [255]
180 [255]
181
181
182 check that a change does not propagate
182 check that a change does not propagate
183
183
184 $ echo b >> b
184 $ echo b >> b
185 $ hg commit -m'change in unshared'
185 $ hg commit -m'change in unshared'
186 $ cd ../repo1
186 $ cd ../repo1
187 $ hg id -r tip
187 $ hg id -r tip
188 c2e0ac586386 tip
188 c2e0ac586386 tip
189
189
190 $ cd ..
190 $ cd ..
191
191
192
192
193 non largefiles repos won't enable largefiles
193 non largefiles repos won't enable largefiles
194
194
195 $ hg share --config extensions.largefiles= repo2 sharedrepo
195 $ hg share --config extensions.largefiles= repo2 sharedrepo
196 The fsmonitor extension is incompatible with the largefiles extension and has been disabled. (fsmonitor !)
196 The fsmonitor extension is incompatible with the largefiles extension and has been disabled. (fsmonitor !)
197 The fsmonitor extension is incompatible with the largefiles extension and has been disabled. (fsmonitor !)
197 The fsmonitor extension is incompatible with the largefiles extension and has been disabled. (fsmonitor !)
198 updating working directory
198 updating working directory
199 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
199 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
200 $ [ -f sharedrepo/.hg/hgrc ]
200 $ [ -f sharedrepo/.hg/hgrc ]
201 [1]
201 [1]
202
202
203 test shared clones using relative paths work
203 test shared clones using relative paths work
204
204
205 $ mkdir thisdir
205 $ mkdir thisdir
206 $ hg init thisdir/orig
206 $ hg init thisdir/orig
207 $ hg share -U thisdir/orig thisdir/abs
207 $ hg share -U thisdir/orig thisdir/abs
208 $ hg share -U --relative thisdir/abs thisdir/rel
208 $ hg share -U --relative thisdir/abs thisdir/rel
209 $ cat thisdir/rel/.hg/sharedpath
209 $ cat thisdir/rel/.hg/sharedpath
210 ../../orig/.hg (no-eol)
210 ../../orig/.hg (no-eol)
211 $ grep shared thisdir/*/.hg/requires
211 $ grep shared thisdir/*/.hg/requires
212 thisdir/abs/.hg/requires:shared
212 thisdir/abs/.hg/requires:shared
213 thisdir/rel/.hg/requires:relshared
213 thisdir/rel/.hg/requires:relshared
214 thisdir/rel/.hg/requires:shared
214 thisdir/rel/.hg/requires:shared
215
215
216 test that relative shared paths aren't relative to $PWD
216 test that relative shared paths aren't relative to $PWD
217
217
218 $ cd thisdir
218 $ cd thisdir
219 $ hg -R rel root
219 $ hg -R rel root
220 $TESTTMP/thisdir/rel
220 $TESTTMP/thisdir/rel
221 $ cd ..
221 $ cd ..
222
222
223 now test that relative paths really are relative, survive across
223 now test that relative paths really are relative, survive across
224 renames and changes of PWD
224 renames and changes of PWD
225
225
226 $ hg -R thisdir/abs root
226 $ hg -R thisdir/abs root
227 $TESTTMP/thisdir/abs
227 $TESTTMP/thisdir/abs
228 $ hg -R thisdir/rel root
228 $ hg -R thisdir/rel root
229 $TESTTMP/thisdir/rel
229 $TESTTMP/thisdir/rel
230 $ mv thisdir thatdir
230 $ mv thisdir thatdir
231 $ hg -R thatdir/abs root
231 $ hg -R thatdir/abs root
232 abort: .hg/sharedpath points to nonexistent directory $TESTTMP/thisdir/orig/.hg
232 abort: .hg/sharedpath points to nonexistent directory $TESTTMP/thisdir/orig/.hg
233 [255]
233 [255]
234 $ hg -R thatdir/rel root
234 $ hg -R thatdir/rel root
235 $TESTTMP/thatdir/rel
235 $TESTTMP/thatdir/rel
236
236
237 test unshare relshared repo
237 test unshare relshared repo
238
238
239 $ cd thatdir/rel
239 $ cd thatdir/rel
240 $ hg unshare
240 $ hg unshare
241 $ test -d .hg/store
241 $ test -d .hg/store
242 $ test -f .hg/sharedpath
242 $ test -f .hg/sharedpath
243 [1]
243 [1]
244 $ grep shared .hg/requires
244 $ grep shared .hg/requires
245 [1]
245 [1]
246 $ hg unshare
246 $ hg unshare
247 abort: this is not a shared repo
247 abort: this is not a shared repo
248 [255]
248 [255]
249 $ cd ../..
249 $ cd ../..
250
250
251 $ rm -r thatdir
251 $ rm -r thatdir
252
252
253 Demonstrate buggy behavior around requirements validation
253 Demonstrate buggy behavior around requirements validation
254 See comment in localrepo.py:makelocalrepository() for more.
254 See comment in localrepo.py:makelocalrepository() for more.
255
255
256 $ hg init sharenewrequires
256 $ hg init sharenewrequires
257 $ hg share sharenewrequires shareoldrequires
257 $ hg share sharenewrequires shareoldrequires
258 updating working directory
258 updating working directory
259 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
259 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
260
260
261 $ cat >> sharenewrequires/.hg/requires << EOF
261 $ cat >> sharenewrequires/.hg/requires << EOF
262 > missing-requirement
262 > missing-requirement
263 > EOF
263 > EOF
264
264
265 We cannot open the repo with the unknown requirement
265 We cannot open the repo with the unknown requirement
266
266
267 $ hg -R sharenewrequires status
267 $ hg -R sharenewrequires status
268 abort: repository requires features unknown to this Mercurial: missing-requirement
268 abort: repository requires features unknown to this Mercurial: missing-requirement
269 (see https://mercurial-scm.org/wiki/MissingRequirement for more information)
269 (see https://mercurial-scm.org/wiki/MissingRequirement for more information)
270 [255]
270 [255]
271
271
272 BUG: we don't get the same error when opening the shared repo pointing to it
272 BUG: we don't get the same error when opening the shared repo pointing to it
273
273
274 $ hg -R shareoldrequires status
274 $ hg -R shareoldrequires status
275
275
276 Explicitly kill daemons to let the test exit on Windows
276 Explicitly kill daemons to let the test exit on Windows
277
277
278 $ killdaemons.py
278 $ killdaemons.py
279
279
280 Test sharing a repository which was created with store requirement disable
280 Test sharing a repository which was created with store requirement disable
281
281
282 $ hg init nostore --config format.usestore=false
282 $ hg init nostore --config format.usestore=false
283 ignoring enabled 'format.use-share-safe' config because it is incompatible with disabled 'format.usestore' config (safe !)
283 ignoring enabled 'format.use-share-safe' config because it is incompatible with disabled 'format.usestore' config (safe !)
284 $ hg share nostore sharednostore
284 $ hg share nostore sharednostore
285 abort: cannot create shared repository as source was created with 'format.usestore' config disabled
285 abort: cannot create shared repository as source was created with 'format.usestore' config disabled
286 [255]
286 [255]
@@ -1,81 +1,81 b''
1 $ hg init repo
1 $ hg init repo
2 $ cd repo
2 $ cd repo
3
3
4 $ touch a.html b.html c.py d.py
4 $ touch a.html b.html c.py d.py
5
5
6 $ cat > frontend.sparse << EOF
6 $ cat > frontend.sparse << EOF
7 > [include]
7 > [include]
8 > *.html
8 > *.html
9 > EOF
9 > EOF
10
10
11 $ hg -q commit -A -m initial
11 $ hg -q commit -A -m initial
12
12
13 $ echo 1 > a.html
13 $ echo 1 > a.html
14 $ echo 1 > c.py
14 $ echo 1 > c.py
15 $ hg commit -m 'commit 1'
15 $ hg commit -m 'commit 1'
16
16
17 Enable sparse profile
17 Enable sparse profile
18
18
19 $ cat .hg/requires
19 $ hg debugrequires
20 dotencode
20 dotencode
21 dirstate-v2 (dirstate-v2 !)
21 dirstate-v2 (dirstate-v2 !)
22 fncache
22 fncache
23 generaldelta
23 generaldelta
24 persistent-nodemap (rust !)
24 persistent-nodemap (rust !)
25 revlog-compression-zstd (zstd !)
25 revlog-compression-zstd (zstd !)
26 revlogv1
26 revlogv1
27 sparserevlog
27 sparserevlog
28 store
28 store
29 testonly-simplestore (reposimplestore !)
29 testonly-simplestore (reposimplestore !)
30
30
31 $ hg debugsparse --config extensions.sparse= --enable-profile frontend.sparse
31 $ hg debugsparse --config extensions.sparse= --enable-profile frontend.sparse
32 $ ls -A
32 $ ls -A
33 .hg
33 .hg
34 a.html
34 a.html
35 b.html
35 b.html
36
36
37 Requirement for sparse added when sparse is enabled
37 Requirement for sparse added when sparse is enabled
38
38
39 $ cat .hg/requires
39 $ hg debugrequires --config extensions.sparse=
40 dotencode
40 dotencode
41 dirstate-v2 (dirstate-v2 !)
41 dirstate-v2 (dirstate-v2 !)
42 exp-sparse
42 exp-sparse
43 fncache
43 fncache
44 generaldelta
44 generaldelta
45 persistent-nodemap (rust !)
45 persistent-nodemap (rust !)
46 revlog-compression-zstd (zstd !)
46 revlog-compression-zstd (zstd !)
47 revlogv1
47 revlogv1
48 sparserevlog
48 sparserevlog
49 store
49 store
50 testonly-simplestore (reposimplestore !)
50 testonly-simplestore (reposimplestore !)
51
51
52 Client without sparse enabled reacts properly
52 Client without sparse enabled reacts properly
53
53
54 $ hg files
54 $ hg files
55 abort: repository is using sparse feature but sparse is not enabled; enable the "sparse" extensions to access
55 abort: repository is using sparse feature but sparse is not enabled; enable the "sparse" extensions to access
56 [255]
56 [255]
57
57
58 Requirement for sparse is removed when sparse is disabled
58 Requirement for sparse is removed when sparse is disabled
59
59
60 $ hg debugsparse --reset --config extensions.sparse=
60 $ hg debugsparse --reset --config extensions.sparse=
61
61
62 $ cat .hg/requires
62 $ hg debugrequires
63 dotencode
63 dotencode
64 dirstate-v2 (dirstate-v2 !)
64 dirstate-v2 (dirstate-v2 !)
65 fncache
65 fncache
66 generaldelta
66 generaldelta
67 persistent-nodemap (rust !)
67 persistent-nodemap (rust !)
68 revlog-compression-zstd (zstd !)
68 revlog-compression-zstd (zstd !)
69 revlogv1
69 revlogv1
70 sparserevlog
70 sparserevlog
71 store
71 store
72 testonly-simplestore (reposimplestore !)
72 testonly-simplestore (reposimplestore !)
73
73
74 And client without sparse can access
74 And client without sparse can access
75
75
76 $ hg files
76 $ hg files
77 a.html
77 a.html
78 b.html
78 b.html
79 c.py
79 c.py
80 d.py
80 d.py
81 frontend.sparse
81 frontend.sparse
@@ -1,131 +1,131 b''
1 #require sqlite no-chg
1 #require sqlite no-chg
2
2
3 The sqlitestore backend leaves transactions around when used with chg.
3 The sqlitestore backend leaves transactions around when used with chg.
4 Since this backend is primarily intended as proof-of-concept for
4 Since this backend is primarily intended as proof-of-concept for
5 alternative storage backends, disable it for chg test runs to avoid
5 alternative storage backends, disable it for chg test runs to avoid
6 the instability.
6 the instability.
7
7
8 $ cat >> $HGRCPATH <<EOF
8 $ cat >> $HGRCPATH <<EOF
9 > [extensions]
9 > [extensions]
10 > sqlitestore =
10 > sqlitestore =
11 > EOF
11 > EOF
12
12
13 New repo should not use SQLite by default
13 New repo should not use SQLite by default
14
14
15 $ hg init empty-no-sqlite
15 $ hg init empty-no-sqlite
16 $ cat empty-no-sqlite/.hg/requires
16 $ hg debugrequires -R empty-no-sqlite
17 dotencode
17 dotencode
18 dirstate-v2 (dirstate-v2 !)
18 dirstate-v2 (dirstate-v2 !)
19 fncache
19 fncache
20 generaldelta
20 generaldelta
21 persistent-nodemap (rust !)
21 persistent-nodemap (rust !)
22 revlog-compression-zstd (zstd !)
22 revlog-compression-zstd (zstd !)
23 revlogv1
23 revlogv1
24 sparserevlog
24 sparserevlog
25 store
25 store
26
26
27 storage.new-repo-backend=sqlite is recognized
27 storage.new-repo-backend=sqlite is recognized
28
28
29 $ hg --config storage.new-repo-backend=sqlite init empty-sqlite
29 $ hg --config storage.new-repo-backend=sqlite init empty-sqlite
30 $ cat empty-sqlite/.hg/requires
30 $ hg debugrequires -R empty-sqlite
31 dotencode
31 dotencode
32 dirstate-v2 (dirstate-v2 !)
32 dirstate-v2 (dirstate-v2 !)
33 exp-sqlite-001
33 exp-sqlite-001
34 exp-sqlite-comp-001=zstd (zstd !)
34 exp-sqlite-comp-001=zstd (zstd !)
35 exp-sqlite-comp-001=$BUNDLE2_COMPRESSIONS$ (no-zstd !)
35 exp-sqlite-comp-001=$BUNDLE2_COMPRESSIONS$ (no-zstd !)
36 fncache
36 fncache
37 generaldelta
37 generaldelta
38 persistent-nodemap (rust !)
38 persistent-nodemap (rust !)
39 revlog-compression-zstd (zstd !)
39 revlog-compression-zstd (zstd !)
40 revlogv1
40 revlogv1
41 sparserevlog
41 sparserevlog
42 store
42 store
43
43
44 $ cat >> $HGRCPATH << EOF
44 $ cat >> $HGRCPATH << EOF
45 > [storage]
45 > [storage]
46 > new-repo-backend = sqlite
46 > new-repo-backend = sqlite
47 > EOF
47 > EOF
48
48
49 Can force compression to zlib
49 Can force compression to zlib
50
50
51 $ hg --config storage.sqlite.compression=zlib init empty-zlib
51 $ hg --config storage.sqlite.compression=zlib init empty-zlib
52 $ cat empty-zlib/.hg/requires
52 $ hg debugrequires -R empty-zlib
53 dotencode
53 dotencode
54 dirstate-v2 (dirstate-v2 !)
54 dirstate-v2 (dirstate-v2 !)
55 exp-sqlite-001
55 exp-sqlite-001
56 exp-sqlite-comp-001=$BUNDLE2_COMPRESSIONS$
56 exp-sqlite-comp-001=$BUNDLE2_COMPRESSIONS$
57 fncache
57 fncache
58 generaldelta
58 generaldelta
59 persistent-nodemap (rust !)
59 persistent-nodemap (rust !)
60 revlog-compression-zstd (zstd !)
60 revlog-compression-zstd (zstd !)
61 revlogv1
61 revlogv1
62 sparserevlog
62 sparserevlog
63 store
63 store
64
64
65 Can force compression to none
65 Can force compression to none
66
66
67 $ hg --config storage.sqlite.compression=none init empty-none
67 $ hg --config storage.sqlite.compression=none init empty-none
68 $ cat empty-none/.hg/requires
68 $ hg debugrequires -R empty-none
69 dotencode
69 dotencode
70 dirstate-v2 (dirstate-v2 !)
70 dirstate-v2 (dirstate-v2 !)
71 exp-sqlite-001
71 exp-sqlite-001
72 exp-sqlite-comp-001=none
72 exp-sqlite-comp-001=none
73 fncache
73 fncache
74 generaldelta
74 generaldelta
75 persistent-nodemap (rust !)
75 persistent-nodemap (rust !)
76 revlog-compression-zstd (zstd !)
76 revlog-compression-zstd (zstd !)
77 revlogv1
77 revlogv1
78 sparserevlog
78 sparserevlog
79 store
79 store
80
80
81 Can make a local commit
81 Can make a local commit
82
82
83 $ hg init local-commit
83 $ hg init local-commit
84 $ cd local-commit
84 $ cd local-commit
85 $ echo 0 > foo
85 $ echo 0 > foo
86 $ hg commit -A -m initial
86 $ hg commit -A -m initial
87 adding foo
87 adding foo
88
88
89 That results in a row being inserted into various tables
89 That results in a row being inserted into various tables
90
90
91 $ sqlite3 .hg/store/db.sqlite -init /dev/null << EOF
91 $ sqlite3 .hg/store/db.sqlite -init /dev/null << EOF
92 > SELECT * FROM filepath;
92 > SELECT * FROM filepath;
93 > EOF
93 > EOF
94 1|foo
94 1|foo
95
95
96 $ sqlite3 .hg/store/db.sqlite -init /dev/null << EOF
96 $ sqlite3 .hg/store/db.sqlite -init /dev/null << EOF
97 > SELECT * FROM fileindex;
97 > SELECT * FROM fileindex;
98 > EOF
98 > EOF
99 1|1|0|-1|-1|0|0|1||6/\xef(L\xe2\xca\x02\xae\xcc\x8d\xe6\xd5\xe8\xa1\xc3\xaf\x05V\xfe (esc)
99 1|1|0|-1|-1|0|0|1||6/\xef(L\xe2\xca\x02\xae\xcc\x8d\xe6\xd5\xe8\xa1\xc3\xaf\x05V\xfe (esc)
100
100
101 $ sqlite3 .hg/store/db.sqlite -init /dev/null << EOF
101 $ sqlite3 .hg/store/db.sqlite -init /dev/null << EOF
102 > SELECT * FROM delta;
102 > SELECT * FROM delta;
103 > EOF
103 > EOF
104 1|1| \xd2\xaf\x8d\xd2"\x01\xdd\x8dH\xe5\xdc\xfc\xae\xd2\x81\xff\x94"\xc7|0 (esc)
104 1|1| \xd2\xaf\x8d\xd2"\x01\xdd\x8dH\xe5\xdc\xfc\xae\xd2\x81\xff\x94"\xc7|0 (esc)
105
105
106
106
107 Tracking multiple files works
107 Tracking multiple files works
108
108
109 $ echo 1 > bar
109 $ echo 1 > bar
110 $ hg commit -A -m 'add bar'
110 $ hg commit -A -m 'add bar'
111 adding bar
111 adding bar
112
112
113 $ sqlite3 .hg/store/db.sqlite -init /dev/null << EOF
113 $ sqlite3 .hg/store/db.sqlite -init /dev/null << EOF
114 > SELECT * FROM filedata ORDER BY id ASC;
114 > SELECT * FROM filedata ORDER BY id ASC;
115 > EOF
115 > EOF
116 1|1|foo|0|6/\xef(L\xe2\xca\x02\xae\xcc\x8d\xe6\xd5\xe8\xa1\xc3\xaf\x05V\xfe|-1|-1|0|0|1| (esc)
116 1|1|foo|0|6/\xef(L\xe2\xca\x02\xae\xcc\x8d\xe6\xd5\xe8\xa1\xc3\xaf\x05V\xfe|-1|-1|0|0|1| (esc)
117 2|2|bar|0|\xb8\xe0/d3s\x80!\xa0e\xf9Au\xc7\xcd#\xdb_\x05\xbe|-1|-1|1|0|2| (esc)
117 2|2|bar|0|\xb8\xe0/d3s\x80!\xa0e\xf9Au\xc7\xcd#\xdb_\x05\xbe|-1|-1|1|0|2| (esc)
118
118
119 Multiple revisions of a file works
119 Multiple revisions of a file works
120
120
121 $ echo a >> foo
121 $ echo a >> foo
122 $ hg commit -m 'modify foo'
122 $ hg commit -m 'modify foo'
123
123
124 $ sqlite3 .hg/store/db.sqlite -init /dev/null << EOF
124 $ sqlite3 .hg/store/db.sqlite -init /dev/null << EOF
125 > SELECT * FROM filedata ORDER BY id ASC;
125 > SELECT * FROM filedata ORDER BY id ASC;
126 > EOF
126 > EOF
127 1|1|foo|0|6/\xef(L\xe2\xca\x02\xae\xcc\x8d\xe6\xd5\xe8\xa1\xc3\xaf\x05V\xfe|-1|-1|0|0|1| (esc)
127 1|1|foo|0|6/\xef(L\xe2\xca\x02\xae\xcc\x8d\xe6\xd5\xe8\xa1\xc3\xaf\x05V\xfe|-1|-1|0|0|1| (esc)
128 2|2|bar|0|\xb8\xe0/d3s\x80!\xa0e\xf9Au\xc7\xcd#\xdb_\x05\xbe|-1|-1|1|0|2| (esc)
128 2|2|bar|0|\xb8\xe0/d3s\x80!\xa0e\xf9Au\xc7\xcd#\xdb_\x05\xbe|-1|-1|1|0|2| (esc)
129 3|1|foo|1|\xdd\xb3V\xcd\xde1p@\xf7\x8e\x90\xb8*\x8b,\xe9\x0e\xd6j+|0|-1|2|0|3|1 (esc)
129 3|1|foo|1|\xdd\xb3V\xcd\xde1p@\xf7\x8e\x90\xb8*\x8b,\xe9\x0e\xd6j+|0|-1|2|0|3|1 (esc)
130
130
131 $ cd ..
131 $ cd ..
@@ -1,898 +1,898 b''
1 Set up repo
1 Set up repo
2
2
3 $ hg --config experimental.treemanifest=True init repo
3 $ hg --config experimental.treemanifest=True init repo
4 $ cd repo
4 $ cd repo
5
5
6 Requirements get set on init
6 Requirements get set on init
7
7
8 $ grep treemanifest .hg/requires
8 $ hg debugrequires | grep treemanifest
9 treemanifest
9 treemanifest
10
10
11 Without directories, looks like any other repo
11 Without directories, looks like any other repo
12
12
13 $ echo 0 > a
13 $ echo 0 > a
14 $ echo 0 > b
14 $ echo 0 > b
15 $ hg ci -Aqm initial
15 $ hg ci -Aqm initial
16 $ hg debugdata -m 0
16 $ hg debugdata -m 0
17 a\x00362fef284ce2ca02aecc8de6d5e8a1c3af0556fe (esc)
17 a\x00362fef284ce2ca02aecc8de6d5e8a1c3af0556fe (esc)
18 b\x00362fef284ce2ca02aecc8de6d5e8a1c3af0556fe (esc)
18 b\x00362fef284ce2ca02aecc8de6d5e8a1c3af0556fe (esc)
19
19
20 Submanifest is stored in separate revlog
20 Submanifest is stored in separate revlog
21
21
22 $ mkdir dir1
22 $ mkdir dir1
23 $ echo 1 > dir1/a
23 $ echo 1 > dir1/a
24 $ echo 1 > dir1/b
24 $ echo 1 > dir1/b
25 $ echo 1 > e
25 $ echo 1 > e
26 $ hg ci -Aqm 'add dir1'
26 $ hg ci -Aqm 'add dir1'
27 $ hg debugdata -m 1
27 $ hg debugdata -m 1
28 a\x00362fef284ce2ca02aecc8de6d5e8a1c3af0556fe (esc)
28 a\x00362fef284ce2ca02aecc8de6d5e8a1c3af0556fe (esc)
29 b\x00362fef284ce2ca02aecc8de6d5e8a1c3af0556fe (esc)
29 b\x00362fef284ce2ca02aecc8de6d5e8a1c3af0556fe (esc)
30 dir1\x008b3ffd73f901e83304c83d33132c8e774ceac44et (esc)
30 dir1\x008b3ffd73f901e83304c83d33132c8e774ceac44et (esc)
31 e\x00b8e02f6433738021a065f94175c7cd23db5f05be (esc)
31 e\x00b8e02f6433738021a065f94175c7cd23db5f05be (esc)
32 $ hg debugdata --dir dir1 0
32 $ hg debugdata --dir dir1 0
33 a\x00b8e02f6433738021a065f94175c7cd23db5f05be (esc)
33 a\x00b8e02f6433738021a065f94175c7cd23db5f05be (esc)
34 b\x00b8e02f6433738021a065f94175c7cd23db5f05be (esc)
34 b\x00b8e02f6433738021a065f94175c7cd23db5f05be (esc)
35
35
36 Can add nested directories
36 Can add nested directories
37
37
38 $ mkdir dir1/dir1
38 $ mkdir dir1/dir1
39 $ echo 2 > dir1/dir1/a
39 $ echo 2 > dir1/dir1/a
40 $ echo 2 > dir1/dir1/b
40 $ echo 2 > dir1/dir1/b
41 $ mkdir dir1/dir2
41 $ mkdir dir1/dir2
42 $ echo 2 > dir1/dir2/a
42 $ echo 2 > dir1/dir2/a
43 $ echo 2 > dir1/dir2/b
43 $ echo 2 > dir1/dir2/b
44 $ hg ci -Aqm 'add dir1/dir1'
44 $ hg ci -Aqm 'add dir1/dir1'
45 $ hg files -r .
45 $ hg files -r .
46 a
46 a
47 b
47 b
48 dir1/a
48 dir1/a
49 dir1/b
49 dir1/b
50 dir1/dir1/a
50 dir1/dir1/a
51 dir1/dir1/b
51 dir1/dir1/b
52 dir1/dir2/a
52 dir1/dir2/a
53 dir1/dir2/b
53 dir1/dir2/b
54 e
54 e
55
55
56 The manifest command works
56 The manifest command works
57
57
58 $ hg manifest
58 $ hg manifest
59 a
59 a
60 b
60 b
61 dir1/a
61 dir1/a
62 dir1/b
62 dir1/b
63 dir1/dir1/a
63 dir1/dir1/a
64 dir1/dir1/b
64 dir1/dir1/b
65 dir1/dir2/a
65 dir1/dir2/a
66 dir1/dir2/b
66 dir1/dir2/b
67 e
67 e
68
68
69 Revision is not created for unchanged directory
69 Revision is not created for unchanged directory
70
70
71 $ mkdir dir2
71 $ mkdir dir2
72 $ echo 3 > dir2/a
72 $ echo 3 > dir2/a
73 $ hg add dir2
73 $ hg add dir2
74 adding dir2/a
74 adding dir2/a
75 $ hg debugindex --dir dir1 > before
75 $ hg debugindex --dir dir1 > before
76 $ hg ci -qm 'add dir2'
76 $ hg ci -qm 'add dir2'
77 $ hg debugindex --dir dir1 > after
77 $ hg debugindex --dir dir1 > after
78 $ diff before after
78 $ diff before after
79 $ rm before after
79 $ rm before after
80
80
81 Removing directory does not create an revlog entry
81 Removing directory does not create an revlog entry
82
82
83 $ hg rm dir1/dir1
83 $ hg rm dir1/dir1
84 removing dir1/dir1/a
84 removing dir1/dir1/a
85 removing dir1/dir1/b
85 removing dir1/dir1/b
86 $ hg debugindex --dir dir1/dir1 > before
86 $ hg debugindex --dir dir1/dir1 > before
87 $ hg ci -qm 'remove dir1/dir1'
87 $ hg ci -qm 'remove dir1/dir1'
88 $ hg debugindex --dir dir1/dir1 > after
88 $ hg debugindex --dir dir1/dir1 > after
89 $ diff before after
89 $ diff before after
90 $ rm before after
90 $ rm before after
91
91
92 Check that hg files (calls treemanifest.walk()) works
92 Check that hg files (calls treemanifest.walk()) works
93 without loading all directory revlogs
93 without loading all directory revlogs
94
94
95 $ hg co 'desc("add dir2")'
95 $ hg co 'desc("add dir2")'
96 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
96 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
97 $ mv .hg/store/meta/dir2 .hg/store/meta/dir2-backup
97 $ mv .hg/store/meta/dir2 .hg/store/meta/dir2-backup
98 $ hg files -r . dir1
98 $ hg files -r . dir1
99 dir1/a
99 dir1/a
100 dir1/b
100 dir1/b
101 dir1/dir1/a
101 dir1/dir1/a
102 dir1/dir1/b
102 dir1/dir1/b
103 dir1/dir2/a
103 dir1/dir2/a
104 dir1/dir2/b
104 dir1/dir2/b
105
105
106 Check that status between revisions works (calls treemanifest.matches())
106 Check that status between revisions works (calls treemanifest.matches())
107 without loading all directory revlogs
107 without loading all directory revlogs
108
108
109 $ hg status --rev 'desc("add dir1")' --rev . dir1
109 $ hg status --rev 'desc("add dir1")' --rev . dir1
110 A dir1/dir1/a
110 A dir1/dir1/a
111 A dir1/dir1/b
111 A dir1/dir1/b
112 A dir1/dir2/a
112 A dir1/dir2/a
113 A dir1/dir2/b
113 A dir1/dir2/b
114 $ mv .hg/store/meta/dir2-backup .hg/store/meta/dir2
114 $ mv .hg/store/meta/dir2-backup .hg/store/meta/dir2
115
115
116 Merge creates 2-parent revision of directory revlog
116 Merge creates 2-parent revision of directory revlog
117
117
118 $ echo 5 > dir1/a
118 $ echo 5 > dir1/a
119 $ hg ci -Aqm 'modify dir1/a'
119 $ hg ci -Aqm 'modify dir1/a'
120 $ hg co '.^'
120 $ hg co '.^'
121 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
121 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
122 $ echo 6 > dir1/b
122 $ echo 6 > dir1/b
123 $ hg ci -Aqm 'modify dir1/b'
123 $ hg ci -Aqm 'modify dir1/b'
124 $ hg merge 'desc("modify dir1/a")'
124 $ hg merge 'desc("modify dir1/a")'
125 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
125 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
126 (branch merge, don't forget to commit)
126 (branch merge, don't forget to commit)
127 $ hg ci -m 'conflict-free merge involving dir1/'
127 $ hg ci -m 'conflict-free merge involving dir1/'
128 $ cat dir1/a
128 $ cat dir1/a
129 5
129 5
130 $ cat dir1/b
130 $ cat dir1/b
131 6
131 6
132 $ hg debugindex --dir dir1
132 $ hg debugindex --dir dir1
133 rev linkrev nodeid p1 p2
133 rev linkrev nodeid p1 p2
134 0 1 8b3ffd73f901 000000000000 000000000000
134 0 1 8b3ffd73f901 000000000000 000000000000
135 1 2 68e9d057c5a8 8b3ffd73f901 000000000000
135 1 2 68e9d057c5a8 8b3ffd73f901 000000000000
136 2 4 4698198d2624 68e9d057c5a8 000000000000
136 2 4 4698198d2624 68e9d057c5a8 000000000000
137 3 5 44844058ccce 68e9d057c5a8 000000000000
137 3 5 44844058ccce 68e9d057c5a8 000000000000
138 4 6 bf3d9b744927 68e9d057c5a8 000000000000
138 4 6 bf3d9b744927 68e9d057c5a8 000000000000
139 5 7 dde7c0af2a03 bf3d9b744927 44844058ccce
139 5 7 dde7c0af2a03 bf3d9b744927 44844058ccce
140
140
141 Merge keeping directory from parent 1 does not create revlog entry. (Note that
141 Merge keeping directory from parent 1 does not create revlog entry. (Note that
142 dir1's manifest does change, but only because dir1/a's filelog changes.)
142 dir1's manifest does change, but only because dir1/a's filelog changes.)
143
143
144 $ hg co 'desc("add dir2")'
144 $ hg co 'desc("add dir2")'
145 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
145 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
146 $ echo 8 > dir2/a
146 $ echo 8 > dir2/a
147 $ hg ci -m 'modify dir2/a'
147 $ hg ci -m 'modify dir2/a'
148 created new head
148 created new head
149
149
150 $ hg debugindex --dir dir2 > before
150 $ hg debugindex --dir dir2 > before
151 $ hg merge 'desc("modify dir1/a")'
151 $ hg merge 'desc("modify dir1/a")'
152 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
152 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
153 (branch merge, don't forget to commit)
153 (branch merge, don't forget to commit)
154 $ hg revert -r 'desc("modify dir2/a")' .
154 $ hg revert -r 'desc("modify dir2/a")' .
155 reverting dir1/a
155 reverting dir1/a
156 $ hg ci -m 'merge, keeping parent 1'
156 $ hg ci -m 'merge, keeping parent 1'
157 $ hg debugindex --dir dir2 > after
157 $ hg debugindex --dir dir2 > after
158 $ diff before after
158 $ diff before after
159 $ rm before after
159 $ rm before after
160
160
161 Merge keeping directory from parent 2 does not create revlog entry. (Note that
161 Merge keeping directory from parent 2 does not create revlog entry. (Note that
162 dir2's manifest does change, but only because dir2/a's filelog changes.)
162 dir2's manifest does change, but only because dir2/a's filelog changes.)
163
163
164 $ hg co 'desc("modify dir2/a")'
164 $ hg co 'desc("modify dir2/a")'
165 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
165 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
166 $ hg debugindex --dir dir1 > before
166 $ hg debugindex --dir dir1 > before
167 $ hg merge 'desc("modify dir1/a")'
167 $ hg merge 'desc("modify dir1/a")'
168 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
168 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
169 (branch merge, don't forget to commit)
169 (branch merge, don't forget to commit)
170 $ hg revert -r 'desc("modify dir1/a")' .
170 $ hg revert -r 'desc("modify dir1/a")' .
171 reverting dir2/a
171 reverting dir2/a
172 $ hg ci -m 'merge, keeping parent 2'
172 $ hg ci -m 'merge, keeping parent 2'
173 created new head
173 created new head
174 $ hg debugindex --dir dir1 > after
174 $ hg debugindex --dir dir1 > after
175 $ diff before after
175 $ diff before after
176 $ rm before after
176 $ rm before after
177
177
178 Create flat source repo for tests with mixed flat/tree manifests
178 Create flat source repo for tests with mixed flat/tree manifests
179
179
180 $ cd ..
180 $ cd ..
181 $ hg init repo-flat
181 $ hg init repo-flat
182 $ cd repo-flat
182 $ cd repo-flat
183
183
184 Create a few commits with flat manifest
184 Create a few commits with flat manifest
185
185
186 $ echo 0 > a
186 $ echo 0 > a
187 $ echo 0 > b
187 $ echo 0 > b
188 $ echo 0 > e
188 $ echo 0 > e
189 $ for d in dir1 dir1/dir1 dir1/dir2 dir2
189 $ for d in dir1 dir1/dir1 dir1/dir2 dir2
190 > do
190 > do
191 > mkdir $d
191 > mkdir $d
192 > echo 0 > $d/a
192 > echo 0 > $d/a
193 > echo 0 > $d/b
193 > echo 0 > $d/b
194 > done
194 > done
195 $ hg ci -Aqm initial
195 $ hg ci -Aqm initial
196
196
197 $ echo 1 > a
197 $ echo 1 > a
198 $ echo 1 > dir1/a
198 $ echo 1 > dir1/a
199 $ echo 1 > dir1/dir1/a
199 $ echo 1 > dir1/dir1/a
200 $ hg ci -Aqm 'modify on branch 1'
200 $ hg ci -Aqm 'modify on branch 1'
201
201
202 $ hg co 0
202 $ hg co 0
203 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
203 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
204 $ echo 2 > b
204 $ echo 2 > b
205 $ echo 2 > dir1/b
205 $ echo 2 > dir1/b
206 $ echo 2 > dir1/dir1/b
206 $ echo 2 > dir1/dir1/b
207 $ hg ci -Aqm 'modify on branch 2'
207 $ hg ci -Aqm 'modify on branch 2'
208
208
209 $ hg merge 1
209 $ hg merge 1
210 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
210 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
211 (branch merge, don't forget to commit)
211 (branch merge, don't forget to commit)
212 $ hg ci -m 'merge of flat manifests to new flat manifest'
212 $ hg ci -m 'merge of flat manifests to new flat manifest'
213
213
214 $ hg serve -p $HGPORT -d --pid-file=hg.pid --errorlog=errors.log
214 $ hg serve -p $HGPORT -d --pid-file=hg.pid --errorlog=errors.log
215 $ cat hg.pid >> $DAEMON_PIDS
215 $ cat hg.pid >> $DAEMON_PIDS
216
216
217 Create clone with tree manifests enabled
217 Create clone with tree manifests enabled
218
218
219 $ cd ..
219 $ cd ..
220 $ hg clone --config experimental.treemanifest=1 \
220 $ hg clone --config experimental.treemanifest=1 \
221 > http://localhost:$HGPORT repo-mixed -r 1
221 > http://localhost:$HGPORT repo-mixed -r 1
222 adding changesets
222 adding changesets
223 adding manifests
223 adding manifests
224 adding file changes
224 adding file changes
225 added 2 changesets with 14 changes to 11 files
225 added 2 changesets with 14 changes to 11 files
226 new changesets 5b02a3e8db7e:581ef6037d8b
226 new changesets 5b02a3e8db7e:581ef6037d8b
227 updating to branch default
227 updating to branch default
228 11 files updated, 0 files merged, 0 files removed, 0 files unresolved
228 11 files updated, 0 files merged, 0 files removed, 0 files unresolved
229 $ cd repo-mixed
229 $ cd repo-mixed
230 $ test -d .hg/store/meta
230 $ test -d .hg/store/meta
231 [1]
231 [1]
232 $ grep treemanifest .hg/requires
232 $ hg debugrequires | grep treemanifest
233 treemanifest
233 treemanifest
234
234
235 Should be possible to push updates from flat to tree manifest repo
235 Should be possible to push updates from flat to tree manifest repo
236
236
237 $ hg -R ../repo-flat push ssh://user@dummy/repo-mixed
237 $ hg -R ../repo-flat push ssh://user@dummy/repo-mixed
238 pushing to ssh://user@dummy/repo-mixed
238 pushing to ssh://user@dummy/repo-mixed
239 searching for changes
239 searching for changes
240 remote: adding changesets
240 remote: adding changesets
241 remote: adding manifests
241 remote: adding manifests
242 remote: adding file changes
242 remote: adding file changes
243 remote: added 2 changesets with 3 changes to 3 files
243 remote: added 2 changesets with 3 changes to 3 files
244
244
245 Commit should store revlog per directory
245 Commit should store revlog per directory
246
246
247 $ hg co 1
247 $ hg co 1
248 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
248 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
249 $ echo 3 > a
249 $ echo 3 > a
250 $ echo 3 > dir1/a
250 $ echo 3 > dir1/a
251 $ echo 3 > dir1/dir1/a
251 $ echo 3 > dir1/dir1/a
252 $ hg ci -m 'first tree'
252 $ hg ci -m 'first tree'
253 created new head
253 created new head
254 $ find .hg/store/meta | sort
254 $ find .hg/store/meta | sort
255 .hg/store/meta
255 .hg/store/meta
256 .hg/store/meta/dir1
256 .hg/store/meta/dir1
257 .hg/store/meta/dir1/00manifest.i
257 .hg/store/meta/dir1/00manifest.i
258 .hg/store/meta/dir1/dir1
258 .hg/store/meta/dir1/dir1
259 .hg/store/meta/dir1/dir1/00manifest.i
259 .hg/store/meta/dir1/dir1/00manifest.i
260 .hg/store/meta/dir1/dir2
260 .hg/store/meta/dir1/dir2
261 .hg/store/meta/dir1/dir2/00manifest.i
261 .hg/store/meta/dir1/dir2/00manifest.i
262 .hg/store/meta/dir2
262 .hg/store/meta/dir2
263 .hg/store/meta/dir2/00manifest.i
263 .hg/store/meta/dir2/00manifest.i
264
264
265 Merge of two trees
265 Merge of two trees
266
266
267 $ hg co 2
267 $ hg co 2
268 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
268 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
269 $ hg merge 1
269 $ hg merge 1
270 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
270 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
271 (branch merge, don't forget to commit)
271 (branch merge, don't forget to commit)
272 $ hg ci -m 'merge of flat manifests to new tree manifest'
272 $ hg ci -m 'merge of flat manifests to new tree manifest'
273 created new head
273 created new head
274 $ hg diff -r 3
274 $ hg diff -r 3
275
275
276 Parent of tree root manifest should be flat manifest, and two for merge
276 Parent of tree root manifest should be flat manifest, and two for merge
277
277
278 $ hg debugindex -m
278 $ hg debugindex -m
279 rev linkrev nodeid p1 p2
279 rev linkrev nodeid p1 p2
280 0 0 40536115ed9e 000000000000 000000000000
280 0 0 40536115ed9e 000000000000 000000000000
281 1 1 f3376063c255 40536115ed9e 000000000000
281 1 1 f3376063c255 40536115ed9e 000000000000
282 2 2 5d9b9da231a2 40536115ed9e 000000000000
282 2 2 5d9b9da231a2 40536115ed9e 000000000000
283 3 3 d17d663cbd8a 5d9b9da231a2 f3376063c255
283 3 3 d17d663cbd8a 5d9b9da231a2 f3376063c255
284 4 4 51e32a8c60ee f3376063c255 000000000000
284 4 4 51e32a8c60ee f3376063c255 000000000000
285 5 5 cc5baa78b230 5d9b9da231a2 f3376063c255
285 5 5 cc5baa78b230 5d9b9da231a2 f3376063c255
286
286
287
287
288 Status across flat/tree boundary should work
288 Status across flat/tree boundary should work
289
289
290 $ hg status --rev '.^' --rev .
290 $ hg status --rev '.^' --rev .
291 M a
291 M a
292 M dir1/a
292 M dir1/a
293 M dir1/dir1/a
293 M dir1/dir1/a
294
294
295
295
296 Turning off treemanifest config has no effect
296 Turning off treemanifest config has no effect
297
297
298 $ hg debugindex --dir dir1
298 $ hg debugindex --dir dir1
299 rev linkrev nodeid p1 p2
299 rev linkrev nodeid p1 p2
300 0 4 064927a0648a 000000000000 000000000000
300 0 4 064927a0648a 000000000000 000000000000
301 1 5 25ecb8cb8618 000000000000 000000000000
301 1 5 25ecb8cb8618 000000000000 000000000000
302 $ echo 2 > dir1/a
302 $ echo 2 > dir1/a
303 $ hg --config experimental.treemanifest=False ci -qm 'modify dir1/a'
303 $ hg --config experimental.treemanifest=False ci -qm 'modify dir1/a'
304 $ hg debugindex --dir dir1
304 $ hg debugindex --dir dir1
305 rev linkrev nodeid p1 p2
305 rev linkrev nodeid p1 p2
306 0 4 064927a0648a 000000000000 000000000000
306 0 4 064927a0648a 000000000000 000000000000
307 1 5 25ecb8cb8618 000000000000 000000000000
307 1 5 25ecb8cb8618 000000000000 000000000000
308 2 6 5b16163a30c6 25ecb8cb8618 000000000000
308 2 6 5b16163a30c6 25ecb8cb8618 000000000000
309
309
310 Stripping and recovering changes should work
310 Stripping and recovering changes should work
311
311
312 $ hg st --change tip
312 $ hg st --change tip
313 M dir1/a
313 M dir1/a
314 $ hg --config extensions.strip= strip tip
314 $ hg --config extensions.strip= strip tip
315 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
315 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
316 saved backup bundle to $TESTTMP/repo-mixed/.hg/strip-backup/51cfd7b1e13b-78a2f3ed-backup.hg
316 saved backup bundle to $TESTTMP/repo-mixed/.hg/strip-backup/51cfd7b1e13b-78a2f3ed-backup.hg
317 $ hg debugindex --dir dir1
317 $ hg debugindex --dir dir1
318 rev linkrev nodeid p1 p2
318 rev linkrev nodeid p1 p2
319 0 4 064927a0648a 000000000000 000000000000
319 0 4 064927a0648a 000000000000 000000000000
320 1 5 25ecb8cb8618 000000000000 000000000000
320 1 5 25ecb8cb8618 000000000000 000000000000
321
321
322 #if repobundlerepo
322 #if repobundlerepo
323 $ hg incoming .hg/strip-backup/*
323 $ hg incoming .hg/strip-backup/*
324 comparing with .hg/strip-backup/*-backup.hg (glob)
324 comparing with .hg/strip-backup/*-backup.hg (glob)
325 searching for changes
325 searching for changes
326 changeset: 6:51cfd7b1e13b
326 changeset: 6:51cfd7b1e13b
327 tag: tip
327 tag: tip
328 user: test
328 user: test
329 date: Thu Jan 01 00:00:00 1970 +0000
329 date: Thu Jan 01 00:00:00 1970 +0000
330 summary: modify dir1/a
330 summary: modify dir1/a
331
331
332 #endif
332 #endif
333
333
334 $ hg unbundle .hg/strip-backup/*
334 $ hg unbundle .hg/strip-backup/*
335 adding changesets
335 adding changesets
336 adding manifests
336 adding manifests
337 adding file changes
337 adding file changes
338 added 1 changesets with 1 changes to 1 files
338 added 1 changesets with 1 changes to 1 files
339 new changesets 51cfd7b1e13b (1 drafts)
339 new changesets 51cfd7b1e13b (1 drafts)
340 (run 'hg update' to get a working copy)
340 (run 'hg update' to get a working copy)
341 $ hg --config extensions.strip= strip tip
341 $ hg --config extensions.strip= strip tip
342 saved backup bundle to $TESTTMP/repo-mixed/.hg/strip-backup/*-backup.hg (glob)
342 saved backup bundle to $TESTTMP/repo-mixed/.hg/strip-backup/*-backup.hg (glob)
343 $ hg unbundle -q .hg/strip-backup/*
343 $ hg unbundle -q .hg/strip-backup/*
344 $ hg debugindex --dir dir1
344 $ hg debugindex --dir dir1
345 rev linkrev nodeid p1 p2
345 rev linkrev nodeid p1 p2
346 0 4 064927a0648a 000000000000 000000000000
346 0 4 064927a0648a 000000000000 000000000000
347 1 5 25ecb8cb8618 000000000000 000000000000
347 1 5 25ecb8cb8618 000000000000 000000000000
348 2 6 5b16163a30c6 25ecb8cb8618 000000000000
348 2 6 5b16163a30c6 25ecb8cb8618 000000000000
349 $ hg st --change tip
349 $ hg st --change tip
350 M dir1/a
350 M dir1/a
351
351
352 Shelving and unshelving should work
352 Shelving and unshelving should work
353
353
354 $ echo foo >> dir1/a
354 $ echo foo >> dir1/a
355 $ hg shelve
355 $ hg shelve
356 shelved as default
356 shelved as default
357 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
357 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
358 $ hg unshelve
358 $ hg unshelve
359 unshelving change 'default'
359 unshelving change 'default'
360 $ hg diff --nodates
360 $ hg diff --nodates
361 diff -r 708a273da119 dir1/a
361 diff -r 708a273da119 dir1/a
362 --- a/dir1/a
362 --- a/dir1/a
363 +++ b/dir1/a
363 +++ b/dir1/a
364 @@ -1,1 +1,2 @@
364 @@ -1,1 +1,2 @@
365 1
365 1
366 +foo
366 +foo
367
367
368 Pushing from treemanifest repo to an empty repo makes that a treemanifest repo
368 Pushing from treemanifest repo to an empty repo makes that a treemanifest repo
369
369
370 $ cd ..
370 $ cd ..
371 $ hg init empty-repo
371 $ hg init empty-repo
372 $ cat << EOF >> empty-repo/.hg/hgrc
372 $ cat << EOF >> empty-repo/.hg/hgrc
373 > [experimental]
373 > [experimental]
374 > changegroup3=yes
374 > changegroup3=yes
375 > EOF
375 > EOF
376 $ grep treemanifest empty-repo/.hg/requires
376 $ hg debugrequires -R empty-repo | grep treemanifest
377 [1]
377 [1]
378 $ hg push -R repo -r 0 empty-repo
378 $ hg push -R repo -r 0 empty-repo
379 pushing to empty-repo
379 pushing to empty-repo
380 searching for changes
380 searching for changes
381 adding changesets
381 adding changesets
382 adding manifests
382 adding manifests
383 adding file changes
383 adding file changes
384 added 1 changesets with 2 changes to 2 files
384 added 1 changesets with 2 changes to 2 files
385 $ grep treemanifest empty-repo/.hg/requires
385 $ hg debugrequires -R empty-repo | grep treemanifest
386 treemanifest
386 treemanifest
387
387
388 Pushing to an empty repo works
388 Pushing to an empty repo works
389
389
390 $ hg --config experimental.treemanifest=1 init clone
390 $ hg --config experimental.treemanifest=1 init clone
391 $ grep treemanifest clone/.hg/requires
391 $ hg debugrequires -R clone | grep treemanifest
392 treemanifest
392 treemanifest
393 $ hg push -R repo clone
393 $ hg push -R repo clone
394 pushing to clone
394 pushing to clone
395 searching for changes
395 searching for changes
396 adding changesets
396 adding changesets
397 adding manifests
397 adding manifests
398 adding file changes
398 adding file changes
399 added 11 changesets with 15 changes to 10 files (+3 heads)
399 added 11 changesets with 15 changes to 10 files (+3 heads)
400 $ grep treemanifest clone/.hg/requires
400 $ hg debugrequires -R clone | grep treemanifest
401 treemanifest
401 treemanifest
402 $ hg -R clone verify
402 $ hg -R clone verify
403 checking changesets
403 checking changesets
404 checking manifests
404 checking manifests
405 checking directory manifests
405 checking directory manifests
406 crosschecking files in changesets and manifests
406 crosschecking files in changesets and manifests
407 checking files
407 checking files
408 checked 11 changesets with 15 changes to 10 files
408 checked 11 changesets with 15 changes to 10 files
409
409
410 Create deeper repo with tree manifests.
410 Create deeper repo with tree manifests.
411
411
412 $ hg --config experimental.treemanifest=True init deeprepo
412 $ hg --config experimental.treemanifest=True init deeprepo
413 $ cd deeprepo
413 $ cd deeprepo
414
414
415 $ mkdir .A
415 $ mkdir .A
416 $ mkdir b
416 $ mkdir b
417 $ mkdir b/bar
417 $ mkdir b/bar
418 $ mkdir b/bar/orange
418 $ mkdir b/bar/orange
419 $ mkdir b/bar/orange/fly
419 $ mkdir b/bar/orange/fly
420 $ mkdir b/foo
420 $ mkdir b/foo
421 $ mkdir b/foo/apple
421 $ mkdir b/foo/apple
422 $ mkdir b/foo/apple/bees
422 $ mkdir b/foo/apple/bees
423
423
424 $ touch .A/one.txt
424 $ touch .A/one.txt
425 $ touch .A/two.txt
425 $ touch .A/two.txt
426 $ touch b/bar/fruits.txt
426 $ touch b/bar/fruits.txt
427 $ touch b/bar/orange/fly/gnat.py
427 $ touch b/bar/orange/fly/gnat.py
428 $ touch b/bar/orange/fly/housefly.txt
428 $ touch b/bar/orange/fly/housefly.txt
429 $ touch b/foo/apple/bees/flower.py
429 $ touch b/foo/apple/bees/flower.py
430 $ touch c.txt
430 $ touch c.txt
431 $ touch d.py
431 $ touch d.py
432
432
433 $ hg ci -Aqm 'initial'
433 $ hg ci -Aqm 'initial'
434
434
435 $ echo >> .A/one.txt
435 $ echo >> .A/one.txt
436 $ echo >> .A/two.txt
436 $ echo >> .A/two.txt
437 $ echo >> b/bar/fruits.txt
437 $ echo >> b/bar/fruits.txt
438 $ echo >> b/bar/orange/fly/gnat.py
438 $ echo >> b/bar/orange/fly/gnat.py
439 $ echo >> b/bar/orange/fly/housefly.txt
439 $ echo >> b/bar/orange/fly/housefly.txt
440 $ echo >> b/foo/apple/bees/flower.py
440 $ echo >> b/foo/apple/bees/flower.py
441 $ echo >> c.txt
441 $ echo >> c.txt
442 $ echo >> d.py
442 $ echo >> d.py
443 $ hg ci -Aqm 'second'
443 $ hg ci -Aqm 'second'
444
444
445 We'll see that visitdir works by removing some treemanifest revlogs and running
445 We'll see that visitdir works by removing some treemanifest revlogs and running
446 the files command with various parameters.
446 the files command with various parameters.
447
447
448 Test files from the root.
448 Test files from the root.
449
449
450 $ hg files -r .
450 $ hg files -r .
451 .A/one.txt
451 .A/one.txt
452 .A/two.txt
452 .A/two.txt
453 b/bar/fruits.txt
453 b/bar/fruits.txt
454 b/bar/orange/fly/gnat.py
454 b/bar/orange/fly/gnat.py
455 b/bar/orange/fly/housefly.txt
455 b/bar/orange/fly/housefly.txt
456 b/foo/apple/bees/flower.py
456 b/foo/apple/bees/flower.py
457 c.txt
457 c.txt
458 d.py
458 d.py
459
459
460 Excludes with a glob should not exclude everything from the glob's root
460 Excludes with a glob should not exclude everything from the glob's root
461
461
462 $ hg files -r . -X 'b/fo?' b
462 $ hg files -r . -X 'b/fo?' b
463 b/bar/fruits.txt
463 b/bar/fruits.txt
464 b/bar/orange/fly/gnat.py
464 b/bar/orange/fly/gnat.py
465 b/bar/orange/fly/housefly.txt
465 b/bar/orange/fly/housefly.txt
466 $ cp -R .hg/store .hg/store-copy
466 $ cp -R .hg/store .hg/store-copy
467
467
468 Test files for a subdirectory.
468 Test files for a subdirectory.
469
469
470 #if reporevlogstore
470 #if reporevlogstore
471 $ rm -r .hg/store/meta/~2e_a
471 $ rm -r .hg/store/meta/~2e_a
472 #endif
472 #endif
473 #if reposimplestore
473 #if reposimplestore
474 $ rm -r .hg/store/meta/._a
474 $ rm -r .hg/store/meta/._a
475 #endif
475 #endif
476 $ hg files -r . b
476 $ hg files -r . b
477 b/bar/fruits.txt
477 b/bar/fruits.txt
478 b/bar/orange/fly/gnat.py
478 b/bar/orange/fly/gnat.py
479 b/bar/orange/fly/housefly.txt
479 b/bar/orange/fly/housefly.txt
480 b/foo/apple/bees/flower.py
480 b/foo/apple/bees/flower.py
481 $ hg diff -r '.^' -r . --stat b
481 $ hg diff -r '.^' -r . --stat b
482 b/bar/fruits.txt | 1 +
482 b/bar/fruits.txt | 1 +
483 b/bar/orange/fly/gnat.py | 1 +
483 b/bar/orange/fly/gnat.py | 1 +
484 b/bar/orange/fly/housefly.txt | 1 +
484 b/bar/orange/fly/housefly.txt | 1 +
485 b/foo/apple/bees/flower.py | 1 +
485 b/foo/apple/bees/flower.py | 1 +
486 4 files changed, 4 insertions(+), 0 deletions(-)
486 4 files changed, 4 insertions(+), 0 deletions(-)
487 $ cp -R .hg/store-copy/. .hg/store
487 $ cp -R .hg/store-copy/. .hg/store
488
488
489 Test files with just includes and excludes.
489 Test files with just includes and excludes.
490
490
491 #if reporevlogstore
491 #if reporevlogstore
492 $ rm -r .hg/store/meta/~2e_a
492 $ rm -r .hg/store/meta/~2e_a
493 #endif
493 #endif
494 #if reposimplestore
494 #if reposimplestore
495 $ rm -r .hg/store/meta/._a
495 $ rm -r .hg/store/meta/._a
496 #endif
496 #endif
497 $ rm -r .hg/store/meta/b/bar/orange/fly
497 $ rm -r .hg/store/meta/b/bar/orange/fly
498 $ rm -r .hg/store/meta/b/foo/apple/bees
498 $ rm -r .hg/store/meta/b/foo/apple/bees
499 $ hg files -r . -I path:b/bar -X path:b/bar/orange/fly -I path:b/foo -X path:b/foo/apple/bees
499 $ hg files -r . -I path:b/bar -X path:b/bar/orange/fly -I path:b/foo -X path:b/foo/apple/bees
500 b/bar/fruits.txt
500 b/bar/fruits.txt
501 $ hg diff -r '.^' -r . --stat -I path:b/bar -X path:b/bar/orange/fly -I path:b/foo -X path:b/foo/apple/bees
501 $ hg diff -r '.^' -r . --stat -I path:b/bar -X path:b/bar/orange/fly -I path:b/foo -X path:b/foo/apple/bees
502 b/bar/fruits.txt | 1 +
502 b/bar/fruits.txt | 1 +
503 1 files changed, 1 insertions(+), 0 deletions(-)
503 1 files changed, 1 insertions(+), 0 deletions(-)
504 $ cp -R .hg/store-copy/. .hg/store
504 $ cp -R .hg/store-copy/. .hg/store
505
505
506 Test files for a subdirectory, excluding a directory within it.
506 Test files for a subdirectory, excluding a directory within it.
507
507
508 #if reporevlogstore
508 #if reporevlogstore
509 $ rm -r .hg/store/meta/~2e_a
509 $ rm -r .hg/store/meta/~2e_a
510 #endif
510 #endif
511 #if reposimplestore
511 #if reposimplestore
512 $ rm -r .hg/store/meta/._a
512 $ rm -r .hg/store/meta/._a
513 #endif
513 #endif
514 $ rm -r .hg/store/meta/b/foo
514 $ rm -r .hg/store/meta/b/foo
515 $ hg files -r . -X path:b/foo b
515 $ hg files -r . -X path:b/foo b
516 b/bar/fruits.txt
516 b/bar/fruits.txt
517 b/bar/orange/fly/gnat.py
517 b/bar/orange/fly/gnat.py
518 b/bar/orange/fly/housefly.txt
518 b/bar/orange/fly/housefly.txt
519 $ hg diff -r '.^' -r . --stat -X path:b/foo b
519 $ hg diff -r '.^' -r . --stat -X path:b/foo b
520 b/bar/fruits.txt | 1 +
520 b/bar/fruits.txt | 1 +
521 b/bar/orange/fly/gnat.py | 1 +
521 b/bar/orange/fly/gnat.py | 1 +
522 b/bar/orange/fly/housefly.txt | 1 +
522 b/bar/orange/fly/housefly.txt | 1 +
523 3 files changed, 3 insertions(+), 0 deletions(-)
523 3 files changed, 3 insertions(+), 0 deletions(-)
524 $ cp -R .hg/store-copy/. .hg/store
524 $ cp -R .hg/store-copy/. .hg/store
525
525
526 Test files for a sub directory, including only a directory within it, and
526 Test files for a sub directory, including only a directory within it, and
527 including an unrelated directory.
527 including an unrelated directory.
528
528
529 #if reporevlogstore
529 #if reporevlogstore
530 $ rm -r .hg/store/meta/~2e_a
530 $ rm -r .hg/store/meta/~2e_a
531 #endif
531 #endif
532 #if reposimplestore
532 #if reposimplestore
533 $ rm -r .hg/store/meta/._a
533 $ rm -r .hg/store/meta/._a
534 #endif
534 #endif
535 $ rm -r .hg/store/meta/b/foo
535 $ rm -r .hg/store/meta/b/foo
536 $ hg files -r . -I path:b/bar/orange -I path:a b
536 $ hg files -r . -I path:b/bar/orange -I path:a b
537 b/bar/orange/fly/gnat.py
537 b/bar/orange/fly/gnat.py
538 b/bar/orange/fly/housefly.txt
538 b/bar/orange/fly/housefly.txt
539 $ hg diff -r '.^' -r . --stat -I path:b/bar/orange -I path:a b
539 $ hg diff -r '.^' -r . --stat -I path:b/bar/orange -I path:a b
540 b/bar/orange/fly/gnat.py | 1 +
540 b/bar/orange/fly/gnat.py | 1 +
541 b/bar/orange/fly/housefly.txt | 1 +
541 b/bar/orange/fly/housefly.txt | 1 +
542 2 files changed, 2 insertions(+), 0 deletions(-)
542 2 files changed, 2 insertions(+), 0 deletions(-)
543 $ cp -R .hg/store-copy/. .hg/store
543 $ cp -R .hg/store-copy/. .hg/store
544
544
545 Test files for a pattern, including a directory, and excluding a directory
545 Test files for a pattern, including a directory, and excluding a directory
546 within that.
546 within that.
547
547
548 #if reporevlogstore
548 #if reporevlogstore
549 $ rm -r .hg/store/meta/~2e_a
549 $ rm -r .hg/store/meta/~2e_a
550 #endif
550 #endif
551 #if reposimplestore
551 #if reposimplestore
552 $ rm -r .hg/store/meta/._a
552 $ rm -r .hg/store/meta/._a
553 #endif
553 #endif
554 $ rm -r .hg/store/meta/b/foo
554 $ rm -r .hg/store/meta/b/foo
555 $ rm -r .hg/store/meta/b/bar/orange
555 $ rm -r .hg/store/meta/b/bar/orange
556 $ hg files -r . glob:**.txt -I path:b/bar -X path:b/bar/orange
556 $ hg files -r . glob:**.txt -I path:b/bar -X path:b/bar/orange
557 b/bar/fruits.txt
557 b/bar/fruits.txt
558 $ hg diff -r '.^' -r . --stat glob:**.txt -I path:b/bar -X path:b/bar/orange
558 $ hg diff -r '.^' -r . --stat glob:**.txt -I path:b/bar -X path:b/bar/orange
559 b/bar/fruits.txt | 1 +
559 b/bar/fruits.txt | 1 +
560 1 files changed, 1 insertions(+), 0 deletions(-)
560 1 files changed, 1 insertions(+), 0 deletions(-)
561 $ cp -R .hg/store-copy/. .hg/store
561 $ cp -R .hg/store-copy/. .hg/store
562
562
563 Add some more changes to the deep repo
563 Add some more changes to the deep repo
564 $ echo narf >> b/bar/fruits.txt
564 $ echo narf >> b/bar/fruits.txt
565 $ hg ci -m narf
565 $ hg ci -m narf
566 $ echo troz >> b/bar/orange/fly/gnat.py
566 $ echo troz >> b/bar/orange/fly/gnat.py
567 $ hg ci -m troz
567 $ hg ci -m troz
568
568
569 Verify works
569 Verify works
570 $ hg verify
570 $ hg verify
571 checking changesets
571 checking changesets
572 checking manifests
572 checking manifests
573 checking directory manifests
573 checking directory manifests
574 crosschecking files in changesets and manifests
574 crosschecking files in changesets and manifests
575 checking files
575 checking files
576 checked 4 changesets with 18 changes to 8 files
576 checked 4 changesets with 18 changes to 8 files
577
577
578 #if repofncache
578 #if repofncache
579 Dirlogs are included in fncache
579 Dirlogs are included in fncache
580 $ grep meta/.A/00manifest.i .hg/store/fncache
580 $ grep meta/.A/00manifest.i .hg/store/fncache
581 meta/.A/00manifest.i
581 meta/.A/00manifest.i
582
582
583 Rebuilt fncache includes dirlogs
583 Rebuilt fncache includes dirlogs
584 $ rm .hg/store/fncache
584 $ rm .hg/store/fncache
585 $ hg debugrebuildfncache
585 $ hg debugrebuildfncache
586 adding data/.A/one.txt.i
586 adding data/.A/one.txt.i
587 adding data/.A/two.txt.i
587 adding data/.A/two.txt.i
588 adding data/b/bar/fruits.txt.i
588 adding data/b/bar/fruits.txt.i
589 adding data/b/bar/orange/fly/gnat.py.i
589 adding data/b/bar/orange/fly/gnat.py.i
590 adding data/b/bar/orange/fly/housefly.txt.i
590 adding data/b/bar/orange/fly/housefly.txt.i
591 adding data/b/foo/apple/bees/flower.py.i
591 adding data/b/foo/apple/bees/flower.py.i
592 adding data/c.txt.i
592 adding data/c.txt.i
593 adding data/d.py.i
593 adding data/d.py.i
594 adding meta/.A/00manifest.i
594 adding meta/.A/00manifest.i
595 adding meta/b/00manifest.i
595 adding meta/b/00manifest.i
596 adding meta/b/bar/00manifest.i
596 adding meta/b/bar/00manifest.i
597 adding meta/b/bar/orange/00manifest.i
597 adding meta/b/bar/orange/00manifest.i
598 adding meta/b/bar/orange/fly/00manifest.i
598 adding meta/b/bar/orange/fly/00manifest.i
599 adding meta/b/foo/00manifest.i
599 adding meta/b/foo/00manifest.i
600 adding meta/b/foo/apple/00manifest.i
600 adding meta/b/foo/apple/00manifest.i
601 adding meta/b/foo/apple/bees/00manifest.i
601 adding meta/b/foo/apple/bees/00manifest.i
602 16 items added, 0 removed from fncache
602 16 items added, 0 removed from fncache
603 #endif
603 #endif
604
604
605 Finish first server
605 Finish first server
606 $ killdaemons.py
606 $ killdaemons.py
607
607
608 Back up the recently added revlogs
608 Back up the recently added revlogs
609 $ cp -R .hg/store .hg/store-newcopy
609 $ cp -R .hg/store .hg/store-newcopy
610
610
611 Verify reports missing dirlog
611 Verify reports missing dirlog
612 $ rm .hg/store/meta/b/00manifest.*
612 $ rm .hg/store/meta/b/00manifest.*
613 $ hg verify
613 $ hg verify
614 checking changesets
614 checking changesets
615 checking manifests
615 checking manifests
616 checking directory manifests
616 checking directory manifests
617 0: empty or missing b/
617 0: empty or missing b/
618 b/@0: parent-directory manifest refers to unknown revision 67688a370455
618 b/@0: parent-directory manifest refers to unknown revision 67688a370455
619 b/@1: parent-directory manifest refers to unknown revision f065da70369e
619 b/@1: parent-directory manifest refers to unknown revision f065da70369e
620 b/@2: parent-directory manifest refers to unknown revision ac0d30948e0b
620 b/@2: parent-directory manifest refers to unknown revision ac0d30948e0b
621 b/@3: parent-directory manifest refers to unknown revision 367152e6af28
621 b/@3: parent-directory manifest refers to unknown revision 367152e6af28
622 warning: orphan data file 'meta/b/bar/00manifest.i' (reporevlogstore !)
622 warning: orphan data file 'meta/b/bar/00manifest.i' (reporevlogstore !)
623 warning: orphan data file 'meta/b/bar/orange/00manifest.i' (reporevlogstore !)
623 warning: orphan data file 'meta/b/bar/orange/00manifest.i' (reporevlogstore !)
624 warning: orphan data file 'meta/b/bar/orange/fly/00manifest.i' (reporevlogstore !)
624 warning: orphan data file 'meta/b/bar/orange/fly/00manifest.i' (reporevlogstore !)
625 warning: orphan data file 'meta/b/foo/00manifest.i' (reporevlogstore !)
625 warning: orphan data file 'meta/b/foo/00manifest.i' (reporevlogstore !)
626 warning: orphan data file 'meta/b/foo/apple/00manifest.i' (reporevlogstore !)
626 warning: orphan data file 'meta/b/foo/apple/00manifest.i' (reporevlogstore !)
627 warning: orphan data file 'meta/b/foo/apple/bees/00manifest.i' (reporevlogstore !)
627 warning: orphan data file 'meta/b/foo/apple/bees/00manifest.i' (reporevlogstore !)
628 crosschecking files in changesets and manifests
628 crosschecking files in changesets and manifests
629 b/bar/fruits.txt@0: in changeset but not in manifest
629 b/bar/fruits.txt@0: in changeset but not in manifest
630 b/bar/orange/fly/gnat.py@0: in changeset but not in manifest
630 b/bar/orange/fly/gnat.py@0: in changeset but not in manifest
631 b/bar/orange/fly/housefly.txt@0: in changeset but not in manifest
631 b/bar/orange/fly/housefly.txt@0: in changeset but not in manifest
632 b/foo/apple/bees/flower.py@0: in changeset but not in manifest
632 b/foo/apple/bees/flower.py@0: in changeset but not in manifest
633 checking files
633 checking files
634 checked 4 changesets with 18 changes to 8 files
634 checked 4 changesets with 18 changes to 8 files
635 6 warnings encountered! (reporevlogstore !)
635 6 warnings encountered! (reporevlogstore !)
636 9 integrity errors encountered!
636 9 integrity errors encountered!
637 (first damaged changeset appears to be 0)
637 (first damaged changeset appears to be 0)
638 [1]
638 [1]
639 $ cp -R .hg/store-newcopy/. .hg/store
639 $ cp -R .hg/store-newcopy/. .hg/store
640
640
641 Verify reports missing dirlog entry
641 Verify reports missing dirlog entry
642 $ mv -f .hg/store-copy/meta/b/00manifest.* .hg/store/meta/b/
642 $ mv -f .hg/store-copy/meta/b/00manifest.* .hg/store/meta/b/
643 $ hg verify
643 $ hg verify
644 checking changesets
644 checking changesets
645 checking manifests
645 checking manifests
646 checking directory manifests
646 checking directory manifests
647 b/@2: parent-directory manifest refers to unknown revision ac0d30948e0b
647 b/@2: parent-directory manifest refers to unknown revision ac0d30948e0b
648 b/@3: parent-directory manifest refers to unknown revision 367152e6af28
648 b/@3: parent-directory manifest refers to unknown revision 367152e6af28
649 b/bar/@?: rev 2 points to unexpected changeset 2
649 b/bar/@?: rev 2 points to unexpected changeset 2
650 b/bar/@?: 44d7e1146e0d not in parent-directory manifest
650 b/bar/@?: 44d7e1146e0d not in parent-directory manifest
651 b/bar/@?: rev 3 points to unexpected changeset 3
651 b/bar/@?: rev 3 points to unexpected changeset 3
652 b/bar/@?: 70b10c6b17b7 not in parent-directory manifest
652 b/bar/@?: 70b10c6b17b7 not in parent-directory manifest
653 b/bar/orange/@?: rev 2 points to unexpected changeset 3
653 b/bar/orange/@?: rev 2 points to unexpected changeset 3
654 (expected None)
654 (expected None)
655 b/bar/orange/fly/@?: rev 2 points to unexpected changeset 3
655 b/bar/orange/fly/@?: rev 2 points to unexpected changeset 3
656 (expected None)
656 (expected None)
657 crosschecking files in changesets and manifests
657 crosschecking files in changesets and manifests
658 checking files
658 checking files
659 checked 4 changesets with 18 changes to 8 files
659 checked 4 changesets with 18 changes to 8 files
660 2 warnings encountered!
660 2 warnings encountered!
661 8 integrity errors encountered!
661 8 integrity errors encountered!
662 (first damaged changeset appears to be 2)
662 (first damaged changeset appears to be 2)
663 [1]
663 [1]
664 $ cp -R .hg/store-newcopy/. .hg/store
664 $ cp -R .hg/store-newcopy/. .hg/store
665
665
666 Test cloning a treemanifest repo over http.
666 Test cloning a treemanifest repo over http.
667 $ hg serve -p $HGPORT -d --pid-file=hg.pid --errorlog=errors.log
667 $ hg serve -p $HGPORT -d --pid-file=hg.pid --errorlog=errors.log
668 $ cat hg.pid >> $DAEMON_PIDS
668 $ cat hg.pid >> $DAEMON_PIDS
669 $ cd ..
669 $ cd ..
670 We can clone even with the knob turned off and we'll get a treemanifest repo.
670 We can clone even with the knob turned off and we'll get a treemanifest repo.
671 $ hg clone --config experimental.treemanifest=False \
671 $ hg clone --config experimental.treemanifest=False \
672 > --config experimental.changegroup3=True \
672 > --config experimental.changegroup3=True \
673 > http://localhost:$HGPORT deepclone
673 > http://localhost:$HGPORT deepclone
674 requesting all changes
674 requesting all changes
675 adding changesets
675 adding changesets
676 adding manifests
676 adding manifests
677 adding file changes
677 adding file changes
678 added 4 changesets with 18 changes to 8 files
678 added 4 changesets with 18 changes to 8 files
679 new changesets 775704be6f52:523e5c631710
679 new changesets 775704be6f52:523e5c631710
680 updating to branch default
680 updating to branch default
681 8 files updated, 0 files merged, 0 files removed, 0 files unresolved
681 8 files updated, 0 files merged, 0 files removed, 0 files unresolved
682 No server errors.
682 No server errors.
683 $ cat deeprepo/errors.log
683 $ cat deeprepo/errors.log
684 requires got updated to include treemanifest
684 requires got updated to include treemanifest
685 $ cat deepclone/.hg/requires | grep treemanifest
685 $ hg debugrequires -R deepclone | grep treemanifest
686 treemanifest
686 treemanifest
687 Tree manifest revlogs exist.
687 Tree manifest revlogs exist.
688 $ find deepclone/.hg/store/meta | sort
688 $ find deepclone/.hg/store/meta | sort
689 deepclone/.hg/store/meta
689 deepclone/.hg/store/meta
690 deepclone/.hg/store/meta/._a (reposimplestore !)
690 deepclone/.hg/store/meta/._a (reposimplestore !)
691 deepclone/.hg/store/meta/._a/00manifest.i (reposimplestore !)
691 deepclone/.hg/store/meta/._a/00manifest.i (reposimplestore !)
692 deepclone/.hg/store/meta/b
692 deepclone/.hg/store/meta/b
693 deepclone/.hg/store/meta/b/00manifest.i
693 deepclone/.hg/store/meta/b/00manifest.i
694 deepclone/.hg/store/meta/b/bar
694 deepclone/.hg/store/meta/b/bar
695 deepclone/.hg/store/meta/b/bar/00manifest.i
695 deepclone/.hg/store/meta/b/bar/00manifest.i
696 deepclone/.hg/store/meta/b/bar/orange
696 deepclone/.hg/store/meta/b/bar/orange
697 deepclone/.hg/store/meta/b/bar/orange/00manifest.i
697 deepclone/.hg/store/meta/b/bar/orange/00manifest.i
698 deepclone/.hg/store/meta/b/bar/orange/fly
698 deepclone/.hg/store/meta/b/bar/orange/fly
699 deepclone/.hg/store/meta/b/bar/orange/fly/00manifest.i
699 deepclone/.hg/store/meta/b/bar/orange/fly/00manifest.i
700 deepclone/.hg/store/meta/b/foo
700 deepclone/.hg/store/meta/b/foo
701 deepclone/.hg/store/meta/b/foo/00manifest.i
701 deepclone/.hg/store/meta/b/foo/00manifest.i
702 deepclone/.hg/store/meta/b/foo/apple
702 deepclone/.hg/store/meta/b/foo/apple
703 deepclone/.hg/store/meta/b/foo/apple/00manifest.i
703 deepclone/.hg/store/meta/b/foo/apple/00manifest.i
704 deepclone/.hg/store/meta/b/foo/apple/bees
704 deepclone/.hg/store/meta/b/foo/apple/bees
705 deepclone/.hg/store/meta/b/foo/apple/bees/00manifest.i
705 deepclone/.hg/store/meta/b/foo/apple/bees/00manifest.i
706 deepclone/.hg/store/meta/~2e_a (reporevlogstore !)
706 deepclone/.hg/store/meta/~2e_a (reporevlogstore !)
707 deepclone/.hg/store/meta/~2e_a/00manifest.i (reporevlogstore !)
707 deepclone/.hg/store/meta/~2e_a/00manifest.i (reporevlogstore !)
708 Verify passes.
708 Verify passes.
709 $ cd deepclone
709 $ cd deepclone
710 $ hg verify
710 $ hg verify
711 checking changesets
711 checking changesets
712 checking manifests
712 checking manifests
713 checking directory manifests
713 checking directory manifests
714 crosschecking files in changesets and manifests
714 crosschecking files in changesets and manifests
715 checking files
715 checking files
716 checked 4 changesets with 18 changes to 8 files
716 checked 4 changesets with 18 changes to 8 files
717 $ cd ..
717 $ cd ..
718
718
719 #if reporevlogstore
719 #if reporevlogstore
720 Create clones using old repo formats to use in later tests
720 Create clones using old repo formats to use in later tests
721 $ hg clone --config format.usestore=False \
721 $ hg clone --config format.usestore=False \
722 > --config experimental.changegroup3=True \
722 > --config experimental.changegroup3=True \
723 > http://localhost:$HGPORT deeprepo-basicstore
723 > http://localhost:$HGPORT deeprepo-basicstore
724 requesting all changes
724 requesting all changes
725 adding changesets
725 adding changesets
726 adding manifests
726 adding manifests
727 adding file changes
727 adding file changes
728 added 4 changesets with 18 changes to 8 files
728 added 4 changesets with 18 changes to 8 files
729 new changesets 775704be6f52:523e5c631710
729 new changesets 775704be6f52:523e5c631710
730 updating to branch default
730 updating to branch default
731 8 files updated, 0 files merged, 0 files removed, 0 files unresolved
731 8 files updated, 0 files merged, 0 files removed, 0 files unresolved
732 $ cd deeprepo-basicstore
732 $ cd deeprepo-basicstore
733 $ grep store .hg/requires
733 $ hg debugrequires | grep store
734 [1]
734 [1]
735 $ hg serve -p $HGPORT1 -d --pid-file=hg.pid --errorlog=errors.log
735 $ hg serve -p $HGPORT1 -d --pid-file=hg.pid --errorlog=errors.log
736 $ cat hg.pid >> $DAEMON_PIDS
736 $ cat hg.pid >> $DAEMON_PIDS
737 $ cd ..
737 $ cd ..
738 $ hg clone --config format.usefncache=False \
738 $ hg clone --config format.usefncache=False \
739 > --config experimental.changegroup3=True \
739 > --config experimental.changegroup3=True \
740 > http://localhost:$HGPORT deeprepo-encodedstore
740 > http://localhost:$HGPORT deeprepo-encodedstore
741 requesting all changes
741 requesting all changes
742 adding changesets
742 adding changesets
743 adding manifests
743 adding manifests
744 adding file changes
744 adding file changes
745 added 4 changesets with 18 changes to 8 files
745 added 4 changesets with 18 changes to 8 files
746 new changesets 775704be6f52:523e5c631710
746 new changesets 775704be6f52:523e5c631710
747 updating to branch default
747 updating to branch default
748 8 files updated, 0 files merged, 0 files removed, 0 files unresolved
748 8 files updated, 0 files merged, 0 files removed, 0 files unresolved
749 $ cd deeprepo-encodedstore
749 $ cd deeprepo-encodedstore
750 $ grep fncache .hg/requires
750 $ hg debugrequires | grep fncache
751 [1]
751 [1]
752 $ hg serve -p $HGPORT2 -d --pid-file=hg.pid --errorlog=errors.log
752 $ hg serve -p $HGPORT2 -d --pid-file=hg.pid --errorlog=errors.log
753 $ cat hg.pid >> $DAEMON_PIDS
753 $ cat hg.pid >> $DAEMON_PIDS
754 $ cd ..
754 $ cd ..
755
755
756 Local clone with basicstore
756 Local clone with basicstore
757 $ hg clone -U deeprepo-basicstore local-clone-basicstore
757 $ hg clone -U deeprepo-basicstore local-clone-basicstore
758 $ hg -R local-clone-basicstore verify
758 $ hg -R local-clone-basicstore verify
759 checking changesets
759 checking changesets
760 checking manifests
760 checking manifests
761 checking directory manifests
761 checking directory manifests
762 crosschecking files in changesets and manifests
762 crosschecking files in changesets and manifests
763 checking files
763 checking files
764 checked 4 changesets with 18 changes to 8 files
764 checked 4 changesets with 18 changes to 8 files
765
765
766 Local clone with encodedstore
766 Local clone with encodedstore
767 $ hg clone -U deeprepo-encodedstore local-clone-encodedstore
767 $ hg clone -U deeprepo-encodedstore local-clone-encodedstore
768 $ hg -R local-clone-encodedstore verify
768 $ hg -R local-clone-encodedstore verify
769 checking changesets
769 checking changesets
770 checking manifests
770 checking manifests
771 checking directory manifests
771 checking directory manifests
772 crosschecking files in changesets and manifests
772 crosschecking files in changesets and manifests
773 checking files
773 checking files
774 checked 4 changesets with 18 changes to 8 files
774 checked 4 changesets with 18 changes to 8 files
775
775
776 Local clone with fncachestore
776 Local clone with fncachestore
777 $ hg clone -U deeprepo local-clone-fncachestore
777 $ hg clone -U deeprepo local-clone-fncachestore
778 $ hg -R local-clone-fncachestore verify
778 $ hg -R local-clone-fncachestore verify
779 checking changesets
779 checking changesets
780 checking manifests
780 checking manifests
781 checking directory manifests
781 checking directory manifests
782 crosschecking files in changesets and manifests
782 crosschecking files in changesets and manifests
783 checking files
783 checking files
784 checked 4 changesets with 18 changes to 8 files
784 checked 4 changesets with 18 changes to 8 files
785
785
786 Stream clone with basicstore
786 Stream clone with basicstore
787 $ hg clone --config experimental.changegroup3=True --stream -U \
787 $ hg clone --config experimental.changegroup3=True --stream -U \
788 > http://localhost:$HGPORT1 stream-clone-basicstore
788 > http://localhost:$HGPORT1 stream-clone-basicstore
789 streaming all changes
789 streaming all changes
790 28 files to transfer, * of data (glob)
790 28 files to transfer, * of data (glob)
791 transferred * in * seconds (*) (glob)
791 transferred * in * seconds (*) (glob)
792 $ hg -R stream-clone-basicstore verify
792 $ hg -R stream-clone-basicstore verify
793 checking changesets
793 checking changesets
794 checking manifests
794 checking manifests
795 checking directory manifests
795 checking directory manifests
796 crosschecking files in changesets and manifests
796 crosschecking files in changesets and manifests
797 checking files
797 checking files
798 checked 4 changesets with 18 changes to 8 files
798 checked 4 changesets with 18 changes to 8 files
799
799
800 Stream clone with encodedstore
800 Stream clone with encodedstore
801 $ hg clone --config experimental.changegroup3=True --stream -U \
801 $ hg clone --config experimental.changegroup3=True --stream -U \
802 > http://localhost:$HGPORT2 stream-clone-encodedstore
802 > http://localhost:$HGPORT2 stream-clone-encodedstore
803 streaming all changes
803 streaming all changes
804 28 files to transfer, * of data (glob)
804 28 files to transfer, * of data (glob)
805 transferred * in * seconds (*) (glob)
805 transferred * in * seconds (*) (glob)
806 $ hg -R stream-clone-encodedstore verify
806 $ hg -R stream-clone-encodedstore verify
807 checking changesets
807 checking changesets
808 checking manifests
808 checking manifests
809 checking directory manifests
809 checking directory manifests
810 crosschecking files in changesets and manifests
810 crosschecking files in changesets and manifests
811 checking files
811 checking files
812 checked 4 changesets with 18 changes to 8 files
812 checked 4 changesets with 18 changes to 8 files
813
813
814 Stream clone with fncachestore
814 Stream clone with fncachestore
815 $ hg clone --config experimental.changegroup3=True --stream -U \
815 $ hg clone --config experimental.changegroup3=True --stream -U \
816 > http://localhost:$HGPORT stream-clone-fncachestore
816 > http://localhost:$HGPORT stream-clone-fncachestore
817 streaming all changes
817 streaming all changes
818 22 files to transfer, * of data (glob)
818 22 files to transfer, * of data (glob)
819 transferred * in * seconds (*) (glob)
819 transferred * in * seconds (*) (glob)
820 $ hg -R stream-clone-fncachestore verify
820 $ hg -R stream-clone-fncachestore verify
821 checking changesets
821 checking changesets
822 checking manifests
822 checking manifests
823 checking directory manifests
823 checking directory manifests
824 crosschecking files in changesets and manifests
824 crosschecking files in changesets and manifests
825 checking files
825 checking files
826 checked 4 changesets with 18 changes to 8 files
826 checked 4 changesets with 18 changes to 8 files
827
827
828 Packed bundle
828 Packed bundle
829 $ hg -R deeprepo debugcreatestreamclonebundle repo-packed.hg
829 $ hg -R deeprepo debugcreatestreamclonebundle repo-packed.hg
830 writing 5330 bytes for 18 files (no-zstd !)
830 writing 5330 bytes for 18 files (no-zstd !)
831 writing 5400 bytes for 18 files (zstd !)
831 writing 5400 bytes for 18 files (zstd !)
832 bundle requirements: generaldelta, revlogv1, sparserevlog, treemanifest (no-rust !)
832 bundle requirements: generaldelta, revlogv1, sparserevlog, treemanifest (no-rust !)
833 bundle requirements: generaldelta, persistent-nodemap, revlogv1, sparserevlog, treemanifest (rust !)
833 bundle requirements: generaldelta, persistent-nodemap, revlogv1, sparserevlog, treemanifest (rust !)
834 $ hg debugbundle --spec repo-packed.hg
834 $ hg debugbundle --spec repo-packed.hg
835 none-packed1;requirements%3Dgeneraldelta%2Crevlogv1%2Csparserevlog%2Ctreemanifest (no-rust !)
835 none-packed1;requirements%3Dgeneraldelta%2Crevlogv1%2Csparserevlog%2Ctreemanifest (no-rust !)
836 none-packed1;requirements%3Dgeneraldelta%2Cpersistent-nodemap%2Crevlogv1%2Csparserevlog%2Ctreemanifest (rust !)
836 none-packed1;requirements%3Dgeneraldelta%2Cpersistent-nodemap%2Crevlogv1%2Csparserevlog%2Ctreemanifest (rust !)
837
837
838 #endif
838 #endif
839
839
840 Bundle with changegroup2 is not supported
840 Bundle with changegroup2 is not supported
841
841
842 $ hg -R deeprepo bundle --all -t v2 deeprepo.bundle
842 $ hg -R deeprepo bundle --all -t v2 deeprepo.bundle
843 abort: repository does not support bundle version 02
843 abort: repository does not support bundle version 02
844 [255]
844 [255]
845
845
846 Pull does not include changegroup for manifest the client already has from
846 Pull does not include changegroup for manifest the client already has from
847 other branch
847 other branch
848
848
849 $ mkdir grafted-dir-repo
849 $ mkdir grafted-dir-repo
850 $ cd grafted-dir-repo
850 $ cd grafted-dir-repo
851 $ hg --config experimental.treemanifest=1 init
851 $ hg --config experimental.treemanifest=1 init
852 $ mkdir dir
852 $ mkdir dir
853 $ echo a > dir/file
853 $ echo a > dir/file
854 $ echo a > file
854 $ echo a > file
855 $ hg ci -Am initial
855 $ hg ci -Am initial
856 adding dir/file
856 adding dir/file
857 adding file
857 adding file
858 $ echo b > dir/file
858 $ echo b > dir/file
859 $ hg ci -m updated
859 $ hg ci -m updated
860 $ hg co '.^'
860 $ hg co '.^'
861 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
861 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
862 $ hg revert -r tip dir/
862 $ hg revert -r tip dir/
863 reverting dir/file
863 reverting dir/file
864 $ echo b > file # to make sure root manifest is sent
864 $ echo b > file # to make sure root manifest is sent
865 $ hg ci -m grafted
865 $ hg ci -m grafted
866 created new head
866 created new head
867 $ cd ..
867 $ cd ..
868
868
869 $ hg --config experimental.treemanifest=1 clone --pull -r 1 \
869 $ hg --config experimental.treemanifest=1 clone --pull -r 1 \
870 > grafted-dir-repo grafted-dir-repo-clone
870 > grafted-dir-repo grafted-dir-repo-clone
871 adding changesets
871 adding changesets
872 adding manifests
872 adding manifests
873 adding file changes
873 adding file changes
874 added 2 changesets with 3 changes to 2 files
874 added 2 changesets with 3 changes to 2 files
875 new changesets d84f4c419457:09ab742f3b0f
875 new changesets d84f4c419457:09ab742f3b0f
876 updating to branch default
876 updating to branch default
877 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
877 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
878 $ cd grafted-dir-repo-clone
878 $ cd grafted-dir-repo-clone
879 $ hg pull -r 2
879 $ hg pull -r 2
880 pulling from $TESTTMP/grafted-dir-repo
880 pulling from $TESTTMP/grafted-dir-repo
881 searching for changes
881 searching for changes
882 adding changesets
882 adding changesets
883 adding manifests
883 adding manifests
884 adding file changes
884 adding file changes
885 added 1 changesets with 1 changes to 1 files (+1 heads)
885 added 1 changesets with 1 changes to 1 files (+1 heads)
886 new changesets 73699489fb7c
886 new changesets 73699489fb7c
887 (run 'hg heads' to see heads, 'hg merge' to merge)
887 (run 'hg heads' to see heads, 'hg merge' to merge)
888
888
889 Committing a empty commit does not duplicate root treemanifest
889 Committing a empty commit does not duplicate root treemanifest
890 $ echo z >> z
890 $ echo z >> z
891 $ hg commit -Aqm 'pre-empty commit'
891 $ hg commit -Aqm 'pre-empty commit'
892 $ hg rm z
892 $ hg rm z
893 $ hg commit --amend -m 'empty commit'
893 $ hg commit --amend -m 'empty commit'
894 saved backup bundle to $TESTTMP/grafted-dir-repo-clone/.hg/strip-backup/cb99d5717cea-9e3b6b02-amend.hg
894 saved backup bundle to $TESTTMP/grafted-dir-repo-clone/.hg/strip-backup/cb99d5717cea-9e3b6b02-amend.hg
895 $ hg log -r 'tip + tip^' -T '{manifest}\n'
895 $ hg log -r 'tip + tip^' -T '{manifest}\n'
896 1:678d3574b88c
896 1:678d3574b88c
897 1:678d3574b88c
897 1:678d3574b88c
898 $ hg --config extensions.strip= strip -r . -q
898 $ hg --config extensions.strip= strip -r . -q
@@ -1,1783 +1,1783 b''
1 #require no-reposimplestore
1 #require no-reposimplestore
2
2
3 $ cat >> $HGRCPATH << EOF
3 $ cat >> $HGRCPATH << EOF
4 > [extensions]
4 > [extensions]
5 > share =
5 > share =
6 > [format]
6 > [format]
7 > # stabilize test accross variant
7 > # stabilize test accross variant
8 > revlog-compression=zlib
8 > revlog-compression=zlib
9 > EOF
9 > EOF
10
10
11 store and revlogv1 are required in source
11 store and revlogv1 are required in source
12
12
13 $ hg --config format.usestore=false init no-store
13 $ hg --config format.usestore=false init no-store
14 $ hg -R no-store debugupgraderepo
14 $ hg -R no-store debugupgraderepo
15 abort: cannot upgrade repository; requirement missing: store
15 abort: cannot upgrade repository; requirement missing: store
16 [255]
16 [255]
17
17
18 $ hg init no-revlogv1
18 $ hg init no-revlogv1
19 $ cat > no-revlogv1/.hg/requires << EOF
19 $ cat > no-revlogv1/.hg/requires << EOF
20 > dotencode
20 > dotencode
21 > fncache
21 > fncache
22 > generaldelta
22 > generaldelta
23 > store
23 > store
24 > EOF
24 > EOF
25
25
26 $ hg -R no-revlogv1 debugupgraderepo
26 $ hg -R no-revlogv1 debugupgraderepo
27 abort: cannot upgrade repository; missing a revlog version
27 abort: cannot upgrade repository; missing a revlog version
28 [255]
28 [255]
29
29
30 Cannot upgrade shared repositories
30 Cannot upgrade shared repositories
31
31
32 $ hg init share-parent
32 $ hg init share-parent
33 $ hg -q share share-parent share-child
33 $ hg -q share share-parent share-child
34
34
35 $ hg -R share-child debugupgraderepo
35 $ hg -R share-child debugupgraderepo
36 abort: cannot upgrade repository; unsupported source requirement: shared
36 abort: cannot upgrade repository; unsupported source requirement: shared
37 [255]
37 [255]
38
38
39 Do not yet support upgrading treemanifest repos
39 Do not yet support upgrading treemanifest repos
40
40
41 $ hg --config experimental.treemanifest=true init treemanifest
41 $ hg --config experimental.treemanifest=true init treemanifest
42 $ hg -R treemanifest debugupgraderepo
42 $ hg -R treemanifest debugupgraderepo
43 abort: cannot upgrade repository; unsupported source requirement: treemanifest
43 abort: cannot upgrade repository; unsupported source requirement: treemanifest
44 [255]
44 [255]
45
45
46 Cannot add treemanifest requirement during upgrade
46 Cannot add treemanifest requirement during upgrade
47
47
48 $ hg init disallowaddedreq
48 $ hg init disallowaddedreq
49 $ hg -R disallowaddedreq --config experimental.treemanifest=true debugupgraderepo
49 $ hg -R disallowaddedreq --config experimental.treemanifest=true debugupgraderepo
50 abort: cannot upgrade repository; do not support adding requirement: treemanifest
50 abort: cannot upgrade repository; do not support adding requirement: treemanifest
51 [255]
51 [255]
52
52
53 An upgrade of a repository created with recommended settings only suggests optimizations
53 An upgrade of a repository created with recommended settings only suggests optimizations
54
54
55 $ hg init empty
55 $ hg init empty
56 $ cd empty
56 $ cd empty
57 $ hg debugformat
57 $ hg debugformat
58 format-variant repo
58 format-variant repo
59 fncache: yes
59 fncache: yes
60 dirstate-v2: no
60 dirstate-v2: no
61 dotencode: yes
61 dotencode: yes
62 generaldelta: yes
62 generaldelta: yes
63 share-safe: no
63 share-safe: no
64 sparserevlog: yes
64 sparserevlog: yes
65 persistent-nodemap: no (no-rust !)
65 persistent-nodemap: no (no-rust !)
66 persistent-nodemap: yes (rust !)
66 persistent-nodemap: yes (rust !)
67 copies-sdc: no
67 copies-sdc: no
68 revlog-v2: no
68 revlog-v2: no
69 changelog-v2: no
69 changelog-v2: no
70 plain-cl-delta: yes
70 plain-cl-delta: yes
71 compression: zlib
71 compression: zlib
72 compression-level: default
72 compression-level: default
73 $ hg debugformat --verbose
73 $ hg debugformat --verbose
74 format-variant repo config default
74 format-variant repo config default
75 fncache: yes yes yes
75 fncache: yes yes yes
76 dirstate-v2: no no no
76 dirstate-v2: no no no
77 dotencode: yes yes yes
77 dotencode: yes yes yes
78 generaldelta: yes yes yes
78 generaldelta: yes yes yes
79 share-safe: no no no
79 share-safe: no no no
80 sparserevlog: yes yes yes
80 sparserevlog: yes yes yes
81 persistent-nodemap: no no no (no-rust !)
81 persistent-nodemap: no no no (no-rust !)
82 persistent-nodemap: yes yes no (rust !)
82 persistent-nodemap: yes yes no (rust !)
83 copies-sdc: no no no
83 copies-sdc: no no no
84 revlog-v2: no no no
84 revlog-v2: no no no
85 changelog-v2: no no no
85 changelog-v2: no no no
86 plain-cl-delta: yes yes yes
86 plain-cl-delta: yes yes yes
87 compression: zlib zlib zlib (no-zstd !)
87 compression: zlib zlib zlib (no-zstd !)
88 compression: zlib zlib zstd (zstd !)
88 compression: zlib zlib zstd (zstd !)
89 compression-level: default default default
89 compression-level: default default default
90 $ hg debugformat --verbose --config format.usefncache=no
90 $ hg debugformat --verbose --config format.usefncache=no
91 format-variant repo config default
91 format-variant repo config default
92 fncache: yes no yes
92 fncache: yes no yes
93 dirstate-v2: no no no
93 dirstate-v2: no no no
94 dotencode: yes no yes
94 dotencode: yes no yes
95 generaldelta: yes yes yes
95 generaldelta: yes yes yes
96 share-safe: no no no
96 share-safe: no no no
97 sparserevlog: yes yes yes
97 sparserevlog: yes yes yes
98 persistent-nodemap: no no no (no-rust !)
98 persistent-nodemap: no no no (no-rust !)
99 persistent-nodemap: yes yes no (rust !)
99 persistent-nodemap: yes yes no (rust !)
100 copies-sdc: no no no
100 copies-sdc: no no no
101 revlog-v2: no no no
101 revlog-v2: no no no
102 changelog-v2: no no no
102 changelog-v2: no no no
103 plain-cl-delta: yes yes yes
103 plain-cl-delta: yes yes yes
104 compression: zlib zlib zlib (no-zstd !)
104 compression: zlib zlib zlib (no-zstd !)
105 compression: zlib zlib zstd (zstd !)
105 compression: zlib zlib zstd (zstd !)
106 compression-level: default default default
106 compression-level: default default default
107 $ hg debugformat --verbose --config format.usefncache=no --color=debug
107 $ hg debugformat --verbose --config format.usefncache=no --color=debug
108 format-variant repo config default
108 format-variant repo config default
109 [formatvariant.name.mismatchconfig|fncache: ][formatvariant.repo.mismatchconfig| yes][formatvariant.config.special| no][formatvariant.default| yes]
109 [formatvariant.name.mismatchconfig|fncache: ][formatvariant.repo.mismatchconfig| yes][formatvariant.config.special| no][formatvariant.default| yes]
110 [formatvariant.name.uptodate|dirstate-v2: ][formatvariant.repo.uptodate| no][formatvariant.config.default| no][formatvariant.default| no]
110 [formatvariant.name.uptodate|dirstate-v2: ][formatvariant.repo.uptodate| no][formatvariant.config.default| no][formatvariant.default| no]
111 [formatvariant.name.mismatchconfig|dotencode: ][formatvariant.repo.mismatchconfig| yes][formatvariant.config.special| no][formatvariant.default| yes]
111 [formatvariant.name.mismatchconfig|dotencode: ][formatvariant.repo.mismatchconfig| yes][formatvariant.config.special| no][formatvariant.default| yes]
112 [formatvariant.name.uptodate|generaldelta: ][formatvariant.repo.uptodate| yes][formatvariant.config.default| yes][formatvariant.default| yes]
112 [formatvariant.name.uptodate|generaldelta: ][formatvariant.repo.uptodate| yes][formatvariant.config.default| yes][formatvariant.default| yes]
113 [formatvariant.name.uptodate|share-safe: ][formatvariant.repo.uptodate| no][formatvariant.config.default| no][formatvariant.default| no]
113 [formatvariant.name.uptodate|share-safe: ][formatvariant.repo.uptodate| no][formatvariant.config.default| no][formatvariant.default| no]
114 [formatvariant.name.uptodate|sparserevlog: ][formatvariant.repo.uptodate| yes][formatvariant.config.default| yes][formatvariant.default| yes]
114 [formatvariant.name.uptodate|sparserevlog: ][formatvariant.repo.uptodate| yes][formatvariant.config.default| yes][formatvariant.default| yes]
115 [formatvariant.name.uptodate|persistent-nodemap:][formatvariant.repo.uptodate| no][formatvariant.config.default| no][formatvariant.default| no] (no-rust !)
115 [formatvariant.name.uptodate|persistent-nodemap:][formatvariant.repo.uptodate| no][formatvariant.config.default| no][formatvariant.default| no] (no-rust !)
116 [formatvariant.name.mismatchdefault|persistent-nodemap:][formatvariant.repo.mismatchdefault| yes][formatvariant.config.special| yes][formatvariant.default| no] (rust !)
116 [formatvariant.name.mismatchdefault|persistent-nodemap:][formatvariant.repo.mismatchdefault| yes][formatvariant.config.special| yes][formatvariant.default| no] (rust !)
117 [formatvariant.name.uptodate|copies-sdc: ][formatvariant.repo.uptodate| no][formatvariant.config.default| no][formatvariant.default| no]
117 [formatvariant.name.uptodate|copies-sdc: ][formatvariant.repo.uptodate| no][formatvariant.config.default| no][formatvariant.default| no]
118 [formatvariant.name.uptodate|revlog-v2: ][formatvariant.repo.uptodate| no][formatvariant.config.default| no][formatvariant.default| no]
118 [formatvariant.name.uptodate|revlog-v2: ][formatvariant.repo.uptodate| no][formatvariant.config.default| no][formatvariant.default| no]
119 [formatvariant.name.uptodate|changelog-v2: ][formatvariant.repo.uptodate| no][formatvariant.config.default| no][formatvariant.default| no]
119 [formatvariant.name.uptodate|changelog-v2: ][formatvariant.repo.uptodate| no][formatvariant.config.default| no][formatvariant.default| no]
120 [formatvariant.name.uptodate|plain-cl-delta: ][formatvariant.repo.uptodate| yes][formatvariant.config.default| yes][formatvariant.default| yes]
120 [formatvariant.name.uptodate|plain-cl-delta: ][formatvariant.repo.uptodate| yes][formatvariant.config.default| yes][formatvariant.default| yes]
121 [formatvariant.name.uptodate|compression: ][formatvariant.repo.uptodate| zlib][formatvariant.config.default| zlib][formatvariant.default| zlib] (no-zstd !)
121 [formatvariant.name.uptodate|compression: ][formatvariant.repo.uptodate| zlib][formatvariant.config.default| zlib][formatvariant.default| zlib] (no-zstd !)
122 [formatvariant.name.mismatchdefault|compression: ][formatvariant.repo.mismatchdefault| zlib][formatvariant.config.special| zlib][formatvariant.default| zstd] (zstd !)
122 [formatvariant.name.mismatchdefault|compression: ][formatvariant.repo.mismatchdefault| zlib][formatvariant.config.special| zlib][formatvariant.default| zstd] (zstd !)
123 [formatvariant.name.uptodate|compression-level: ][formatvariant.repo.uptodate| default][formatvariant.config.default| default][formatvariant.default| default]
123 [formatvariant.name.uptodate|compression-level: ][formatvariant.repo.uptodate| default][formatvariant.config.default| default][formatvariant.default| default]
124 $ hg debugformat -Tjson
124 $ hg debugformat -Tjson
125 [
125 [
126 {
126 {
127 "config": true,
127 "config": true,
128 "default": true,
128 "default": true,
129 "name": "fncache",
129 "name": "fncache",
130 "repo": true
130 "repo": true
131 },
131 },
132 {
132 {
133 "config": false,
133 "config": false,
134 "default": false,
134 "default": false,
135 "name": "dirstate-v2",
135 "name": "dirstate-v2",
136 "repo": false
136 "repo": false
137 },
137 },
138 {
138 {
139 "config": true,
139 "config": true,
140 "default": true,
140 "default": true,
141 "name": "dotencode",
141 "name": "dotencode",
142 "repo": true
142 "repo": true
143 },
143 },
144 {
144 {
145 "config": true,
145 "config": true,
146 "default": true,
146 "default": true,
147 "name": "generaldelta",
147 "name": "generaldelta",
148 "repo": true
148 "repo": true
149 },
149 },
150 {
150 {
151 "config": false,
151 "config": false,
152 "default": false,
152 "default": false,
153 "name": "share-safe",
153 "name": "share-safe",
154 "repo": false
154 "repo": false
155 },
155 },
156 {
156 {
157 "config": true,
157 "config": true,
158 "default": true,
158 "default": true,
159 "name": "sparserevlog",
159 "name": "sparserevlog",
160 "repo": true
160 "repo": true
161 },
161 },
162 {
162 {
163 "config": false, (no-rust !)
163 "config": false, (no-rust !)
164 "config": true, (rust !)
164 "config": true, (rust !)
165 "default": false,
165 "default": false,
166 "name": "persistent-nodemap",
166 "name": "persistent-nodemap",
167 "repo": false (no-rust !)
167 "repo": false (no-rust !)
168 "repo": true (rust !)
168 "repo": true (rust !)
169 },
169 },
170 {
170 {
171 "config": false,
171 "config": false,
172 "default": false,
172 "default": false,
173 "name": "copies-sdc",
173 "name": "copies-sdc",
174 "repo": false
174 "repo": false
175 },
175 },
176 {
176 {
177 "config": false,
177 "config": false,
178 "default": false,
178 "default": false,
179 "name": "revlog-v2",
179 "name": "revlog-v2",
180 "repo": false
180 "repo": false
181 },
181 },
182 {
182 {
183 "config": false,
183 "config": false,
184 "default": false,
184 "default": false,
185 "name": "changelog-v2",
185 "name": "changelog-v2",
186 "repo": false
186 "repo": false
187 },
187 },
188 {
188 {
189 "config": true,
189 "config": true,
190 "default": true,
190 "default": true,
191 "name": "plain-cl-delta",
191 "name": "plain-cl-delta",
192 "repo": true
192 "repo": true
193 },
193 },
194 {
194 {
195 "config": "zlib",
195 "config": "zlib",
196 "default": "zlib", (no-zstd !)
196 "default": "zlib", (no-zstd !)
197 "default": "zstd", (zstd !)
197 "default": "zstd", (zstd !)
198 "name": "compression",
198 "name": "compression",
199 "repo": "zlib"
199 "repo": "zlib"
200 },
200 },
201 {
201 {
202 "config": "default",
202 "config": "default",
203 "default": "default",
203 "default": "default",
204 "name": "compression-level",
204 "name": "compression-level",
205 "repo": "default"
205 "repo": "default"
206 }
206 }
207 ]
207 ]
208 $ hg debugupgraderepo
208 $ hg debugupgraderepo
209 (no format upgrades found in existing repository)
209 (no format upgrades found in existing repository)
210 performing an upgrade with "--run" will make the following changes:
210 performing an upgrade with "--run" will make the following changes:
211
211
212 requirements
212 requirements
213 preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
213 preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
214 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
214 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
215
215
216 no revlogs to process
216 no revlogs to process
217
217
218 additional optimizations are available by specifying "--optimize <name>":
218 additional optimizations are available by specifying "--optimize <name>":
219
219
220 re-delta-parent
220 re-delta-parent
221 deltas within internal storage will be recalculated to choose an optimal base revision where this was not already done; the size of the repository may shrink and various operations may become faster; the first time this optimization is performed could slow down upgrade execution considerably; subsequent invocations should not run noticeably slower
221 deltas within internal storage will be recalculated to choose an optimal base revision where this was not already done; the size of the repository may shrink and various operations may become faster; the first time this optimization is performed could slow down upgrade execution considerably; subsequent invocations should not run noticeably slower
222
222
223 re-delta-multibase
223 re-delta-multibase
224 deltas within internal storage will be recalculated against multiple base revision and the smallest difference will be used; the size of the repository may shrink significantly when there are many merges; this optimization will slow down execution in proportion to the number of merges in the repository and the amount of files in the repository; this slow down should not be significant unless there are tens of thousands of files and thousands of merges
224 deltas within internal storage will be recalculated against multiple base revision and the smallest difference will be used; the size of the repository may shrink significantly when there are many merges; this optimization will slow down execution in proportion to the number of merges in the repository and the amount of files in the repository; this slow down should not be significant unless there are tens of thousands of files and thousands of merges
225
225
226 re-delta-all
226 re-delta-all
227 deltas within internal storage will always be recalculated without reusing prior deltas; this will likely make execution run several times slower; this optimization is typically not needed
227 deltas within internal storage will always be recalculated without reusing prior deltas; this will likely make execution run several times slower; this optimization is typically not needed
228
228
229 re-delta-fulladd
229 re-delta-fulladd
230 every revision will be re-added as if it was new content. It will go through the full storage mechanism giving extensions a chance to process it (eg. lfs). This is similar to "re-delta-all" but even slower since more logic is involved.
230 every revision will be re-added as if it was new content. It will go through the full storage mechanism giving extensions a chance to process it (eg. lfs). This is similar to "re-delta-all" but even slower since more logic is involved.
231
231
232
232
233 $ hg debugupgraderepo --quiet
233 $ hg debugupgraderepo --quiet
234 requirements
234 requirements
235 preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
235 preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
236 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
236 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
237
237
238 no revlogs to process
238 no revlogs to process
239
239
240
240
241 --optimize can be used to add optimizations
241 --optimize can be used to add optimizations
242
242
243 $ hg debugupgrade --optimize 're-delta-parent'
243 $ hg debugupgrade --optimize 're-delta-parent'
244 (no format upgrades found in existing repository)
244 (no format upgrades found in existing repository)
245 performing an upgrade with "--run" will make the following changes:
245 performing an upgrade with "--run" will make the following changes:
246
246
247 requirements
247 requirements
248 preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
248 preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
249 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
249 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
250
250
251 optimisations: re-delta-parent
251 optimisations: re-delta-parent
252
252
253 re-delta-parent
253 re-delta-parent
254 deltas within internal storage will choose a new base revision if needed
254 deltas within internal storage will choose a new base revision if needed
255
255
256 processed revlogs:
256 processed revlogs:
257 - all-filelogs
257 - all-filelogs
258 - changelog
258 - changelog
259 - manifest
259 - manifest
260
260
261 additional optimizations are available by specifying "--optimize <name>":
261 additional optimizations are available by specifying "--optimize <name>":
262
262
263 re-delta-multibase
263 re-delta-multibase
264 deltas within internal storage will be recalculated against multiple base revision and the smallest difference will be used; the size of the repository may shrink significantly when there are many merges; this optimization will slow down execution in proportion to the number of merges in the repository and the amount of files in the repository; this slow down should not be significant unless there are tens of thousands of files and thousands of merges
264 deltas within internal storage will be recalculated against multiple base revision and the smallest difference will be used; the size of the repository may shrink significantly when there are many merges; this optimization will slow down execution in proportion to the number of merges in the repository and the amount of files in the repository; this slow down should not be significant unless there are tens of thousands of files and thousands of merges
265
265
266 re-delta-all
266 re-delta-all
267 deltas within internal storage will always be recalculated without reusing prior deltas; this will likely make execution run several times slower; this optimization is typically not needed
267 deltas within internal storage will always be recalculated without reusing prior deltas; this will likely make execution run several times slower; this optimization is typically not needed
268
268
269 re-delta-fulladd
269 re-delta-fulladd
270 every revision will be re-added as if it was new content. It will go through the full storage mechanism giving extensions a chance to process it (eg. lfs). This is similar to "re-delta-all" but even slower since more logic is involved.
270 every revision will be re-added as if it was new content. It will go through the full storage mechanism giving extensions a chance to process it (eg. lfs). This is similar to "re-delta-all" but even slower since more logic is involved.
271
271
272
272
273 modern form of the option
273 modern form of the option
274
274
275 $ hg debugupgrade --optimize re-delta-parent
275 $ hg debugupgrade --optimize re-delta-parent
276 (no format upgrades found in existing repository)
276 (no format upgrades found in existing repository)
277 performing an upgrade with "--run" will make the following changes:
277 performing an upgrade with "--run" will make the following changes:
278
278
279 requirements
279 requirements
280 preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
280 preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
281 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
281 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
282
282
283 optimisations: re-delta-parent
283 optimisations: re-delta-parent
284
284
285 re-delta-parent
285 re-delta-parent
286 deltas within internal storage will choose a new base revision if needed
286 deltas within internal storage will choose a new base revision if needed
287
287
288 processed revlogs:
288 processed revlogs:
289 - all-filelogs
289 - all-filelogs
290 - changelog
290 - changelog
291 - manifest
291 - manifest
292
292
293 additional optimizations are available by specifying "--optimize <name>":
293 additional optimizations are available by specifying "--optimize <name>":
294
294
295 re-delta-multibase
295 re-delta-multibase
296 deltas within internal storage will be recalculated against multiple base revision and the smallest difference will be used; the size of the repository may shrink significantly when there are many merges; this optimization will slow down execution in proportion to the number of merges in the repository and the amount of files in the repository; this slow down should not be significant unless there are tens of thousands of files and thousands of merges
296 deltas within internal storage will be recalculated against multiple base revision and the smallest difference will be used; the size of the repository may shrink significantly when there are many merges; this optimization will slow down execution in proportion to the number of merges in the repository and the amount of files in the repository; this slow down should not be significant unless there are tens of thousands of files and thousands of merges
297
297
298 re-delta-all
298 re-delta-all
299 deltas within internal storage will always be recalculated without reusing prior deltas; this will likely make execution run several times slower; this optimization is typically not needed
299 deltas within internal storage will always be recalculated without reusing prior deltas; this will likely make execution run several times slower; this optimization is typically not needed
300
300
301 re-delta-fulladd
301 re-delta-fulladd
302 every revision will be re-added as if it was new content. It will go through the full storage mechanism giving extensions a chance to process it (eg. lfs). This is similar to "re-delta-all" but even slower since more logic is involved.
302 every revision will be re-added as if it was new content. It will go through the full storage mechanism giving extensions a chance to process it (eg. lfs). This is similar to "re-delta-all" but even slower since more logic is involved.
303
303
304 $ hg debugupgrade --optimize re-delta-parent --quiet
304 $ hg debugupgrade --optimize re-delta-parent --quiet
305 requirements
305 requirements
306 preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
306 preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
307 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
307 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
308
308
309 optimisations: re-delta-parent
309 optimisations: re-delta-parent
310
310
311 processed revlogs:
311 processed revlogs:
312 - all-filelogs
312 - all-filelogs
313 - changelog
313 - changelog
314 - manifest
314 - manifest
315
315
316
316
317 unknown optimization:
317 unknown optimization:
318
318
319 $ hg debugupgrade --optimize foobar
319 $ hg debugupgrade --optimize foobar
320 abort: unknown optimization action requested: foobar
320 abort: unknown optimization action requested: foobar
321 (run without arguments to see valid optimizations)
321 (run without arguments to see valid optimizations)
322 [255]
322 [255]
323
323
324 Various sub-optimal detections work
324 Various sub-optimal detections work
325
325
326 $ cat > .hg/requires << EOF
326 $ cat > .hg/requires << EOF
327 > revlogv1
327 > revlogv1
328 > store
328 > store
329 > EOF
329 > EOF
330
330
331 $ hg debugformat
331 $ hg debugformat
332 format-variant repo
332 format-variant repo
333 fncache: no
333 fncache: no
334 dirstate-v2: no
334 dirstate-v2: no
335 dotencode: no
335 dotencode: no
336 generaldelta: no
336 generaldelta: no
337 share-safe: no
337 share-safe: no
338 sparserevlog: no
338 sparserevlog: no
339 persistent-nodemap: no
339 persistent-nodemap: no
340 copies-sdc: no
340 copies-sdc: no
341 revlog-v2: no
341 revlog-v2: no
342 changelog-v2: no
342 changelog-v2: no
343 plain-cl-delta: yes
343 plain-cl-delta: yes
344 compression: zlib
344 compression: zlib
345 compression-level: default
345 compression-level: default
346 $ hg debugformat --verbose
346 $ hg debugformat --verbose
347 format-variant repo config default
347 format-variant repo config default
348 fncache: no yes yes
348 fncache: no yes yes
349 dirstate-v2: no no no
349 dirstate-v2: no no no
350 dotencode: no yes yes
350 dotencode: no yes yes
351 generaldelta: no yes yes
351 generaldelta: no yes yes
352 share-safe: no no no
352 share-safe: no no no
353 sparserevlog: no yes yes
353 sparserevlog: no yes yes
354 persistent-nodemap: no no no (no-rust !)
354 persistent-nodemap: no no no (no-rust !)
355 persistent-nodemap: no yes no (rust !)
355 persistent-nodemap: no yes no (rust !)
356 copies-sdc: no no no
356 copies-sdc: no no no
357 revlog-v2: no no no
357 revlog-v2: no no no
358 changelog-v2: no no no
358 changelog-v2: no no no
359 plain-cl-delta: yes yes yes
359 plain-cl-delta: yes yes yes
360 compression: zlib zlib zlib (no-zstd !)
360 compression: zlib zlib zlib (no-zstd !)
361 compression: zlib zlib zstd (zstd !)
361 compression: zlib zlib zstd (zstd !)
362 compression-level: default default default
362 compression-level: default default default
363 $ hg debugformat --verbose --config format.usegeneraldelta=no
363 $ hg debugformat --verbose --config format.usegeneraldelta=no
364 format-variant repo config default
364 format-variant repo config default
365 fncache: no yes yes
365 fncache: no yes yes
366 dirstate-v2: no no no
366 dirstate-v2: no no no
367 dotencode: no yes yes
367 dotencode: no yes yes
368 generaldelta: no no yes
368 generaldelta: no no yes
369 share-safe: no no no
369 share-safe: no no no
370 sparserevlog: no no yes
370 sparserevlog: no no yes
371 persistent-nodemap: no no no (no-rust !)
371 persistent-nodemap: no no no (no-rust !)
372 persistent-nodemap: no yes no (rust !)
372 persistent-nodemap: no yes no (rust !)
373 copies-sdc: no no no
373 copies-sdc: no no no
374 revlog-v2: no no no
374 revlog-v2: no no no
375 changelog-v2: no no no
375 changelog-v2: no no no
376 plain-cl-delta: yes yes yes
376 plain-cl-delta: yes yes yes
377 compression: zlib zlib zlib (no-zstd !)
377 compression: zlib zlib zlib (no-zstd !)
378 compression: zlib zlib zstd (zstd !)
378 compression: zlib zlib zstd (zstd !)
379 compression-level: default default default
379 compression-level: default default default
380 $ hg debugformat --verbose --config format.usegeneraldelta=no --color=debug
380 $ hg debugformat --verbose --config format.usegeneraldelta=no --color=debug
381 format-variant repo config default
381 format-variant repo config default
382 [formatvariant.name.mismatchconfig|fncache: ][formatvariant.repo.mismatchconfig| no][formatvariant.config.default| yes][formatvariant.default| yes]
382 [formatvariant.name.mismatchconfig|fncache: ][formatvariant.repo.mismatchconfig| no][formatvariant.config.default| yes][formatvariant.default| yes]
383 [formatvariant.name.uptodate|dirstate-v2: ][formatvariant.repo.uptodate| no][formatvariant.config.default| no][formatvariant.default| no]
383 [formatvariant.name.uptodate|dirstate-v2: ][formatvariant.repo.uptodate| no][formatvariant.config.default| no][formatvariant.default| no]
384 [formatvariant.name.mismatchconfig|dotencode: ][formatvariant.repo.mismatchconfig| no][formatvariant.config.default| yes][formatvariant.default| yes]
384 [formatvariant.name.mismatchconfig|dotencode: ][formatvariant.repo.mismatchconfig| no][formatvariant.config.default| yes][formatvariant.default| yes]
385 [formatvariant.name.mismatchdefault|generaldelta: ][formatvariant.repo.mismatchdefault| no][formatvariant.config.special| no][formatvariant.default| yes]
385 [formatvariant.name.mismatchdefault|generaldelta: ][formatvariant.repo.mismatchdefault| no][formatvariant.config.special| no][formatvariant.default| yes]
386 [formatvariant.name.uptodate|share-safe: ][formatvariant.repo.uptodate| no][formatvariant.config.default| no][formatvariant.default| no]
386 [formatvariant.name.uptodate|share-safe: ][formatvariant.repo.uptodate| no][formatvariant.config.default| no][formatvariant.default| no]
387 [formatvariant.name.mismatchdefault|sparserevlog: ][formatvariant.repo.mismatchdefault| no][formatvariant.config.special| no][formatvariant.default| yes]
387 [formatvariant.name.mismatchdefault|sparserevlog: ][formatvariant.repo.mismatchdefault| no][formatvariant.config.special| no][formatvariant.default| yes]
388 [formatvariant.name.uptodate|persistent-nodemap:][formatvariant.repo.uptodate| no][formatvariant.config.default| no][formatvariant.default| no] (no-rust !)
388 [formatvariant.name.uptodate|persistent-nodemap:][formatvariant.repo.uptodate| no][formatvariant.config.default| no][formatvariant.default| no] (no-rust !)
389 [formatvariant.name.mismatchconfig|persistent-nodemap:][formatvariant.repo.mismatchconfig| no][formatvariant.config.special| yes][formatvariant.default| no] (rust !)
389 [formatvariant.name.mismatchconfig|persistent-nodemap:][formatvariant.repo.mismatchconfig| no][formatvariant.config.special| yes][formatvariant.default| no] (rust !)
390 [formatvariant.name.uptodate|copies-sdc: ][formatvariant.repo.uptodate| no][formatvariant.config.default| no][formatvariant.default| no]
390 [formatvariant.name.uptodate|copies-sdc: ][formatvariant.repo.uptodate| no][formatvariant.config.default| no][formatvariant.default| no]
391 [formatvariant.name.uptodate|revlog-v2: ][formatvariant.repo.uptodate| no][formatvariant.config.default| no][formatvariant.default| no]
391 [formatvariant.name.uptodate|revlog-v2: ][formatvariant.repo.uptodate| no][formatvariant.config.default| no][formatvariant.default| no]
392 [formatvariant.name.uptodate|changelog-v2: ][formatvariant.repo.uptodate| no][formatvariant.config.default| no][formatvariant.default| no]
392 [formatvariant.name.uptodate|changelog-v2: ][formatvariant.repo.uptodate| no][formatvariant.config.default| no][formatvariant.default| no]
393 [formatvariant.name.uptodate|plain-cl-delta: ][formatvariant.repo.uptodate| yes][formatvariant.config.default| yes][formatvariant.default| yes]
393 [formatvariant.name.uptodate|plain-cl-delta: ][formatvariant.repo.uptodate| yes][formatvariant.config.default| yes][formatvariant.default| yes]
394 [formatvariant.name.uptodate|compression: ][formatvariant.repo.uptodate| zlib][formatvariant.config.default| zlib][formatvariant.default| zlib] (no-zstd !)
394 [formatvariant.name.uptodate|compression: ][formatvariant.repo.uptodate| zlib][formatvariant.config.default| zlib][formatvariant.default| zlib] (no-zstd !)
395 [formatvariant.name.mismatchdefault|compression: ][formatvariant.repo.mismatchdefault| zlib][formatvariant.config.special| zlib][formatvariant.default| zstd] (zstd !)
395 [formatvariant.name.mismatchdefault|compression: ][formatvariant.repo.mismatchdefault| zlib][formatvariant.config.special| zlib][formatvariant.default| zstd] (zstd !)
396 [formatvariant.name.uptodate|compression-level: ][formatvariant.repo.uptodate| default][formatvariant.config.default| default][formatvariant.default| default]
396 [formatvariant.name.uptodate|compression-level: ][formatvariant.repo.uptodate| default][formatvariant.config.default| default][formatvariant.default| default]
397 $ hg debugupgraderepo
397 $ hg debugupgraderepo
398 note: selecting all-filelogs for processing to change: dotencode
398 note: selecting all-filelogs for processing to change: dotencode
399 note: selecting all-manifestlogs for processing to change: dotencode
399 note: selecting all-manifestlogs for processing to change: dotencode
400 note: selecting changelog for processing to change: dotencode
400 note: selecting changelog for processing to change: dotencode
401
401
402 repository lacks features recommended by current config options:
402 repository lacks features recommended by current config options:
403
403
404 fncache
404 fncache
405 long and reserved filenames may not work correctly; repository performance is sub-optimal
405 long and reserved filenames may not work correctly; repository performance is sub-optimal
406
406
407 dotencode
407 dotencode
408 storage of filenames beginning with a period or space may not work correctly
408 storage of filenames beginning with a period or space may not work correctly
409
409
410 generaldelta
410 generaldelta
411 deltas within internal storage are unable to choose optimal revisions; repository is larger and slower than it could be; interaction with other repositories may require extra network and CPU resources, making "hg push" and "hg pull" slower
411 deltas within internal storage are unable to choose optimal revisions; repository is larger and slower than it could be; interaction with other repositories may require extra network and CPU resources, making "hg push" and "hg pull" slower
412
412
413 sparserevlog
413 sparserevlog
414 in order to limit disk reading and memory usage on older version, the span of a delta chain from its root to its end is limited, whatever the relevant data in this span. This can severly limit Mercurial ability to build good chain of delta resulting is much more storage space being taken and limit reusability of on disk delta during exchange.
414 in order to limit disk reading and memory usage on older version, the span of a delta chain from its root to its end is limited, whatever the relevant data in this span. This can severly limit Mercurial ability to build good chain of delta resulting is much more storage space being taken and limit reusability of on disk delta during exchange.
415
415
416 persistent-nodemap (rust !)
416 persistent-nodemap (rust !)
417 persist the node -> rev mapping on disk to speedup lookup (rust !)
417 persist the node -> rev mapping on disk to speedup lookup (rust !)
418 (rust !)
418 (rust !)
419
419
420 performing an upgrade with "--run" will make the following changes:
420 performing an upgrade with "--run" will make the following changes:
421
421
422 requirements
422 requirements
423 preserved: revlogv1, store
423 preserved: revlogv1, store
424 added: dotencode, fncache, generaldelta, sparserevlog (no-rust !)
424 added: dotencode, fncache, generaldelta, sparserevlog (no-rust !)
425 added: dotencode, fncache, generaldelta, persistent-nodemap, sparserevlog (rust !)
425 added: dotencode, fncache, generaldelta, persistent-nodemap, sparserevlog (rust !)
426
426
427 fncache
427 fncache
428 repository will be more resilient to storing certain paths and performance of certain operations should be improved
428 repository will be more resilient to storing certain paths and performance of certain operations should be improved
429
429
430 dotencode
430 dotencode
431 repository will be better able to store files beginning with a space or period
431 repository will be better able to store files beginning with a space or period
432
432
433 generaldelta
433 generaldelta
434 repository storage will be able to create optimal deltas; new repository data will be smaller and read times should decrease; interacting with other repositories using this storage model should require less network and CPU resources, making "hg push" and "hg pull" faster
434 repository storage will be able to create optimal deltas; new repository data will be smaller and read times should decrease; interacting with other repositories using this storage model should require less network and CPU resources, making "hg push" and "hg pull" faster
435
435
436 sparserevlog
436 sparserevlog
437 Revlog supports delta chain with more unused data between payload. These gaps will be skipped at read time. This allows for better delta chains, making a better compression and faster exchange with server.
437 Revlog supports delta chain with more unused data between payload. These gaps will be skipped at read time. This allows for better delta chains, making a better compression and faster exchange with server.
438
438
439 persistent-nodemap (rust !)
439 persistent-nodemap (rust !)
440 Speedup revision lookup by node id. (rust !)
440 Speedup revision lookup by node id. (rust !)
441 (rust !)
441 (rust !)
442 processed revlogs:
442 processed revlogs:
443 - all-filelogs
443 - all-filelogs
444 - changelog
444 - changelog
445 - manifest
445 - manifest
446
446
447 additional optimizations are available by specifying "--optimize <name>":
447 additional optimizations are available by specifying "--optimize <name>":
448
448
449 re-delta-parent
449 re-delta-parent
450 deltas within internal storage will be recalculated to choose an optimal base revision where this was not already done; the size of the repository may shrink and various operations may become faster; the first time this optimization is performed could slow down upgrade execution considerably; subsequent invocations should not run noticeably slower
450 deltas within internal storage will be recalculated to choose an optimal base revision where this was not already done; the size of the repository may shrink and various operations may become faster; the first time this optimization is performed could slow down upgrade execution considerably; subsequent invocations should not run noticeably slower
451
451
452 re-delta-multibase
452 re-delta-multibase
453 deltas within internal storage will be recalculated against multiple base revision and the smallest difference will be used; the size of the repository may shrink significantly when there are many merges; this optimization will slow down execution in proportion to the number of merges in the repository and the amount of files in the repository; this slow down should not be significant unless there are tens of thousands of files and thousands of merges
453 deltas within internal storage will be recalculated against multiple base revision and the smallest difference will be used; the size of the repository may shrink significantly when there are many merges; this optimization will slow down execution in proportion to the number of merges in the repository and the amount of files in the repository; this slow down should not be significant unless there are tens of thousands of files and thousands of merges
454
454
455 re-delta-all
455 re-delta-all
456 deltas within internal storage will always be recalculated without reusing prior deltas; this will likely make execution run several times slower; this optimization is typically not needed
456 deltas within internal storage will always be recalculated without reusing prior deltas; this will likely make execution run several times slower; this optimization is typically not needed
457
457
458 re-delta-fulladd
458 re-delta-fulladd
459 every revision will be re-added as if it was new content. It will go through the full storage mechanism giving extensions a chance to process it (eg. lfs). This is similar to "re-delta-all" but even slower since more logic is involved.
459 every revision will be re-added as if it was new content. It will go through the full storage mechanism giving extensions a chance to process it (eg. lfs). This is similar to "re-delta-all" but even slower since more logic is involved.
460
460
461 $ hg debugupgraderepo --quiet
461 $ hg debugupgraderepo --quiet
462 requirements
462 requirements
463 preserved: revlogv1, store
463 preserved: revlogv1, store
464 added: dotencode, fncache, generaldelta, sparserevlog (no-rust !)
464 added: dotencode, fncache, generaldelta, sparserevlog (no-rust !)
465 added: dotencode, fncache, generaldelta, persistent-nodemap, sparserevlog (rust !)
465 added: dotencode, fncache, generaldelta, persistent-nodemap, sparserevlog (rust !)
466
466
467 processed revlogs:
467 processed revlogs:
468 - all-filelogs
468 - all-filelogs
469 - changelog
469 - changelog
470 - manifest
470 - manifest
471
471
472
472
473 $ hg --config format.dotencode=false debugupgraderepo
473 $ hg --config format.dotencode=false debugupgraderepo
474 note: selecting all-filelogs for processing to change: fncache
474 note: selecting all-filelogs for processing to change: fncache
475 note: selecting all-manifestlogs for processing to change: fncache
475 note: selecting all-manifestlogs for processing to change: fncache
476 note: selecting changelog for processing to change: fncache
476 note: selecting changelog for processing to change: fncache
477
477
478 repository lacks features recommended by current config options:
478 repository lacks features recommended by current config options:
479
479
480 fncache
480 fncache
481 long and reserved filenames may not work correctly; repository performance is sub-optimal
481 long and reserved filenames may not work correctly; repository performance is sub-optimal
482
482
483 generaldelta
483 generaldelta
484 deltas within internal storage are unable to choose optimal revisions; repository is larger and slower than it could be; interaction with other repositories may require extra network and CPU resources, making "hg push" and "hg pull" slower
484 deltas within internal storage are unable to choose optimal revisions; repository is larger and slower than it could be; interaction with other repositories may require extra network and CPU resources, making "hg push" and "hg pull" slower
485
485
486 sparserevlog
486 sparserevlog
487 in order to limit disk reading and memory usage on older version, the span of a delta chain from its root to its end is limited, whatever the relevant data in this span. This can severly limit Mercurial ability to build good chain of delta resulting is much more storage space being taken and limit reusability of on disk delta during exchange.
487 in order to limit disk reading and memory usage on older version, the span of a delta chain from its root to its end is limited, whatever the relevant data in this span. This can severly limit Mercurial ability to build good chain of delta resulting is much more storage space being taken and limit reusability of on disk delta during exchange.
488
488
489 persistent-nodemap (rust !)
489 persistent-nodemap (rust !)
490 persist the node -> rev mapping on disk to speedup lookup (rust !)
490 persist the node -> rev mapping on disk to speedup lookup (rust !)
491 (rust !)
491 (rust !)
492 repository lacks features used by the default config options:
492 repository lacks features used by the default config options:
493
493
494 dotencode
494 dotencode
495 storage of filenames beginning with a period or space may not work correctly
495 storage of filenames beginning with a period or space may not work correctly
496
496
497
497
498 performing an upgrade with "--run" will make the following changes:
498 performing an upgrade with "--run" will make the following changes:
499
499
500 requirements
500 requirements
501 preserved: revlogv1, store
501 preserved: revlogv1, store
502 added: fncache, generaldelta, sparserevlog (no-rust !)
502 added: fncache, generaldelta, sparserevlog (no-rust !)
503 added: fncache, generaldelta, persistent-nodemap, sparserevlog (rust !)
503 added: fncache, generaldelta, persistent-nodemap, sparserevlog (rust !)
504
504
505 fncache
505 fncache
506 repository will be more resilient to storing certain paths and performance of certain operations should be improved
506 repository will be more resilient to storing certain paths and performance of certain operations should be improved
507
507
508 generaldelta
508 generaldelta
509 repository storage will be able to create optimal deltas; new repository data will be smaller and read times should decrease; interacting with other repositories using this storage model should require less network and CPU resources, making "hg push" and "hg pull" faster
509 repository storage will be able to create optimal deltas; new repository data will be smaller and read times should decrease; interacting with other repositories using this storage model should require less network and CPU resources, making "hg push" and "hg pull" faster
510
510
511 sparserevlog
511 sparserevlog
512 Revlog supports delta chain with more unused data between payload. These gaps will be skipped at read time. This allows for better delta chains, making a better compression and faster exchange with server.
512 Revlog supports delta chain with more unused data between payload. These gaps will be skipped at read time. This allows for better delta chains, making a better compression and faster exchange with server.
513
513
514 persistent-nodemap (rust !)
514 persistent-nodemap (rust !)
515 Speedup revision lookup by node id. (rust !)
515 Speedup revision lookup by node id. (rust !)
516 (rust !)
516 (rust !)
517 processed revlogs:
517 processed revlogs:
518 - all-filelogs
518 - all-filelogs
519 - changelog
519 - changelog
520 - manifest
520 - manifest
521
521
522 additional optimizations are available by specifying "--optimize <name>":
522 additional optimizations are available by specifying "--optimize <name>":
523
523
524 re-delta-parent
524 re-delta-parent
525 deltas within internal storage will be recalculated to choose an optimal base revision where this was not already done; the size of the repository may shrink and various operations may become faster; the first time this optimization is performed could slow down upgrade execution considerably; subsequent invocations should not run noticeably slower
525 deltas within internal storage will be recalculated to choose an optimal base revision where this was not already done; the size of the repository may shrink and various operations may become faster; the first time this optimization is performed could slow down upgrade execution considerably; subsequent invocations should not run noticeably slower
526
526
527 re-delta-multibase
527 re-delta-multibase
528 deltas within internal storage will be recalculated against multiple base revision and the smallest difference will be used; the size of the repository may shrink significantly when there are many merges; this optimization will slow down execution in proportion to the number of merges in the repository and the amount of files in the repository; this slow down should not be significant unless there are tens of thousands of files and thousands of merges
528 deltas within internal storage will be recalculated against multiple base revision and the smallest difference will be used; the size of the repository may shrink significantly when there are many merges; this optimization will slow down execution in proportion to the number of merges in the repository and the amount of files in the repository; this slow down should not be significant unless there are tens of thousands of files and thousands of merges
529
529
530 re-delta-all
530 re-delta-all
531 deltas within internal storage will always be recalculated without reusing prior deltas; this will likely make execution run several times slower; this optimization is typically not needed
531 deltas within internal storage will always be recalculated without reusing prior deltas; this will likely make execution run several times slower; this optimization is typically not needed
532
532
533 re-delta-fulladd
533 re-delta-fulladd
534 every revision will be re-added as if it was new content. It will go through the full storage mechanism giving extensions a chance to process it (eg. lfs). This is similar to "re-delta-all" but even slower since more logic is involved.
534 every revision will be re-added as if it was new content. It will go through the full storage mechanism giving extensions a chance to process it (eg. lfs). This is similar to "re-delta-all" but even slower since more logic is involved.
535
535
536
536
537 $ cd ..
537 $ cd ..
538
538
539 Upgrading a repository that is already modern essentially no-ops
539 Upgrading a repository that is already modern essentially no-ops
540
540
541 $ hg init modern
541 $ hg init modern
542 $ hg -R modern debugupgraderepo --run
542 $ hg -R modern debugupgraderepo --run
543 nothing to do
543 nothing to do
544
544
545 Upgrading a repository to generaldelta works
545 Upgrading a repository to generaldelta works
546
546
547 $ hg --config format.usegeneraldelta=false init upgradegd
547 $ hg --config format.usegeneraldelta=false init upgradegd
548 $ cd upgradegd
548 $ cd upgradegd
549 $ touch f0
549 $ touch f0
550 $ hg -q commit -A -m initial
550 $ hg -q commit -A -m initial
551 $ mkdir FooBarDirectory.d
551 $ mkdir FooBarDirectory.d
552 $ touch FooBarDirectory.d/f1
552 $ touch FooBarDirectory.d/f1
553 $ hg -q commit -A -m 'add f1'
553 $ hg -q commit -A -m 'add f1'
554 $ hg -q up -r 0
554 $ hg -q up -r 0
555 >>> from __future__ import absolute_import, print_function
555 >>> from __future__ import absolute_import, print_function
556 >>> import random
556 >>> import random
557 >>> random.seed(0) # have a reproducible content
557 >>> random.seed(0) # have a reproducible content
558 >>> with open("f2", "wb") as f:
558 >>> with open("f2", "wb") as f:
559 ... for i in range(100000):
559 ... for i in range(100000):
560 ... f.write(b"%d\n" % random.randint(1000000000, 9999999999)) and None
560 ... f.write(b"%d\n" % random.randint(1000000000, 9999999999)) and None
561 $ hg -q commit -A -m 'add f2'
561 $ hg -q commit -A -m 'add f2'
562
562
563 make sure we have a .d file
563 make sure we have a .d file
564
564
565 $ ls -d .hg/store/data/*
565 $ ls -d .hg/store/data/*
566 .hg/store/data/_foo_bar_directory.d.hg
566 .hg/store/data/_foo_bar_directory.d.hg
567 .hg/store/data/f0.i
567 .hg/store/data/f0.i
568 .hg/store/data/f2.d
568 .hg/store/data/f2.d
569 .hg/store/data/f2.i
569 .hg/store/data/f2.i
570
570
571 $ hg debugupgraderepo --run --config format.sparse-revlog=false
571 $ hg debugupgraderepo --run --config format.sparse-revlog=false
572 note: selecting all-filelogs for processing to change: generaldelta
572 note: selecting all-filelogs for processing to change: generaldelta
573 note: selecting all-manifestlogs for processing to change: generaldelta
573 note: selecting all-manifestlogs for processing to change: generaldelta
574 note: selecting changelog for processing to change: generaldelta
574 note: selecting changelog for processing to change: generaldelta
575
575
576 upgrade will perform the following actions:
576 upgrade will perform the following actions:
577
577
578 requirements
578 requirements
579 preserved: dotencode, fncache, revlogv1, store (no-rust !)
579 preserved: dotencode, fncache, revlogv1, store (no-rust !)
580 preserved: dotencode, fncache, persistent-nodemap, revlogv1, store (rust !)
580 preserved: dotencode, fncache, persistent-nodemap, revlogv1, store (rust !)
581 added: generaldelta
581 added: generaldelta
582
582
583 generaldelta
583 generaldelta
584 repository storage will be able to create optimal deltas; new repository data will be smaller and read times should decrease; interacting with other repositories using this storage model should require less network and CPU resources, making "hg push" and "hg pull" faster
584 repository storage will be able to create optimal deltas; new repository data will be smaller and read times should decrease; interacting with other repositories using this storage model should require less network and CPU resources, making "hg push" and "hg pull" faster
585
585
586 processed revlogs:
586 processed revlogs:
587 - all-filelogs
587 - all-filelogs
588 - changelog
588 - changelog
589 - manifest
589 - manifest
590
590
591 beginning upgrade...
591 beginning upgrade...
592 repository locked and read-only
592 repository locked and read-only
593 creating temporary repository to stage upgraded data: $TESTTMP/upgradegd/.hg/upgrade.* (glob)
593 creating temporary repository to stage upgraded data: $TESTTMP/upgradegd/.hg/upgrade.* (glob)
594 (it is safe to interrupt this process any time before data migration completes)
594 (it is safe to interrupt this process any time before data migration completes)
595 migrating 9 total revisions (3 in filelogs, 3 in manifests, 3 in changelog)
595 migrating 9 total revisions (3 in filelogs, 3 in manifests, 3 in changelog)
596 migrating 519 KB in store; 1.05 MB tracked data
596 migrating 519 KB in store; 1.05 MB tracked data
597 migrating 3 filelogs containing 3 revisions (518 KB in store; 1.05 MB tracked data)
597 migrating 3 filelogs containing 3 revisions (518 KB in store; 1.05 MB tracked data)
598 finished migrating 3 filelog revisions across 3 filelogs; change in size: 0 bytes
598 finished migrating 3 filelog revisions across 3 filelogs; change in size: 0 bytes
599 migrating 1 manifests containing 3 revisions (384 bytes in store; 238 bytes tracked data)
599 migrating 1 manifests containing 3 revisions (384 bytes in store; 238 bytes tracked data)
600 finished migrating 3 manifest revisions across 1 manifests; change in size: -17 bytes
600 finished migrating 3 manifest revisions across 1 manifests; change in size: -17 bytes
601 migrating changelog containing 3 revisions (394 bytes in store; 199 bytes tracked data)
601 migrating changelog containing 3 revisions (394 bytes in store; 199 bytes tracked data)
602 finished migrating 3 changelog revisions; change in size: 0 bytes
602 finished migrating 3 changelog revisions; change in size: 0 bytes
603 finished migrating 9 total revisions; total change in store size: -17 bytes
603 finished migrating 9 total revisions; total change in store size: -17 bytes
604 copying phaseroots
604 copying phaseroots
605 data fully upgraded in a temporary repository
605 data fully upgraded in a temporary repository
606 marking source repository as being upgraded; clients will be unable to read from repository
606 marking source repository as being upgraded; clients will be unable to read from repository
607 starting in-place swap of repository data
607 starting in-place swap of repository data
608 replaced files will be backed up at $TESTTMP/upgradegd/.hg/upgradebackup.* (glob)
608 replaced files will be backed up at $TESTTMP/upgradegd/.hg/upgradebackup.* (glob)
609 replacing store...
609 replacing store...
610 store replacement complete; repository was inconsistent for *s (glob)
610 store replacement complete; repository was inconsistent for *s (glob)
611 finalizing requirements file and making repository readable again
611 finalizing requirements file and making repository readable again
612 removing temporary repository $TESTTMP/upgradegd/.hg/upgrade.* (glob)
612 removing temporary repository $TESTTMP/upgradegd/.hg/upgrade.* (glob)
613 copy of old repository backed up at $TESTTMP/upgradegd/.hg/upgradebackup.* (glob)
613 copy of old repository backed up at $TESTTMP/upgradegd/.hg/upgradebackup.* (glob)
614 the old repository will not be deleted; remove it to free up disk space once the upgraded repository is verified
614 the old repository will not be deleted; remove it to free up disk space once the upgraded repository is verified
615
615
616 Original requirements backed up
616 Original requirements backed up
617
617
618 $ cat .hg/upgradebackup.*/requires
618 $ cat .hg/upgradebackup.*/requires
619 dotencode
619 dotencode
620 fncache
620 fncache
621 persistent-nodemap (rust !)
621 persistent-nodemap (rust !)
622 revlogv1
622 revlogv1
623 store
623 store
624
624
625 generaldelta added to original requirements files
625 generaldelta added to original requirements files
626
626
627 $ cat .hg/requires
627 $ hg debugrequires
628 dotencode
628 dotencode
629 fncache
629 fncache
630 generaldelta
630 generaldelta
631 persistent-nodemap (rust !)
631 persistent-nodemap (rust !)
632 revlogv1
632 revlogv1
633 store
633 store
634
634
635 store directory has files we expect
635 store directory has files we expect
636
636
637 $ ls .hg/store
637 $ ls .hg/store
638 00changelog.i
638 00changelog.i
639 00manifest.i
639 00manifest.i
640 data
640 data
641 fncache
641 fncache
642 phaseroots
642 phaseroots
643 undo
643 undo
644 undo.backupfiles
644 undo.backupfiles
645 undo.phaseroots
645 undo.phaseroots
646
646
647 manifest should be generaldelta
647 manifest should be generaldelta
648
648
649 $ hg debugrevlog -m | grep flags
649 $ hg debugrevlog -m | grep flags
650 flags : inline, generaldelta
650 flags : inline, generaldelta
651
651
652 verify should be happy
652 verify should be happy
653
653
654 $ hg verify
654 $ hg verify
655 checking changesets
655 checking changesets
656 checking manifests
656 checking manifests
657 crosschecking files in changesets and manifests
657 crosschecking files in changesets and manifests
658 checking files
658 checking files
659 checked 3 changesets with 3 changes to 3 files
659 checked 3 changesets with 3 changes to 3 files
660
660
661 old store should be backed up
661 old store should be backed up
662
662
663 $ ls -d .hg/upgradebackup.*/
663 $ ls -d .hg/upgradebackup.*/
664 .hg/upgradebackup.*/ (glob)
664 .hg/upgradebackup.*/ (glob)
665 $ ls .hg/upgradebackup.*/store
665 $ ls .hg/upgradebackup.*/store
666 00changelog.i
666 00changelog.i
667 00manifest.i
667 00manifest.i
668 data
668 data
669 fncache
669 fncache
670 phaseroots
670 phaseroots
671 undo
671 undo
672 undo.backup.fncache
672 undo.backup.fncache
673 undo.backupfiles
673 undo.backupfiles
674 undo.phaseroots
674 undo.phaseroots
675
675
676 unless --no-backup is passed
676 unless --no-backup is passed
677
677
678 $ rm -rf .hg/upgradebackup.*/
678 $ rm -rf .hg/upgradebackup.*/
679 $ hg debugupgraderepo --run --no-backup
679 $ hg debugupgraderepo --run --no-backup
680 note: selecting all-filelogs for processing to change: sparserevlog
680 note: selecting all-filelogs for processing to change: sparserevlog
681 note: selecting all-manifestlogs for processing to change: sparserevlog
681 note: selecting all-manifestlogs for processing to change: sparserevlog
682 note: selecting changelog for processing to change: sparserevlog
682 note: selecting changelog for processing to change: sparserevlog
683
683
684 upgrade will perform the following actions:
684 upgrade will perform the following actions:
685
685
686 requirements
686 requirements
687 preserved: dotencode, fncache, generaldelta, revlogv1, store (no-rust !)
687 preserved: dotencode, fncache, generaldelta, revlogv1, store (no-rust !)
688 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, store (rust !)
688 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, store (rust !)
689 added: sparserevlog
689 added: sparserevlog
690
690
691 sparserevlog
691 sparserevlog
692 Revlog supports delta chain with more unused data between payload. These gaps will be skipped at read time. This allows for better delta chains, making a better compression and faster exchange with server.
692 Revlog supports delta chain with more unused data between payload. These gaps will be skipped at read time. This allows for better delta chains, making a better compression and faster exchange with server.
693
693
694 processed revlogs:
694 processed revlogs:
695 - all-filelogs
695 - all-filelogs
696 - changelog
696 - changelog
697 - manifest
697 - manifest
698
698
699 beginning upgrade...
699 beginning upgrade...
700 repository locked and read-only
700 repository locked and read-only
701 creating temporary repository to stage upgraded data: $TESTTMP/upgradegd/.hg/upgrade.* (glob)
701 creating temporary repository to stage upgraded data: $TESTTMP/upgradegd/.hg/upgrade.* (glob)
702 (it is safe to interrupt this process any time before data migration completes)
702 (it is safe to interrupt this process any time before data migration completes)
703 migrating 9 total revisions (3 in filelogs, 3 in manifests, 3 in changelog)
703 migrating 9 total revisions (3 in filelogs, 3 in manifests, 3 in changelog)
704 migrating 519 KB in store; 1.05 MB tracked data
704 migrating 519 KB in store; 1.05 MB tracked data
705 migrating 3 filelogs containing 3 revisions (518 KB in store; 1.05 MB tracked data)
705 migrating 3 filelogs containing 3 revisions (518 KB in store; 1.05 MB tracked data)
706 finished migrating 3 filelog revisions across 3 filelogs; change in size: 0 bytes
706 finished migrating 3 filelog revisions across 3 filelogs; change in size: 0 bytes
707 migrating 1 manifests containing 3 revisions (367 bytes in store; 238 bytes tracked data)
707 migrating 1 manifests containing 3 revisions (367 bytes in store; 238 bytes tracked data)
708 finished migrating 3 manifest revisions across 1 manifests; change in size: 0 bytes
708 finished migrating 3 manifest revisions across 1 manifests; change in size: 0 bytes
709 migrating changelog containing 3 revisions (394 bytes in store; 199 bytes tracked data)
709 migrating changelog containing 3 revisions (394 bytes in store; 199 bytes tracked data)
710 finished migrating 3 changelog revisions; change in size: 0 bytes
710 finished migrating 3 changelog revisions; change in size: 0 bytes
711 finished migrating 9 total revisions; total change in store size: 0 bytes
711 finished migrating 9 total revisions; total change in store size: 0 bytes
712 copying phaseroots
712 copying phaseroots
713 data fully upgraded in a temporary repository
713 data fully upgraded in a temporary repository
714 marking source repository as being upgraded; clients will be unable to read from repository
714 marking source repository as being upgraded; clients will be unable to read from repository
715 starting in-place swap of repository data
715 starting in-place swap of repository data
716 replacing store...
716 replacing store...
717 store replacement complete; repository was inconsistent for * (glob)
717 store replacement complete; repository was inconsistent for * (glob)
718 finalizing requirements file and making repository readable again
718 finalizing requirements file and making repository readable again
719 removing temporary repository $TESTTMP/upgradegd/.hg/upgrade.* (glob)
719 removing temporary repository $TESTTMP/upgradegd/.hg/upgrade.* (glob)
720 $ ls -1 .hg/ | grep upgradebackup
720 $ ls -1 .hg/ | grep upgradebackup
721 [1]
721 [1]
722
722
723 We can restrict optimization to some revlog:
723 We can restrict optimization to some revlog:
724
724
725 $ hg debugupgrade --optimize re-delta-parent --run --manifest --no-backup --debug --traceback
725 $ hg debugupgrade --optimize re-delta-parent --run --manifest --no-backup --debug --traceback
726 upgrade will perform the following actions:
726 upgrade will perform the following actions:
727
727
728 requirements
728 requirements
729 preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
729 preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
730 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
730 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
731
731
732 optimisations: re-delta-parent
732 optimisations: re-delta-parent
733
733
734 re-delta-parent
734 re-delta-parent
735 deltas within internal storage will choose a new base revision if needed
735 deltas within internal storage will choose a new base revision if needed
736
736
737 processed revlogs:
737 processed revlogs:
738 - manifest
738 - manifest
739
739
740 beginning upgrade...
740 beginning upgrade...
741 repository locked and read-only
741 repository locked and read-only
742 creating temporary repository to stage upgraded data: $TESTTMP/upgradegd/.hg/upgrade.* (glob)
742 creating temporary repository to stage upgraded data: $TESTTMP/upgradegd/.hg/upgrade.* (glob)
743 (it is safe to interrupt this process any time before data migration completes)
743 (it is safe to interrupt this process any time before data migration completes)
744 migrating 9 total revisions (3 in filelogs, 3 in manifests, 3 in changelog)
744 migrating 9 total revisions (3 in filelogs, 3 in manifests, 3 in changelog)
745 migrating 519 KB in store; 1.05 MB tracked data
745 migrating 519 KB in store; 1.05 MB tracked data
746 migrating 3 filelogs containing 3 revisions (518 KB in store; 1.05 MB tracked data)
746 migrating 3 filelogs containing 3 revisions (518 KB in store; 1.05 MB tracked data)
747 blindly copying data/FooBarDirectory.d/f1.i containing 1 revisions
747 blindly copying data/FooBarDirectory.d/f1.i containing 1 revisions
748 blindly copying data/f0.i containing 1 revisions
748 blindly copying data/f0.i containing 1 revisions
749 blindly copying data/f2.i containing 1 revisions
749 blindly copying data/f2.i containing 1 revisions
750 finished migrating 3 filelog revisions across 3 filelogs; change in size: 0 bytes
750 finished migrating 3 filelog revisions across 3 filelogs; change in size: 0 bytes
751 migrating 1 manifests containing 3 revisions (367 bytes in store; 238 bytes tracked data)
751 migrating 1 manifests containing 3 revisions (367 bytes in store; 238 bytes tracked data)
752 cloning 3 revisions from 00manifest.i
752 cloning 3 revisions from 00manifest.i
753 finished migrating 3 manifest revisions across 1 manifests; change in size: 0 bytes
753 finished migrating 3 manifest revisions across 1 manifests; change in size: 0 bytes
754 migrating changelog containing 3 revisions (394 bytes in store; 199 bytes tracked data)
754 migrating changelog containing 3 revisions (394 bytes in store; 199 bytes tracked data)
755 blindly copying 00changelog.i containing 3 revisions
755 blindly copying 00changelog.i containing 3 revisions
756 finished migrating 3 changelog revisions; change in size: 0 bytes
756 finished migrating 3 changelog revisions; change in size: 0 bytes
757 finished migrating 9 total revisions; total change in store size: 0 bytes
757 finished migrating 9 total revisions; total change in store size: 0 bytes
758 copying phaseroots
758 copying phaseroots
759 data fully upgraded in a temporary repository
759 data fully upgraded in a temporary repository
760 marking source repository as being upgraded; clients will be unable to read from repository
760 marking source repository as being upgraded; clients will be unable to read from repository
761 starting in-place swap of repository data
761 starting in-place swap of repository data
762 replacing store...
762 replacing store...
763 store replacement complete; repository was inconsistent for *s (glob)
763 store replacement complete; repository was inconsistent for *s (glob)
764 finalizing requirements file and making repository readable again
764 finalizing requirements file and making repository readable again
765 removing temporary repository $TESTTMP/upgradegd/.hg/upgrade.* (glob)
765 removing temporary repository $TESTTMP/upgradegd/.hg/upgrade.* (glob)
766
766
767 Check that the repo still works fine
767 Check that the repo still works fine
768
768
769 $ hg log -G --stat
769 $ hg log -G --stat
770 @ changeset: 2:76d4395f5413 (no-py3 !)
770 @ changeset: 2:76d4395f5413 (no-py3 !)
771 @ changeset: 2:fca376863211 (py3 !)
771 @ changeset: 2:fca376863211 (py3 !)
772 | tag: tip
772 | tag: tip
773 | parent: 0:ba592bf28da2
773 | parent: 0:ba592bf28da2
774 | user: test
774 | user: test
775 | date: Thu Jan 01 00:00:00 1970 +0000
775 | date: Thu Jan 01 00:00:00 1970 +0000
776 | summary: add f2
776 | summary: add f2
777 |
777 |
778 | f2 | 100000 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
778 | f2 | 100000 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
779 | 1 files changed, 100000 insertions(+), 0 deletions(-)
779 | 1 files changed, 100000 insertions(+), 0 deletions(-)
780 |
780 |
781 | o changeset: 1:2029ce2354e2
781 | o changeset: 1:2029ce2354e2
782 |/ user: test
782 |/ user: test
783 | date: Thu Jan 01 00:00:00 1970 +0000
783 | date: Thu Jan 01 00:00:00 1970 +0000
784 | summary: add f1
784 | summary: add f1
785 |
785 |
786 |
786 |
787 o changeset: 0:ba592bf28da2
787 o changeset: 0:ba592bf28da2
788 user: test
788 user: test
789 date: Thu Jan 01 00:00:00 1970 +0000
789 date: Thu Jan 01 00:00:00 1970 +0000
790 summary: initial
790 summary: initial
791
791
792
792
793
793
794 $ hg verify
794 $ hg verify
795 checking changesets
795 checking changesets
796 checking manifests
796 checking manifests
797 crosschecking files in changesets and manifests
797 crosschecking files in changesets and manifests
798 checking files
798 checking files
799 checked 3 changesets with 3 changes to 3 files
799 checked 3 changesets with 3 changes to 3 files
800
800
801 Check we can select negatively
801 Check we can select negatively
802
802
803 $ hg debugupgrade --optimize re-delta-parent --run --no-manifest --no-backup --debug --traceback
803 $ hg debugupgrade --optimize re-delta-parent --run --no-manifest --no-backup --debug --traceback
804 upgrade will perform the following actions:
804 upgrade will perform the following actions:
805
805
806 requirements
806 requirements
807 preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
807 preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
808 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
808 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
809
809
810 optimisations: re-delta-parent
810 optimisations: re-delta-parent
811
811
812 re-delta-parent
812 re-delta-parent
813 deltas within internal storage will choose a new base revision if needed
813 deltas within internal storage will choose a new base revision if needed
814
814
815 processed revlogs:
815 processed revlogs:
816 - all-filelogs
816 - all-filelogs
817 - changelog
817 - changelog
818
818
819 beginning upgrade...
819 beginning upgrade...
820 repository locked and read-only
820 repository locked and read-only
821 creating temporary repository to stage upgraded data: $TESTTMP/upgradegd/.hg/upgrade.* (glob)
821 creating temporary repository to stage upgraded data: $TESTTMP/upgradegd/.hg/upgrade.* (glob)
822 (it is safe to interrupt this process any time before data migration completes)
822 (it is safe to interrupt this process any time before data migration completes)
823 migrating 9 total revisions (3 in filelogs, 3 in manifests, 3 in changelog)
823 migrating 9 total revisions (3 in filelogs, 3 in manifests, 3 in changelog)
824 migrating 519 KB in store; 1.05 MB tracked data
824 migrating 519 KB in store; 1.05 MB tracked data
825 migrating 3 filelogs containing 3 revisions (518 KB in store; 1.05 MB tracked data)
825 migrating 3 filelogs containing 3 revisions (518 KB in store; 1.05 MB tracked data)
826 cloning 1 revisions from data/FooBarDirectory.d/f1.i
826 cloning 1 revisions from data/FooBarDirectory.d/f1.i
827 cloning 1 revisions from data/f0.i
827 cloning 1 revisions from data/f0.i
828 cloning 1 revisions from data/f2.i
828 cloning 1 revisions from data/f2.i
829 finished migrating 3 filelog revisions across 3 filelogs; change in size: 0 bytes
829 finished migrating 3 filelog revisions across 3 filelogs; change in size: 0 bytes
830 migrating 1 manifests containing 3 revisions (367 bytes in store; 238 bytes tracked data)
830 migrating 1 manifests containing 3 revisions (367 bytes in store; 238 bytes tracked data)
831 blindly copying 00manifest.i containing 3 revisions
831 blindly copying 00manifest.i containing 3 revisions
832 finished migrating 3 manifest revisions across 1 manifests; change in size: 0 bytes
832 finished migrating 3 manifest revisions across 1 manifests; change in size: 0 bytes
833 migrating changelog containing 3 revisions (394 bytes in store; 199 bytes tracked data)
833 migrating changelog containing 3 revisions (394 bytes in store; 199 bytes tracked data)
834 cloning 3 revisions from 00changelog.i
834 cloning 3 revisions from 00changelog.i
835 finished migrating 3 changelog revisions; change in size: 0 bytes
835 finished migrating 3 changelog revisions; change in size: 0 bytes
836 finished migrating 9 total revisions; total change in store size: 0 bytes
836 finished migrating 9 total revisions; total change in store size: 0 bytes
837 copying phaseroots
837 copying phaseroots
838 data fully upgraded in a temporary repository
838 data fully upgraded in a temporary repository
839 marking source repository as being upgraded; clients will be unable to read from repository
839 marking source repository as being upgraded; clients will be unable to read from repository
840 starting in-place swap of repository data
840 starting in-place swap of repository data
841 replacing store...
841 replacing store...
842 store replacement complete; repository was inconsistent for *s (glob)
842 store replacement complete; repository was inconsistent for *s (glob)
843 finalizing requirements file and making repository readable again
843 finalizing requirements file and making repository readable again
844 removing temporary repository $TESTTMP/upgradegd/.hg/upgrade.* (glob)
844 removing temporary repository $TESTTMP/upgradegd/.hg/upgrade.* (glob)
845 $ hg verify
845 $ hg verify
846 checking changesets
846 checking changesets
847 checking manifests
847 checking manifests
848 crosschecking files in changesets and manifests
848 crosschecking files in changesets and manifests
849 checking files
849 checking files
850 checked 3 changesets with 3 changes to 3 files
850 checked 3 changesets with 3 changes to 3 files
851
851
852 Check that we can select changelog only
852 Check that we can select changelog only
853
853
854 $ hg debugupgrade --optimize re-delta-parent --run --changelog --no-backup --debug --traceback
854 $ hg debugupgrade --optimize re-delta-parent --run --changelog --no-backup --debug --traceback
855 upgrade will perform the following actions:
855 upgrade will perform the following actions:
856
856
857 requirements
857 requirements
858 preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
858 preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
859 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
859 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
860
860
861 optimisations: re-delta-parent
861 optimisations: re-delta-parent
862
862
863 re-delta-parent
863 re-delta-parent
864 deltas within internal storage will choose a new base revision if needed
864 deltas within internal storage will choose a new base revision if needed
865
865
866 processed revlogs:
866 processed revlogs:
867 - changelog
867 - changelog
868
868
869 beginning upgrade...
869 beginning upgrade...
870 repository locked and read-only
870 repository locked and read-only
871 creating temporary repository to stage upgraded data: $TESTTMP/upgradegd/.hg/upgrade.* (glob)
871 creating temporary repository to stage upgraded data: $TESTTMP/upgradegd/.hg/upgrade.* (glob)
872 (it is safe to interrupt this process any time before data migration completes)
872 (it is safe to interrupt this process any time before data migration completes)
873 migrating 9 total revisions (3 in filelogs, 3 in manifests, 3 in changelog)
873 migrating 9 total revisions (3 in filelogs, 3 in manifests, 3 in changelog)
874 migrating 519 KB in store; 1.05 MB tracked data
874 migrating 519 KB in store; 1.05 MB tracked data
875 migrating 3 filelogs containing 3 revisions (518 KB in store; 1.05 MB tracked data)
875 migrating 3 filelogs containing 3 revisions (518 KB in store; 1.05 MB tracked data)
876 blindly copying data/FooBarDirectory.d/f1.i containing 1 revisions
876 blindly copying data/FooBarDirectory.d/f1.i containing 1 revisions
877 blindly copying data/f0.i containing 1 revisions
877 blindly copying data/f0.i containing 1 revisions
878 blindly copying data/f2.i containing 1 revisions
878 blindly copying data/f2.i containing 1 revisions
879 finished migrating 3 filelog revisions across 3 filelogs; change in size: 0 bytes
879 finished migrating 3 filelog revisions across 3 filelogs; change in size: 0 bytes
880 migrating 1 manifests containing 3 revisions (367 bytes in store; 238 bytes tracked data)
880 migrating 1 manifests containing 3 revisions (367 bytes in store; 238 bytes tracked data)
881 blindly copying 00manifest.i containing 3 revisions
881 blindly copying 00manifest.i containing 3 revisions
882 finished migrating 3 manifest revisions across 1 manifests; change in size: 0 bytes
882 finished migrating 3 manifest revisions across 1 manifests; change in size: 0 bytes
883 migrating changelog containing 3 revisions (394 bytes in store; 199 bytes tracked data)
883 migrating changelog containing 3 revisions (394 bytes in store; 199 bytes tracked data)
884 cloning 3 revisions from 00changelog.i
884 cloning 3 revisions from 00changelog.i
885 finished migrating 3 changelog revisions; change in size: 0 bytes
885 finished migrating 3 changelog revisions; change in size: 0 bytes
886 finished migrating 9 total revisions; total change in store size: 0 bytes
886 finished migrating 9 total revisions; total change in store size: 0 bytes
887 copying phaseroots
887 copying phaseroots
888 data fully upgraded in a temporary repository
888 data fully upgraded in a temporary repository
889 marking source repository as being upgraded; clients will be unable to read from repository
889 marking source repository as being upgraded; clients will be unable to read from repository
890 starting in-place swap of repository data
890 starting in-place swap of repository data
891 replacing store...
891 replacing store...
892 store replacement complete; repository was inconsistent for *s (glob)
892 store replacement complete; repository was inconsistent for *s (glob)
893 finalizing requirements file and making repository readable again
893 finalizing requirements file and making repository readable again
894 removing temporary repository $TESTTMP/upgradegd/.hg/upgrade.* (glob)
894 removing temporary repository $TESTTMP/upgradegd/.hg/upgrade.* (glob)
895 $ hg verify
895 $ hg verify
896 checking changesets
896 checking changesets
897 checking manifests
897 checking manifests
898 crosschecking files in changesets and manifests
898 crosschecking files in changesets and manifests
899 checking files
899 checking files
900 checked 3 changesets with 3 changes to 3 files
900 checked 3 changesets with 3 changes to 3 files
901
901
902 Check that we can select filelog only
902 Check that we can select filelog only
903
903
904 $ hg debugupgrade --optimize re-delta-parent --run --no-changelog --no-manifest --no-backup --debug --traceback
904 $ hg debugupgrade --optimize re-delta-parent --run --no-changelog --no-manifest --no-backup --debug --traceback
905 upgrade will perform the following actions:
905 upgrade will perform the following actions:
906
906
907 requirements
907 requirements
908 preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
908 preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
909 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
909 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
910
910
911 optimisations: re-delta-parent
911 optimisations: re-delta-parent
912
912
913 re-delta-parent
913 re-delta-parent
914 deltas within internal storage will choose a new base revision if needed
914 deltas within internal storage will choose a new base revision if needed
915
915
916 processed revlogs:
916 processed revlogs:
917 - all-filelogs
917 - all-filelogs
918
918
919 beginning upgrade...
919 beginning upgrade...
920 repository locked and read-only
920 repository locked and read-only
921 creating temporary repository to stage upgraded data: $TESTTMP/upgradegd/.hg/upgrade.* (glob)
921 creating temporary repository to stage upgraded data: $TESTTMP/upgradegd/.hg/upgrade.* (glob)
922 (it is safe to interrupt this process any time before data migration completes)
922 (it is safe to interrupt this process any time before data migration completes)
923 migrating 9 total revisions (3 in filelogs, 3 in manifests, 3 in changelog)
923 migrating 9 total revisions (3 in filelogs, 3 in manifests, 3 in changelog)
924 migrating 519 KB in store; 1.05 MB tracked data
924 migrating 519 KB in store; 1.05 MB tracked data
925 migrating 3 filelogs containing 3 revisions (518 KB in store; 1.05 MB tracked data)
925 migrating 3 filelogs containing 3 revisions (518 KB in store; 1.05 MB tracked data)
926 cloning 1 revisions from data/FooBarDirectory.d/f1.i
926 cloning 1 revisions from data/FooBarDirectory.d/f1.i
927 cloning 1 revisions from data/f0.i
927 cloning 1 revisions from data/f0.i
928 cloning 1 revisions from data/f2.i
928 cloning 1 revisions from data/f2.i
929 finished migrating 3 filelog revisions across 3 filelogs; change in size: 0 bytes
929 finished migrating 3 filelog revisions across 3 filelogs; change in size: 0 bytes
930 migrating 1 manifests containing 3 revisions (367 bytes in store; 238 bytes tracked data)
930 migrating 1 manifests containing 3 revisions (367 bytes in store; 238 bytes tracked data)
931 blindly copying 00manifest.i containing 3 revisions
931 blindly copying 00manifest.i containing 3 revisions
932 finished migrating 3 manifest revisions across 1 manifests; change in size: 0 bytes
932 finished migrating 3 manifest revisions across 1 manifests; change in size: 0 bytes
933 migrating changelog containing 3 revisions (394 bytes in store; 199 bytes tracked data)
933 migrating changelog containing 3 revisions (394 bytes in store; 199 bytes tracked data)
934 blindly copying 00changelog.i containing 3 revisions
934 blindly copying 00changelog.i containing 3 revisions
935 finished migrating 3 changelog revisions; change in size: 0 bytes
935 finished migrating 3 changelog revisions; change in size: 0 bytes
936 finished migrating 9 total revisions; total change in store size: 0 bytes
936 finished migrating 9 total revisions; total change in store size: 0 bytes
937 copying phaseroots
937 copying phaseroots
938 data fully upgraded in a temporary repository
938 data fully upgraded in a temporary repository
939 marking source repository as being upgraded; clients will be unable to read from repository
939 marking source repository as being upgraded; clients will be unable to read from repository
940 starting in-place swap of repository data
940 starting in-place swap of repository data
941 replacing store...
941 replacing store...
942 store replacement complete; repository was inconsistent for *s (glob)
942 store replacement complete; repository was inconsistent for *s (glob)
943 finalizing requirements file and making repository readable again
943 finalizing requirements file and making repository readable again
944 removing temporary repository $TESTTMP/upgradegd/.hg/upgrade.* (glob)
944 removing temporary repository $TESTTMP/upgradegd/.hg/upgrade.* (glob)
945 $ hg verify
945 $ hg verify
946 checking changesets
946 checking changesets
947 checking manifests
947 checking manifests
948 crosschecking files in changesets and manifests
948 crosschecking files in changesets and manifests
949 checking files
949 checking files
950 checked 3 changesets with 3 changes to 3 files
950 checked 3 changesets with 3 changes to 3 files
951
951
952
952
953 Check you can't skip revlog clone during important format downgrade
953 Check you can't skip revlog clone during important format downgrade
954
954
955 $ echo "[format]" > .hg/hgrc
955 $ echo "[format]" > .hg/hgrc
956 $ echo "sparse-revlog=no" >> .hg/hgrc
956 $ echo "sparse-revlog=no" >> .hg/hgrc
957 $ hg debugupgrade --optimize re-delta-parent --no-manifest --no-backup --quiet
957 $ hg debugupgrade --optimize re-delta-parent --no-manifest --no-backup --quiet
958 warning: ignoring --no-manifest, as upgrade is changing: sparserevlog
958 warning: ignoring --no-manifest, as upgrade is changing: sparserevlog
959
959
960 requirements
960 requirements
961 preserved: dotencode, fncache, generaldelta, revlogv1, store (no-rust !)
961 preserved: dotencode, fncache, generaldelta, revlogv1, store (no-rust !)
962 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, store (rust !)
962 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, store (rust !)
963 removed: sparserevlog
963 removed: sparserevlog
964
964
965 optimisations: re-delta-parent
965 optimisations: re-delta-parent
966
966
967 processed revlogs:
967 processed revlogs:
968 - all-filelogs
968 - all-filelogs
969 - changelog
969 - changelog
970 - manifest
970 - manifest
971
971
972 $ hg debugupgrade --optimize re-delta-parent --run --manifest --no-backup --debug --traceback
972 $ hg debugupgrade --optimize re-delta-parent --run --manifest --no-backup --debug --traceback
973 note: selecting all-filelogs for processing to change: sparserevlog
973 note: selecting all-filelogs for processing to change: sparserevlog
974 note: selecting changelog for processing to change: sparserevlog
974 note: selecting changelog for processing to change: sparserevlog
975
975
976 upgrade will perform the following actions:
976 upgrade will perform the following actions:
977
977
978 requirements
978 requirements
979 preserved: dotencode, fncache, generaldelta, revlogv1, store (no-rust !)
979 preserved: dotencode, fncache, generaldelta, revlogv1, store (no-rust !)
980 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, store (rust !)
980 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, store (rust !)
981 removed: sparserevlog
981 removed: sparserevlog
982
982
983 optimisations: re-delta-parent
983 optimisations: re-delta-parent
984
984
985 re-delta-parent
985 re-delta-parent
986 deltas within internal storage will choose a new base revision if needed
986 deltas within internal storage will choose a new base revision if needed
987
987
988 processed revlogs:
988 processed revlogs:
989 - all-filelogs
989 - all-filelogs
990 - changelog
990 - changelog
991 - manifest
991 - manifest
992
992
993 beginning upgrade...
993 beginning upgrade...
994 repository locked and read-only
994 repository locked and read-only
995 creating temporary repository to stage upgraded data: $TESTTMP/upgradegd/.hg/upgrade.* (glob)
995 creating temporary repository to stage upgraded data: $TESTTMP/upgradegd/.hg/upgrade.* (glob)
996 (it is safe to interrupt this process any time before data migration completes)
996 (it is safe to interrupt this process any time before data migration completes)
997 migrating 9 total revisions (3 in filelogs, 3 in manifests, 3 in changelog)
997 migrating 9 total revisions (3 in filelogs, 3 in manifests, 3 in changelog)
998 migrating 519 KB in store; 1.05 MB tracked data
998 migrating 519 KB in store; 1.05 MB tracked data
999 migrating 3 filelogs containing 3 revisions (518 KB in store; 1.05 MB tracked data)
999 migrating 3 filelogs containing 3 revisions (518 KB in store; 1.05 MB tracked data)
1000 cloning 1 revisions from data/FooBarDirectory.d/f1.i
1000 cloning 1 revisions from data/FooBarDirectory.d/f1.i
1001 cloning 1 revisions from data/f0.i
1001 cloning 1 revisions from data/f0.i
1002 cloning 1 revisions from data/f2.i
1002 cloning 1 revisions from data/f2.i
1003 finished migrating 3 filelog revisions across 3 filelogs; change in size: 0 bytes
1003 finished migrating 3 filelog revisions across 3 filelogs; change in size: 0 bytes
1004 migrating 1 manifests containing 3 revisions (367 bytes in store; 238 bytes tracked data)
1004 migrating 1 manifests containing 3 revisions (367 bytes in store; 238 bytes tracked data)
1005 cloning 3 revisions from 00manifest.i
1005 cloning 3 revisions from 00manifest.i
1006 finished migrating 3 manifest revisions across 1 manifests; change in size: 0 bytes
1006 finished migrating 3 manifest revisions across 1 manifests; change in size: 0 bytes
1007 migrating changelog containing 3 revisions (394 bytes in store; 199 bytes tracked data)
1007 migrating changelog containing 3 revisions (394 bytes in store; 199 bytes tracked data)
1008 cloning 3 revisions from 00changelog.i
1008 cloning 3 revisions from 00changelog.i
1009 finished migrating 3 changelog revisions; change in size: 0 bytes
1009 finished migrating 3 changelog revisions; change in size: 0 bytes
1010 finished migrating 9 total revisions; total change in store size: 0 bytes
1010 finished migrating 9 total revisions; total change in store size: 0 bytes
1011 copying phaseroots
1011 copying phaseroots
1012 data fully upgraded in a temporary repository
1012 data fully upgraded in a temporary repository
1013 marking source repository as being upgraded; clients will be unable to read from repository
1013 marking source repository as being upgraded; clients will be unable to read from repository
1014 starting in-place swap of repository data
1014 starting in-place swap of repository data
1015 replacing store...
1015 replacing store...
1016 store replacement complete; repository was inconsistent for *s (glob)
1016 store replacement complete; repository was inconsistent for *s (glob)
1017 finalizing requirements file and making repository readable again
1017 finalizing requirements file and making repository readable again
1018 removing temporary repository $TESTTMP/upgradegd/.hg/upgrade.* (glob)
1018 removing temporary repository $TESTTMP/upgradegd/.hg/upgrade.* (glob)
1019 $ hg verify
1019 $ hg verify
1020 checking changesets
1020 checking changesets
1021 checking manifests
1021 checking manifests
1022 crosschecking files in changesets and manifests
1022 crosschecking files in changesets and manifests
1023 checking files
1023 checking files
1024 checked 3 changesets with 3 changes to 3 files
1024 checked 3 changesets with 3 changes to 3 files
1025
1025
1026 Check you can't skip revlog clone during important format upgrade
1026 Check you can't skip revlog clone during important format upgrade
1027
1027
1028 $ echo "sparse-revlog=yes" >> .hg/hgrc
1028 $ echo "sparse-revlog=yes" >> .hg/hgrc
1029 $ hg debugupgrade --optimize re-delta-parent --run --manifest --no-backup --debug --traceback
1029 $ hg debugupgrade --optimize re-delta-parent --run --manifest --no-backup --debug --traceback
1030 note: selecting all-filelogs for processing to change: sparserevlog
1030 note: selecting all-filelogs for processing to change: sparserevlog
1031 note: selecting changelog for processing to change: sparserevlog
1031 note: selecting changelog for processing to change: sparserevlog
1032
1032
1033 upgrade will perform the following actions:
1033 upgrade will perform the following actions:
1034
1034
1035 requirements
1035 requirements
1036 preserved: dotencode, fncache, generaldelta, revlogv1, store (no-rust !)
1036 preserved: dotencode, fncache, generaldelta, revlogv1, store (no-rust !)
1037 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, store (rust !)
1037 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, store (rust !)
1038 added: sparserevlog
1038 added: sparserevlog
1039
1039
1040 optimisations: re-delta-parent
1040 optimisations: re-delta-parent
1041
1041
1042 sparserevlog
1042 sparserevlog
1043 Revlog supports delta chain with more unused data between payload. These gaps will be skipped at read time. This allows for better delta chains, making a better compression and faster exchange with server.
1043 Revlog supports delta chain with more unused data between payload. These gaps will be skipped at read time. This allows for better delta chains, making a better compression and faster exchange with server.
1044
1044
1045 re-delta-parent
1045 re-delta-parent
1046 deltas within internal storage will choose a new base revision if needed
1046 deltas within internal storage will choose a new base revision if needed
1047
1047
1048 processed revlogs:
1048 processed revlogs:
1049 - all-filelogs
1049 - all-filelogs
1050 - changelog
1050 - changelog
1051 - manifest
1051 - manifest
1052
1052
1053 beginning upgrade...
1053 beginning upgrade...
1054 repository locked and read-only
1054 repository locked and read-only
1055 creating temporary repository to stage upgraded data: $TESTTMP/upgradegd/.hg/upgrade.* (glob)
1055 creating temporary repository to stage upgraded data: $TESTTMP/upgradegd/.hg/upgrade.* (glob)
1056 (it is safe to interrupt this process any time before data migration completes)
1056 (it is safe to interrupt this process any time before data migration completes)
1057 migrating 9 total revisions (3 in filelogs, 3 in manifests, 3 in changelog)
1057 migrating 9 total revisions (3 in filelogs, 3 in manifests, 3 in changelog)
1058 migrating 519 KB in store; 1.05 MB tracked data
1058 migrating 519 KB in store; 1.05 MB tracked data
1059 migrating 3 filelogs containing 3 revisions (518 KB in store; 1.05 MB tracked data)
1059 migrating 3 filelogs containing 3 revisions (518 KB in store; 1.05 MB tracked data)
1060 cloning 1 revisions from data/FooBarDirectory.d/f1.i
1060 cloning 1 revisions from data/FooBarDirectory.d/f1.i
1061 cloning 1 revisions from data/f0.i
1061 cloning 1 revisions from data/f0.i
1062 cloning 1 revisions from data/f2.i
1062 cloning 1 revisions from data/f2.i
1063 finished migrating 3 filelog revisions across 3 filelogs; change in size: 0 bytes
1063 finished migrating 3 filelog revisions across 3 filelogs; change in size: 0 bytes
1064 migrating 1 manifests containing 3 revisions (367 bytes in store; 238 bytes tracked data)
1064 migrating 1 manifests containing 3 revisions (367 bytes in store; 238 bytes tracked data)
1065 cloning 3 revisions from 00manifest.i
1065 cloning 3 revisions from 00manifest.i
1066 finished migrating 3 manifest revisions across 1 manifests; change in size: 0 bytes
1066 finished migrating 3 manifest revisions across 1 manifests; change in size: 0 bytes
1067 migrating changelog containing 3 revisions (394 bytes in store; 199 bytes tracked data)
1067 migrating changelog containing 3 revisions (394 bytes in store; 199 bytes tracked data)
1068 cloning 3 revisions from 00changelog.i
1068 cloning 3 revisions from 00changelog.i
1069 finished migrating 3 changelog revisions; change in size: 0 bytes
1069 finished migrating 3 changelog revisions; change in size: 0 bytes
1070 finished migrating 9 total revisions; total change in store size: 0 bytes
1070 finished migrating 9 total revisions; total change in store size: 0 bytes
1071 copying phaseroots
1071 copying phaseroots
1072 data fully upgraded in a temporary repository
1072 data fully upgraded in a temporary repository
1073 marking source repository as being upgraded; clients will be unable to read from repository
1073 marking source repository as being upgraded; clients will be unable to read from repository
1074 starting in-place swap of repository data
1074 starting in-place swap of repository data
1075 replacing store...
1075 replacing store...
1076 store replacement complete; repository was inconsistent for *s (glob)
1076 store replacement complete; repository was inconsistent for *s (glob)
1077 finalizing requirements file and making repository readable again
1077 finalizing requirements file and making repository readable again
1078 removing temporary repository $TESTTMP/upgradegd/.hg/upgrade.* (glob)
1078 removing temporary repository $TESTTMP/upgradegd/.hg/upgrade.* (glob)
1079 $ hg verify
1079 $ hg verify
1080 checking changesets
1080 checking changesets
1081 checking manifests
1081 checking manifests
1082 crosschecking files in changesets and manifests
1082 crosschecking files in changesets and manifests
1083 checking files
1083 checking files
1084 checked 3 changesets with 3 changes to 3 files
1084 checked 3 changesets with 3 changes to 3 files
1085
1085
1086 $ cd ..
1086 $ cd ..
1087
1087
1088 store files with special filenames aren't encoded during copy
1088 store files with special filenames aren't encoded during copy
1089
1089
1090 $ hg init store-filenames
1090 $ hg init store-filenames
1091 $ cd store-filenames
1091 $ cd store-filenames
1092 $ touch foo
1092 $ touch foo
1093 $ hg -q commit -A -m initial
1093 $ hg -q commit -A -m initial
1094 $ touch .hg/store/.XX_special_filename
1094 $ touch .hg/store/.XX_special_filename
1095
1095
1096 $ hg debugupgraderepo --run
1096 $ hg debugupgraderepo --run
1097 nothing to do
1097 nothing to do
1098 $ hg debugupgraderepo --run --optimize 're-delta-fulladd'
1098 $ hg debugupgraderepo --run --optimize 're-delta-fulladd'
1099 upgrade will perform the following actions:
1099 upgrade will perform the following actions:
1100
1100
1101 requirements
1101 requirements
1102 preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
1102 preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
1103 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
1103 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
1104
1104
1105 optimisations: re-delta-fulladd
1105 optimisations: re-delta-fulladd
1106
1106
1107 re-delta-fulladd
1107 re-delta-fulladd
1108 each revision will be added as new content to the internal storage; this will likely drastically slow down execution time, but some extensions might need it
1108 each revision will be added as new content to the internal storage; this will likely drastically slow down execution time, but some extensions might need it
1109
1109
1110 processed revlogs:
1110 processed revlogs:
1111 - all-filelogs
1111 - all-filelogs
1112 - changelog
1112 - changelog
1113 - manifest
1113 - manifest
1114
1114
1115 beginning upgrade...
1115 beginning upgrade...
1116 repository locked and read-only
1116 repository locked and read-only
1117 creating temporary repository to stage upgraded data: $TESTTMP/store-filenames/.hg/upgrade.* (glob)
1117 creating temporary repository to stage upgraded data: $TESTTMP/store-filenames/.hg/upgrade.* (glob)
1118 (it is safe to interrupt this process any time before data migration completes)
1118 (it is safe to interrupt this process any time before data migration completes)
1119 migrating 3 total revisions (1 in filelogs, 1 in manifests, 1 in changelog)
1119 migrating 3 total revisions (1 in filelogs, 1 in manifests, 1 in changelog)
1120 migrating 301 bytes in store; 107 bytes tracked data
1120 migrating 301 bytes in store; 107 bytes tracked data
1121 migrating 1 filelogs containing 1 revisions (64 bytes in store; 0 bytes tracked data)
1121 migrating 1 filelogs containing 1 revisions (64 bytes in store; 0 bytes tracked data)
1122 finished migrating 1 filelog revisions across 1 filelogs; change in size: 0 bytes
1122 finished migrating 1 filelog revisions across 1 filelogs; change in size: 0 bytes
1123 migrating 1 manifests containing 1 revisions (110 bytes in store; 45 bytes tracked data)
1123 migrating 1 manifests containing 1 revisions (110 bytes in store; 45 bytes tracked data)
1124 finished migrating 1 manifest revisions across 1 manifests; change in size: 0 bytes
1124 finished migrating 1 manifest revisions across 1 manifests; change in size: 0 bytes
1125 migrating changelog containing 1 revisions (127 bytes in store; 62 bytes tracked data)
1125 migrating changelog containing 1 revisions (127 bytes in store; 62 bytes tracked data)
1126 finished migrating 1 changelog revisions; change in size: 0 bytes
1126 finished migrating 1 changelog revisions; change in size: 0 bytes
1127 finished migrating 3 total revisions; total change in store size: 0 bytes
1127 finished migrating 3 total revisions; total change in store size: 0 bytes
1128 copying .XX_special_filename
1128 copying .XX_special_filename
1129 copying phaseroots
1129 copying phaseroots
1130 data fully upgraded in a temporary repository
1130 data fully upgraded in a temporary repository
1131 marking source repository as being upgraded; clients will be unable to read from repository
1131 marking source repository as being upgraded; clients will be unable to read from repository
1132 starting in-place swap of repository data
1132 starting in-place swap of repository data
1133 replaced files will be backed up at $TESTTMP/store-filenames/.hg/upgradebackup.* (glob)
1133 replaced files will be backed up at $TESTTMP/store-filenames/.hg/upgradebackup.* (glob)
1134 replacing store...
1134 replacing store...
1135 store replacement complete; repository was inconsistent for *s (glob)
1135 store replacement complete; repository was inconsistent for *s (glob)
1136 finalizing requirements file and making repository readable again
1136 finalizing requirements file and making repository readable again
1137 removing temporary repository $TESTTMP/store-filenames/.hg/upgrade.* (glob)
1137 removing temporary repository $TESTTMP/store-filenames/.hg/upgrade.* (glob)
1138 copy of old repository backed up at $TESTTMP/store-filenames/.hg/upgradebackup.* (glob)
1138 copy of old repository backed up at $TESTTMP/store-filenames/.hg/upgradebackup.* (glob)
1139 the old repository will not be deleted; remove it to free up disk space once the upgraded repository is verified
1139 the old repository will not be deleted; remove it to free up disk space once the upgraded repository is verified
1140
1140
1141 fncache is valid after upgrade
1141 fncache is valid after upgrade
1142
1142
1143 $ hg debugrebuildfncache
1143 $ hg debugrebuildfncache
1144 fncache already up to date
1144 fncache already up to date
1145
1145
1146 $ cd ..
1146 $ cd ..
1147
1147
1148 Check upgrading a large file repository
1148 Check upgrading a large file repository
1149 ---------------------------------------
1149 ---------------------------------------
1150
1150
1151 $ hg init largefilesrepo
1151 $ hg init largefilesrepo
1152 $ cat << EOF >> largefilesrepo/.hg/hgrc
1152 $ cat << EOF >> largefilesrepo/.hg/hgrc
1153 > [extensions]
1153 > [extensions]
1154 > largefiles =
1154 > largefiles =
1155 > EOF
1155 > EOF
1156
1156
1157 $ cd largefilesrepo
1157 $ cd largefilesrepo
1158 $ touch foo
1158 $ touch foo
1159 $ hg add --large foo
1159 $ hg add --large foo
1160 $ hg -q commit -m initial
1160 $ hg -q commit -m initial
1161 $ cat .hg/requires
1161 $ cat .hg/requires
1162 dotencode
1162 dotencode
1163 fncache
1163 fncache
1164 generaldelta
1164 generaldelta
1165 largefiles
1165 largefiles
1166 persistent-nodemap (rust !)
1166 persistent-nodemap (rust !)
1167 revlogv1
1167 revlogv1
1168 sparserevlog
1168 sparserevlog
1169 store
1169 store
1170
1170
1171 $ hg debugupgraderepo --run
1171 $ hg debugupgraderepo --run
1172 nothing to do
1172 nothing to do
1173 $ cat .hg/requires
1173 $ cat .hg/requires
1174 dotencode
1174 dotencode
1175 fncache
1175 fncache
1176 generaldelta
1176 generaldelta
1177 largefiles
1177 largefiles
1178 persistent-nodemap (rust !)
1178 persistent-nodemap (rust !)
1179 revlogv1
1179 revlogv1
1180 sparserevlog
1180 sparserevlog
1181 store
1181 store
1182
1182
1183 $ cat << EOF >> .hg/hgrc
1183 $ cat << EOF >> .hg/hgrc
1184 > [extensions]
1184 > [extensions]
1185 > lfs =
1185 > lfs =
1186 > [lfs]
1186 > [lfs]
1187 > threshold = 10
1187 > threshold = 10
1188 > EOF
1188 > EOF
1189 $ echo '123456789012345' > lfs.bin
1189 $ echo '123456789012345' > lfs.bin
1190 $ hg ci -Am 'lfs.bin'
1190 $ hg ci -Am 'lfs.bin'
1191 adding lfs.bin
1191 adding lfs.bin
1192 $ grep lfs .hg/requires
1192 $ grep lfs .hg/requires
1193 lfs
1193 lfs
1194 $ find .hg/store/lfs -type f
1194 $ find .hg/store/lfs -type f
1195 .hg/store/lfs/objects/d0/beab232adff5ba365880366ad30b1edb85c4c5372442b5d2fe27adc96d653f
1195 .hg/store/lfs/objects/d0/beab232adff5ba365880366ad30b1edb85c4c5372442b5d2fe27adc96d653f
1196
1196
1197 $ hg debugupgraderepo --run
1197 $ hg debugupgraderepo --run
1198 nothing to do
1198 nothing to do
1199
1199
1200 $ grep lfs .hg/requires
1200 $ grep lfs .hg/requires
1201 lfs
1201 lfs
1202 $ find .hg/store/lfs -type f
1202 $ find .hg/store/lfs -type f
1203 .hg/store/lfs/objects/d0/beab232adff5ba365880366ad30b1edb85c4c5372442b5d2fe27adc96d653f
1203 .hg/store/lfs/objects/d0/beab232adff5ba365880366ad30b1edb85c4c5372442b5d2fe27adc96d653f
1204 $ hg verify
1204 $ hg verify
1205 checking changesets
1205 checking changesets
1206 checking manifests
1206 checking manifests
1207 crosschecking files in changesets and manifests
1207 crosschecking files in changesets and manifests
1208 checking files
1208 checking files
1209 checked 2 changesets with 2 changes to 2 files
1209 checked 2 changesets with 2 changes to 2 files
1210 $ hg debugdata lfs.bin 0
1210 $ hg debugdata lfs.bin 0
1211 version https://git-lfs.github.com/spec/v1
1211 version https://git-lfs.github.com/spec/v1
1212 oid sha256:d0beab232adff5ba365880366ad30b1edb85c4c5372442b5d2fe27adc96d653f
1212 oid sha256:d0beab232adff5ba365880366ad30b1edb85c4c5372442b5d2fe27adc96d653f
1213 size 16
1213 size 16
1214 x-is-binary 0
1214 x-is-binary 0
1215
1215
1216 $ cd ..
1216 $ cd ..
1217
1217
1218 repository config is taken in account
1218 repository config is taken in account
1219 -------------------------------------
1219 -------------------------------------
1220
1220
1221 $ cat << EOF >> $HGRCPATH
1221 $ cat << EOF >> $HGRCPATH
1222 > [format]
1222 > [format]
1223 > maxchainlen = 1
1223 > maxchainlen = 1
1224 > EOF
1224 > EOF
1225
1225
1226 $ hg init localconfig
1226 $ hg init localconfig
1227 $ cd localconfig
1227 $ cd localconfig
1228 $ cat << EOF > file
1228 $ cat << EOF > file
1229 > some content
1229 > some content
1230 > with some length
1230 > with some length
1231 > to make sure we get a delta
1231 > to make sure we get a delta
1232 > after changes
1232 > after changes
1233 > very long
1233 > very long
1234 > very long
1234 > very long
1235 > very long
1235 > very long
1236 > very long
1236 > very long
1237 > very long
1237 > very long
1238 > very long
1238 > very long
1239 > very long
1239 > very long
1240 > very long
1240 > very long
1241 > very long
1241 > very long
1242 > very long
1242 > very long
1243 > very long
1243 > very long
1244 > EOF
1244 > EOF
1245 $ hg -q commit -A -m A
1245 $ hg -q commit -A -m A
1246 $ echo "new line" >> file
1246 $ echo "new line" >> file
1247 $ hg -q commit -m B
1247 $ hg -q commit -m B
1248 $ echo "new line" >> file
1248 $ echo "new line" >> file
1249 $ hg -q commit -m C
1249 $ hg -q commit -m C
1250
1250
1251 $ cat << EOF >> .hg/hgrc
1251 $ cat << EOF >> .hg/hgrc
1252 > [format]
1252 > [format]
1253 > maxchainlen = 9001
1253 > maxchainlen = 9001
1254 > EOF
1254 > EOF
1255 $ hg config format
1255 $ hg config format
1256 format.revlog-compression=$BUNDLE2_COMPRESSIONS$
1256 format.revlog-compression=$BUNDLE2_COMPRESSIONS$
1257 format.maxchainlen=9001
1257 format.maxchainlen=9001
1258 $ hg debugdeltachain file
1258 $ hg debugdeltachain file
1259 rev chain# chainlen prev delta size rawsize chainsize ratio lindist extradist extraratio readsize largestblk rddensity srchunks
1259 rev chain# chainlen prev delta size rawsize chainsize ratio lindist extradist extraratio readsize largestblk rddensity srchunks
1260 0 1 1 -1 base 77 182 77 0.42308 77 0 0.00000 77 77 1.00000 1
1260 0 1 1 -1 base 77 182 77 0.42308 77 0 0.00000 77 77 1.00000 1
1261 1 1 2 0 p1 21 191 98 0.51309 98 0 0.00000 98 98 1.00000 1
1261 1 1 2 0 p1 21 191 98 0.51309 98 0 0.00000 98 98 1.00000 1
1262 2 1 2 0 other 30 200 107 0.53500 128 21 0.19626 128 128 0.83594 1
1262 2 1 2 0 other 30 200 107 0.53500 128 21 0.19626 128 128 0.83594 1
1263
1263
1264 $ hg debugupgraderepo --run --optimize 're-delta-all'
1264 $ hg debugupgraderepo --run --optimize 're-delta-all'
1265 upgrade will perform the following actions:
1265 upgrade will perform the following actions:
1266
1266
1267 requirements
1267 requirements
1268 preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
1268 preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
1269 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
1269 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
1270
1270
1271 optimisations: re-delta-all
1271 optimisations: re-delta-all
1272
1272
1273 re-delta-all
1273 re-delta-all
1274 deltas within internal storage will be fully recomputed; this will likely drastically slow down execution time
1274 deltas within internal storage will be fully recomputed; this will likely drastically slow down execution time
1275
1275
1276 processed revlogs:
1276 processed revlogs:
1277 - all-filelogs
1277 - all-filelogs
1278 - changelog
1278 - changelog
1279 - manifest
1279 - manifest
1280
1280
1281 beginning upgrade...
1281 beginning upgrade...
1282 repository locked and read-only
1282 repository locked and read-only
1283 creating temporary repository to stage upgraded data: $TESTTMP/localconfig/.hg/upgrade.* (glob)
1283 creating temporary repository to stage upgraded data: $TESTTMP/localconfig/.hg/upgrade.* (glob)
1284 (it is safe to interrupt this process any time before data migration completes)
1284 (it is safe to interrupt this process any time before data migration completes)
1285 migrating 9 total revisions (3 in filelogs, 3 in manifests, 3 in changelog)
1285 migrating 9 total revisions (3 in filelogs, 3 in manifests, 3 in changelog)
1286 migrating 1019 bytes in store; 882 bytes tracked data
1286 migrating 1019 bytes in store; 882 bytes tracked data
1287 migrating 1 filelogs containing 3 revisions (320 bytes in store; 573 bytes tracked data)
1287 migrating 1 filelogs containing 3 revisions (320 bytes in store; 573 bytes tracked data)
1288 finished migrating 3 filelog revisions across 1 filelogs; change in size: -9 bytes
1288 finished migrating 3 filelog revisions across 1 filelogs; change in size: -9 bytes
1289 migrating 1 manifests containing 3 revisions (333 bytes in store; 138 bytes tracked data)
1289 migrating 1 manifests containing 3 revisions (333 bytes in store; 138 bytes tracked data)
1290 finished migrating 3 manifest revisions across 1 manifests; change in size: 0 bytes
1290 finished migrating 3 manifest revisions across 1 manifests; change in size: 0 bytes
1291 migrating changelog containing 3 revisions (366 bytes in store; 171 bytes tracked data)
1291 migrating changelog containing 3 revisions (366 bytes in store; 171 bytes tracked data)
1292 finished migrating 3 changelog revisions; change in size: 0 bytes
1292 finished migrating 3 changelog revisions; change in size: 0 bytes
1293 finished migrating 9 total revisions; total change in store size: -9 bytes
1293 finished migrating 9 total revisions; total change in store size: -9 bytes
1294 copying phaseroots
1294 copying phaseroots
1295 data fully upgraded in a temporary repository
1295 data fully upgraded in a temporary repository
1296 marking source repository as being upgraded; clients will be unable to read from repository
1296 marking source repository as being upgraded; clients will be unable to read from repository
1297 starting in-place swap of repository data
1297 starting in-place swap of repository data
1298 replaced files will be backed up at $TESTTMP/localconfig/.hg/upgradebackup.* (glob)
1298 replaced files will be backed up at $TESTTMP/localconfig/.hg/upgradebackup.* (glob)
1299 replacing store...
1299 replacing store...
1300 store replacement complete; repository was inconsistent for *s (glob)
1300 store replacement complete; repository was inconsistent for *s (glob)
1301 finalizing requirements file and making repository readable again
1301 finalizing requirements file and making repository readable again
1302 removing temporary repository $TESTTMP/localconfig/.hg/upgrade.* (glob)
1302 removing temporary repository $TESTTMP/localconfig/.hg/upgrade.* (glob)
1303 copy of old repository backed up at $TESTTMP/localconfig/.hg/upgradebackup.* (glob)
1303 copy of old repository backed up at $TESTTMP/localconfig/.hg/upgradebackup.* (glob)
1304 the old repository will not be deleted; remove it to free up disk space once the upgraded repository is verified
1304 the old repository will not be deleted; remove it to free up disk space once the upgraded repository is verified
1305 $ hg debugdeltachain file
1305 $ hg debugdeltachain file
1306 rev chain# chainlen prev delta size rawsize chainsize ratio lindist extradist extraratio readsize largestblk rddensity srchunks
1306 rev chain# chainlen prev delta size rawsize chainsize ratio lindist extradist extraratio readsize largestblk rddensity srchunks
1307 0 1 1 -1 base 77 182 77 0.42308 77 0 0.00000 77 77 1.00000 1
1307 0 1 1 -1 base 77 182 77 0.42308 77 0 0.00000 77 77 1.00000 1
1308 1 1 2 0 p1 21 191 98 0.51309 98 0 0.00000 98 98 1.00000 1
1308 1 1 2 0 p1 21 191 98 0.51309 98 0 0.00000 98 98 1.00000 1
1309 2 1 3 1 p1 21 200 119 0.59500 119 0 0.00000 119 119 1.00000 1
1309 2 1 3 1 p1 21 200 119 0.59500 119 0 0.00000 119 119 1.00000 1
1310 $ cd ..
1310 $ cd ..
1311
1311
1312 $ cat << EOF >> $HGRCPATH
1312 $ cat << EOF >> $HGRCPATH
1313 > [format]
1313 > [format]
1314 > maxchainlen = 9001
1314 > maxchainlen = 9001
1315 > EOF
1315 > EOF
1316
1316
1317 Check upgrading a sparse-revlog repository
1317 Check upgrading a sparse-revlog repository
1318 ---------------------------------------
1318 ---------------------------------------
1319
1319
1320 $ hg init sparserevlogrepo --config format.sparse-revlog=no
1320 $ hg init sparserevlogrepo --config format.sparse-revlog=no
1321 $ cd sparserevlogrepo
1321 $ cd sparserevlogrepo
1322 $ touch foo
1322 $ touch foo
1323 $ hg add foo
1323 $ hg add foo
1324 $ hg -q commit -m "foo"
1324 $ hg -q commit -m "foo"
1325 $ cat .hg/requires
1325 $ cat .hg/requires
1326 dotencode
1326 dotencode
1327 fncache
1327 fncache
1328 generaldelta
1328 generaldelta
1329 persistent-nodemap (rust !)
1329 persistent-nodemap (rust !)
1330 revlogv1
1330 revlogv1
1331 store
1331 store
1332
1332
1333 Check that we can add the sparse-revlog format requirement
1333 Check that we can add the sparse-revlog format requirement
1334 $ hg --config format.sparse-revlog=yes debugupgraderepo --run --quiet
1334 $ hg --config format.sparse-revlog=yes debugupgraderepo --run --quiet
1335 upgrade will perform the following actions:
1335 upgrade will perform the following actions:
1336
1336
1337 requirements
1337 requirements
1338 preserved: dotencode, fncache, generaldelta, revlogv1, store (no-rust !)
1338 preserved: dotencode, fncache, generaldelta, revlogv1, store (no-rust !)
1339 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, store (rust !)
1339 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, store (rust !)
1340 added: sparserevlog
1340 added: sparserevlog
1341
1341
1342 processed revlogs:
1342 processed revlogs:
1343 - all-filelogs
1343 - all-filelogs
1344 - changelog
1344 - changelog
1345 - manifest
1345 - manifest
1346
1346
1347 $ cat .hg/requires
1347 $ cat .hg/requires
1348 dotencode
1348 dotencode
1349 fncache
1349 fncache
1350 generaldelta
1350 generaldelta
1351 persistent-nodemap (rust !)
1351 persistent-nodemap (rust !)
1352 revlogv1
1352 revlogv1
1353 sparserevlog
1353 sparserevlog
1354 store
1354 store
1355
1355
1356 Check that we can remove the sparse-revlog format requirement
1356 Check that we can remove the sparse-revlog format requirement
1357 $ hg --config format.sparse-revlog=no debugupgraderepo --run --quiet
1357 $ hg --config format.sparse-revlog=no debugupgraderepo --run --quiet
1358 upgrade will perform the following actions:
1358 upgrade will perform the following actions:
1359
1359
1360 requirements
1360 requirements
1361 preserved: dotencode, fncache, generaldelta, revlogv1, store (no-rust !)
1361 preserved: dotencode, fncache, generaldelta, revlogv1, store (no-rust !)
1362 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, store (rust !)
1362 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, store (rust !)
1363 removed: sparserevlog
1363 removed: sparserevlog
1364
1364
1365 processed revlogs:
1365 processed revlogs:
1366 - all-filelogs
1366 - all-filelogs
1367 - changelog
1367 - changelog
1368 - manifest
1368 - manifest
1369
1369
1370 $ cat .hg/requires
1370 $ cat .hg/requires
1371 dotencode
1371 dotencode
1372 fncache
1372 fncache
1373 generaldelta
1373 generaldelta
1374 persistent-nodemap (rust !)
1374 persistent-nodemap (rust !)
1375 revlogv1
1375 revlogv1
1376 store
1376 store
1377
1377
1378 #if zstd
1378 #if zstd
1379
1379
1380 Check upgrading to a zstd revlog
1380 Check upgrading to a zstd revlog
1381 --------------------------------
1381 --------------------------------
1382
1382
1383 upgrade
1383 upgrade
1384
1384
1385 $ hg --config format.revlog-compression=zstd debugupgraderepo --run --no-backup --quiet
1385 $ hg --config format.revlog-compression=zstd debugupgraderepo --run --no-backup --quiet
1386 upgrade will perform the following actions:
1386 upgrade will perform the following actions:
1387
1387
1388 requirements
1388 requirements
1389 preserved: dotencode, fncache, generaldelta, revlogv1, store (no-rust !)
1389 preserved: dotencode, fncache, generaldelta, revlogv1, store (no-rust !)
1390 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, store (rust !)
1390 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, store (rust !)
1391 added: revlog-compression-zstd, sparserevlog
1391 added: revlog-compression-zstd, sparserevlog
1392
1392
1393 processed revlogs:
1393 processed revlogs:
1394 - all-filelogs
1394 - all-filelogs
1395 - changelog
1395 - changelog
1396 - manifest
1396 - manifest
1397
1397
1398 $ hg debugformat -v
1398 $ hg debugformat -v
1399 format-variant repo config default
1399 format-variant repo config default
1400 fncache: yes yes yes
1400 fncache: yes yes yes
1401 dirstate-v2: no no no
1401 dirstate-v2: no no no
1402 dotencode: yes yes yes
1402 dotencode: yes yes yes
1403 generaldelta: yes yes yes
1403 generaldelta: yes yes yes
1404 share-safe: no no no
1404 share-safe: no no no
1405 sparserevlog: yes yes yes
1405 sparserevlog: yes yes yes
1406 persistent-nodemap: no no no (no-rust !)
1406 persistent-nodemap: no no no (no-rust !)
1407 persistent-nodemap: yes yes no (rust !)
1407 persistent-nodemap: yes yes no (rust !)
1408 copies-sdc: no no no
1408 copies-sdc: no no no
1409 revlog-v2: no no no
1409 revlog-v2: no no no
1410 changelog-v2: no no no
1410 changelog-v2: no no no
1411 plain-cl-delta: yes yes yes
1411 plain-cl-delta: yes yes yes
1412 compression: zlib zlib zlib (no-zstd !)
1412 compression: zlib zlib zlib (no-zstd !)
1413 compression: zstd zlib zstd (zstd !)
1413 compression: zstd zlib zstd (zstd !)
1414 compression-level: default default default
1414 compression-level: default default default
1415 $ cat .hg/requires
1415 $ cat .hg/requires
1416 dotencode
1416 dotencode
1417 fncache
1417 fncache
1418 generaldelta
1418 generaldelta
1419 persistent-nodemap (rust !)
1419 persistent-nodemap (rust !)
1420 revlog-compression-zstd
1420 revlog-compression-zstd
1421 revlogv1
1421 revlogv1
1422 sparserevlog
1422 sparserevlog
1423 store
1423 store
1424
1424
1425 downgrade
1425 downgrade
1426
1426
1427 $ hg debugupgraderepo --run --no-backup --quiet
1427 $ hg debugupgraderepo --run --no-backup --quiet
1428 upgrade will perform the following actions:
1428 upgrade will perform the following actions:
1429
1429
1430 requirements
1430 requirements
1431 preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
1431 preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
1432 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
1432 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
1433 removed: revlog-compression-zstd
1433 removed: revlog-compression-zstd
1434
1434
1435 processed revlogs:
1435 processed revlogs:
1436 - all-filelogs
1436 - all-filelogs
1437 - changelog
1437 - changelog
1438 - manifest
1438 - manifest
1439
1439
1440 $ hg debugformat -v
1440 $ hg debugformat -v
1441 format-variant repo config default
1441 format-variant repo config default
1442 fncache: yes yes yes
1442 fncache: yes yes yes
1443 dirstate-v2: no no no
1443 dirstate-v2: no no no
1444 dotencode: yes yes yes
1444 dotencode: yes yes yes
1445 generaldelta: yes yes yes
1445 generaldelta: yes yes yes
1446 share-safe: no no no
1446 share-safe: no no no
1447 sparserevlog: yes yes yes
1447 sparserevlog: yes yes yes
1448 persistent-nodemap: no no no (no-rust !)
1448 persistent-nodemap: no no no (no-rust !)
1449 persistent-nodemap: yes yes no (rust !)
1449 persistent-nodemap: yes yes no (rust !)
1450 copies-sdc: no no no
1450 copies-sdc: no no no
1451 revlog-v2: no no no
1451 revlog-v2: no no no
1452 changelog-v2: no no no
1452 changelog-v2: no no no
1453 plain-cl-delta: yes yes yes
1453 plain-cl-delta: yes yes yes
1454 compression: zlib zlib zlib (no-zstd !)
1454 compression: zlib zlib zlib (no-zstd !)
1455 compression: zlib zlib zstd (zstd !)
1455 compression: zlib zlib zstd (zstd !)
1456 compression-level: default default default
1456 compression-level: default default default
1457 $ cat .hg/requires
1457 $ cat .hg/requires
1458 dotencode
1458 dotencode
1459 fncache
1459 fncache
1460 generaldelta
1460 generaldelta
1461 persistent-nodemap (rust !)
1461 persistent-nodemap (rust !)
1462 revlogv1
1462 revlogv1
1463 sparserevlog
1463 sparserevlog
1464 store
1464 store
1465
1465
1466 upgrade from hgrc
1466 upgrade from hgrc
1467
1467
1468 $ cat >> .hg/hgrc << EOF
1468 $ cat >> .hg/hgrc << EOF
1469 > [format]
1469 > [format]
1470 > revlog-compression=zstd
1470 > revlog-compression=zstd
1471 > EOF
1471 > EOF
1472 $ hg debugupgraderepo --run --no-backup --quiet
1472 $ hg debugupgraderepo --run --no-backup --quiet
1473 upgrade will perform the following actions:
1473 upgrade will perform the following actions:
1474
1474
1475 requirements
1475 requirements
1476 preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
1476 preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
1477 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
1477 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
1478 added: revlog-compression-zstd
1478 added: revlog-compression-zstd
1479
1479
1480 processed revlogs:
1480 processed revlogs:
1481 - all-filelogs
1481 - all-filelogs
1482 - changelog
1482 - changelog
1483 - manifest
1483 - manifest
1484
1484
1485 $ hg debugformat -v
1485 $ hg debugformat -v
1486 format-variant repo config default
1486 format-variant repo config default
1487 fncache: yes yes yes
1487 fncache: yes yes yes
1488 dirstate-v2: no no no
1488 dirstate-v2: no no no
1489 dotencode: yes yes yes
1489 dotencode: yes yes yes
1490 generaldelta: yes yes yes
1490 generaldelta: yes yes yes
1491 share-safe: no no no
1491 share-safe: no no no
1492 sparserevlog: yes yes yes
1492 sparserevlog: yes yes yes
1493 persistent-nodemap: no no no (no-rust !)
1493 persistent-nodemap: no no no (no-rust !)
1494 persistent-nodemap: yes yes no (rust !)
1494 persistent-nodemap: yes yes no (rust !)
1495 copies-sdc: no no no
1495 copies-sdc: no no no
1496 revlog-v2: no no no
1496 revlog-v2: no no no
1497 changelog-v2: no no no
1497 changelog-v2: no no no
1498 plain-cl-delta: yes yes yes
1498 plain-cl-delta: yes yes yes
1499 compression: zlib zlib zlib (no-zstd !)
1499 compression: zlib zlib zlib (no-zstd !)
1500 compression: zstd zstd zstd (zstd !)
1500 compression: zstd zstd zstd (zstd !)
1501 compression-level: default default default
1501 compression-level: default default default
1502 $ cat .hg/requires
1502 $ cat .hg/requires
1503 dotencode
1503 dotencode
1504 fncache
1504 fncache
1505 generaldelta
1505 generaldelta
1506 persistent-nodemap (rust !)
1506 persistent-nodemap (rust !)
1507 revlog-compression-zstd
1507 revlog-compression-zstd
1508 revlogv1
1508 revlogv1
1509 sparserevlog
1509 sparserevlog
1510 store
1510 store
1511
1511
1512 #endif
1512 #endif
1513
1513
1514 Check upgrading to a revlog format supporting sidedata
1514 Check upgrading to a revlog format supporting sidedata
1515 ------------------------------------------------------
1515 ------------------------------------------------------
1516
1516
1517 upgrade
1517 upgrade
1518
1518
1519 $ hg debugsidedata -c 0
1519 $ hg debugsidedata -c 0
1520 $ hg --config experimental.revlogv2=enable-unstable-format-and-corrupt-my-data debugupgraderepo --run --no-backup --config "extensions.sidedata=$TESTDIR/testlib/ext-sidedata.py" --quiet
1520 $ hg --config experimental.revlogv2=enable-unstable-format-and-corrupt-my-data debugupgraderepo --run --no-backup --config "extensions.sidedata=$TESTDIR/testlib/ext-sidedata.py" --quiet
1521 upgrade will perform the following actions:
1521 upgrade will perform the following actions:
1522
1522
1523 requirements
1523 requirements
1524 preserved: dotencode, fncache, generaldelta, store (no-zstd !)
1524 preserved: dotencode, fncache, generaldelta, store (no-zstd !)
1525 preserved: dotencode, fncache, generaldelta, revlog-compression-zstd, sparserevlog, store (zstd no-rust !)
1525 preserved: dotencode, fncache, generaldelta, revlog-compression-zstd, sparserevlog, store (zstd no-rust !)
1526 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlog-compression-zstd, sparserevlog, store (rust !)
1526 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlog-compression-zstd, sparserevlog, store (rust !)
1527 removed: revlogv1
1527 removed: revlogv1
1528 added: exp-revlogv2.2 (zstd !)
1528 added: exp-revlogv2.2 (zstd !)
1529 added: exp-revlogv2.2, sparserevlog (no-zstd !)
1529 added: exp-revlogv2.2, sparserevlog (no-zstd !)
1530
1530
1531 processed revlogs:
1531 processed revlogs:
1532 - all-filelogs
1532 - all-filelogs
1533 - changelog
1533 - changelog
1534 - manifest
1534 - manifest
1535
1535
1536 $ hg debugformat -v
1536 $ hg debugformat -v
1537 format-variant repo config default
1537 format-variant repo config default
1538 fncache: yes yes yes
1538 fncache: yes yes yes
1539 dirstate-v2: no no no
1539 dirstate-v2: no no no
1540 dotencode: yes yes yes
1540 dotencode: yes yes yes
1541 generaldelta: yes yes yes
1541 generaldelta: yes yes yes
1542 share-safe: no no no
1542 share-safe: no no no
1543 sparserevlog: yes yes yes
1543 sparserevlog: yes yes yes
1544 persistent-nodemap: no no no (no-rust !)
1544 persistent-nodemap: no no no (no-rust !)
1545 persistent-nodemap: yes yes no (rust !)
1545 persistent-nodemap: yes yes no (rust !)
1546 copies-sdc: no no no
1546 copies-sdc: no no no
1547 revlog-v2: yes no no
1547 revlog-v2: yes no no
1548 changelog-v2: no no no
1548 changelog-v2: no no no
1549 plain-cl-delta: yes yes yes
1549 plain-cl-delta: yes yes yes
1550 compression: zlib zlib zlib (no-zstd !)
1550 compression: zlib zlib zlib (no-zstd !)
1551 compression: zstd zstd zstd (zstd !)
1551 compression: zstd zstd zstd (zstd !)
1552 compression-level: default default default
1552 compression-level: default default default
1553 $ cat .hg/requires
1553 $ cat .hg/requires
1554 dotencode
1554 dotencode
1555 exp-revlogv2.2
1555 exp-revlogv2.2
1556 fncache
1556 fncache
1557 generaldelta
1557 generaldelta
1558 persistent-nodemap (rust !)
1558 persistent-nodemap (rust !)
1559 revlog-compression-zstd (zstd !)
1559 revlog-compression-zstd (zstd !)
1560 sparserevlog
1560 sparserevlog
1561 store
1561 store
1562 $ hg debugsidedata -c 0
1562 $ hg debugsidedata -c 0
1563 2 sidedata entries
1563 2 sidedata entries
1564 entry-0001 size 4
1564 entry-0001 size 4
1565 entry-0002 size 32
1565 entry-0002 size 32
1566
1566
1567 downgrade
1567 downgrade
1568
1568
1569 $ hg debugupgraderepo --config experimental.revlogv2=no --run --no-backup --quiet
1569 $ hg debugupgraderepo --config experimental.revlogv2=no --run --no-backup --quiet
1570 upgrade will perform the following actions:
1570 upgrade will perform the following actions:
1571
1571
1572 requirements
1572 requirements
1573 preserved: dotencode, fncache, generaldelta, sparserevlog, store (no-zstd !)
1573 preserved: dotencode, fncache, generaldelta, sparserevlog, store (no-zstd !)
1574 preserved: dotencode, fncache, generaldelta, revlog-compression-zstd, sparserevlog, store (zstd no-rust !)
1574 preserved: dotencode, fncache, generaldelta, revlog-compression-zstd, sparserevlog, store (zstd no-rust !)
1575 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlog-compression-zstd, sparserevlog, store (rust !)
1575 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlog-compression-zstd, sparserevlog, store (rust !)
1576 removed: exp-revlogv2.2
1576 removed: exp-revlogv2.2
1577 added: revlogv1
1577 added: revlogv1
1578
1578
1579 processed revlogs:
1579 processed revlogs:
1580 - all-filelogs
1580 - all-filelogs
1581 - changelog
1581 - changelog
1582 - manifest
1582 - manifest
1583
1583
1584 $ hg debugformat -v
1584 $ hg debugformat -v
1585 format-variant repo config default
1585 format-variant repo config default
1586 fncache: yes yes yes
1586 fncache: yes yes yes
1587 dirstate-v2: no no no
1587 dirstate-v2: no no no
1588 dotencode: yes yes yes
1588 dotencode: yes yes yes
1589 generaldelta: yes yes yes
1589 generaldelta: yes yes yes
1590 share-safe: no no no
1590 share-safe: no no no
1591 sparserevlog: yes yes yes
1591 sparserevlog: yes yes yes
1592 persistent-nodemap: no no no (no-rust !)
1592 persistent-nodemap: no no no (no-rust !)
1593 persistent-nodemap: yes yes no (rust !)
1593 persistent-nodemap: yes yes no (rust !)
1594 copies-sdc: no no no
1594 copies-sdc: no no no
1595 revlog-v2: no no no
1595 revlog-v2: no no no
1596 changelog-v2: no no no
1596 changelog-v2: no no no
1597 plain-cl-delta: yes yes yes
1597 plain-cl-delta: yes yes yes
1598 compression: zlib zlib zlib (no-zstd !)
1598 compression: zlib zlib zlib (no-zstd !)
1599 compression: zstd zstd zstd (zstd !)
1599 compression: zstd zstd zstd (zstd !)
1600 compression-level: default default default
1600 compression-level: default default default
1601 $ cat .hg/requires
1601 $ cat .hg/requires
1602 dotencode
1602 dotencode
1603 fncache
1603 fncache
1604 generaldelta
1604 generaldelta
1605 persistent-nodemap (rust !)
1605 persistent-nodemap (rust !)
1606 revlog-compression-zstd (zstd !)
1606 revlog-compression-zstd (zstd !)
1607 revlogv1
1607 revlogv1
1608 sparserevlog
1608 sparserevlog
1609 store
1609 store
1610 $ hg debugsidedata -c 0
1610 $ hg debugsidedata -c 0
1611
1611
1612 upgrade from hgrc
1612 upgrade from hgrc
1613
1613
1614 $ cat >> .hg/hgrc << EOF
1614 $ cat >> .hg/hgrc << EOF
1615 > [experimental]
1615 > [experimental]
1616 > revlogv2=enable-unstable-format-and-corrupt-my-data
1616 > revlogv2=enable-unstable-format-and-corrupt-my-data
1617 > EOF
1617 > EOF
1618 $ hg debugupgraderepo --run --no-backup --quiet
1618 $ hg debugupgraderepo --run --no-backup --quiet
1619 upgrade will perform the following actions:
1619 upgrade will perform the following actions:
1620
1620
1621 requirements
1621 requirements
1622 preserved: dotencode, fncache, generaldelta, sparserevlog, store (no-zstd !)
1622 preserved: dotencode, fncache, generaldelta, sparserevlog, store (no-zstd !)
1623 preserved: dotencode, fncache, generaldelta, revlog-compression-zstd, sparserevlog, store (zstd no-rust !)
1623 preserved: dotencode, fncache, generaldelta, revlog-compression-zstd, sparserevlog, store (zstd no-rust !)
1624 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlog-compression-zstd, sparserevlog, store (rust !)
1624 preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlog-compression-zstd, sparserevlog, store (rust !)
1625 removed: revlogv1
1625 removed: revlogv1
1626 added: exp-revlogv2.2
1626 added: exp-revlogv2.2
1627
1627
1628 processed revlogs:
1628 processed revlogs:
1629 - all-filelogs
1629 - all-filelogs
1630 - changelog
1630 - changelog
1631 - manifest
1631 - manifest
1632
1632
1633 $ hg debugformat -v
1633 $ hg debugformat -v
1634 format-variant repo config default
1634 format-variant repo config default
1635 fncache: yes yes yes
1635 fncache: yes yes yes
1636 dirstate-v2: no no no
1636 dirstate-v2: no no no
1637 dotencode: yes yes yes
1637 dotencode: yes yes yes
1638 generaldelta: yes yes yes
1638 generaldelta: yes yes yes
1639 share-safe: no no no
1639 share-safe: no no no
1640 sparserevlog: yes yes yes
1640 sparserevlog: yes yes yes
1641 persistent-nodemap: no no no (no-rust !)
1641 persistent-nodemap: no no no (no-rust !)
1642 persistent-nodemap: yes yes no (rust !)
1642 persistent-nodemap: yes yes no (rust !)
1643 copies-sdc: no no no
1643 copies-sdc: no no no
1644 revlog-v2: yes yes no
1644 revlog-v2: yes yes no
1645 changelog-v2: no no no
1645 changelog-v2: no no no
1646 plain-cl-delta: yes yes yes
1646 plain-cl-delta: yes yes yes
1647 compression: zlib zlib zlib (no-zstd !)
1647 compression: zlib zlib zlib (no-zstd !)
1648 compression: zstd zstd zstd (zstd !)
1648 compression: zstd zstd zstd (zstd !)
1649 compression-level: default default default
1649 compression-level: default default default
1650 $ cat .hg/requires
1650 $ cat .hg/requires
1651 dotencode
1651 dotencode
1652 exp-revlogv2.2
1652 exp-revlogv2.2
1653 fncache
1653 fncache
1654 generaldelta
1654 generaldelta
1655 persistent-nodemap (rust !)
1655 persistent-nodemap (rust !)
1656 revlog-compression-zstd (zstd !)
1656 revlog-compression-zstd (zstd !)
1657 sparserevlog
1657 sparserevlog
1658 store
1658 store
1659 $ hg debugsidedata -c 0
1659 $ hg debugsidedata -c 0
1660
1660
1661 Demonstrate that nothing to perform upgrade will still run all the way through
1661 Demonstrate that nothing to perform upgrade will still run all the way through
1662
1662
1663 $ hg debugupgraderepo --run
1663 $ hg debugupgraderepo --run
1664 nothing to do
1664 nothing to do
1665
1665
1666 #if no-rust
1666 #if no-rust
1667
1667
1668 $ cat << EOF >> $HGRCPATH
1668 $ cat << EOF >> $HGRCPATH
1669 > [storage]
1669 > [storage]
1670 > dirstate-v2.slow-path = allow
1670 > dirstate-v2.slow-path = allow
1671 > EOF
1671 > EOF
1672
1672
1673 #endif
1673 #endif
1674
1674
1675 Upgrade to dirstate-v2
1675 Upgrade to dirstate-v2
1676
1676
1677 $ hg debugformat -v --config format.exp-rc-dirstate-v2=1 | grep dirstate-v2
1677 $ hg debugformat -v --config format.exp-rc-dirstate-v2=1 | grep dirstate-v2
1678 dirstate-v2: no yes no
1678 dirstate-v2: no yes no
1679 $ hg debugupgraderepo --config format.exp-rc-dirstate-v2=1 --run
1679 $ hg debugupgraderepo --config format.exp-rc-dirstate-v2=1 --run
1680 upgrade will perform the following actions:
1680 upgrade will perform the following actions:
1681
1681
1682 requirements
1682 requirements
1683 preserved: * (glob)
1683 preserved: * (glob)
1684 added: dirstate-v2
1684 added: dirstate-v2
1685
1685
1686 dirstate-v2
1686 dirstate-v2
1687 "hg status" will be faster
1687 "hg status" will be faster
1688
1688
1689 no revlogs to process
1689 no revlogs to process
1690
1690
1691 beginning upgrade...
1691 beginning upgrade...
1692 repository locked and read-only
1692 repository locked and read-only
1693 creating temporary repository to stage upgraded data: $TESTTMP/sparserevlogrepo/.hg/upgrade.* (glob)
1693 creating temporary repository to stage upgraded data: $TESTTMP/sparserevlogrepo/.hg/upgrade.* (glob)
1694 (it is safe to interrupt this process any time before data migration completes)
1694 (it is safe to interrupt this process any time before data migration completes)
1695 upgrading to dirstate-v2 from v1
1695 upgrading to dirstate-v2 from v1
1696 replaced files will be backed up at $TESTTMP/sparserevlogrepo/.hg/upgradebackup.* (glob)
1696 replaced files will be backed up at $TESTTMP/sparserevlogrepo/.hg/upgradebackup.* (glob)
1697 removing temporary repository $TESTTMP/sparserevlogrepo/.hg/upgrade.* (glob)
1697 removing temporary repository $TESTTMP/sparserevlogrepo/.hg/upgrade.* (glob)
1698 $ ls .hg/upgradebackup.*/dirstate
1698 $ ls .hg/upgradebackup.*/dirstate
1699 .hg/upgradebackup.*/dirstate (glob)
1699 .hg/upgradebackup.*/dirstate (glob)
1700 $ hg debugformat -v | grep dirstate-v2
1700 $ hg debugformat -v | grep dirstate-v2
1701 dirstate-v2: yes no no
1701 dirstate-v2: yes no no
1702 $ hg status
1702 $ hg status
1703 $ dd bs=12 count=1 if=.hg/dirstate 2> /dev/null
1703 $ dd bs=12 count=1 if=.hg/dirstate 2> /dev/null
1704 dirstate-v2
1704 dirstate-v2
1705
1705
1706 Downgrade from dirstate-v2
1706 Downgrade from dirstate-v2
1707
1707
1708 $ hg debugupgraderepo --run
1708 $ hg debugupgraderepo --run
1709 upgrade will perform the following actions:
1709 upgrade will perform the following actions:
1710
1710
1711 requirements
1711 requirements
1712 preserved: * (glob)
1712 preserved: * (glob)
1713 removed: dirstate-v2
1713 removed: dirstate-v2
1714
1714
1715 no revlogs to process
1715 no revlogs to process
1716
1716
1717 beginning upgrade...
1717 beginning upgrade...
1718 repository locked and read-only
1718 repository locked and read-only
1719 creating temporary repository to stage upgraded data: $TESTTMP/sparserevlogrepo/.hg/upgrade.* (glob)
1719 creating temporary repository to stage upgraded data: $TESTTMP/sparserevlogrepo/.hg/upgrade.* (glob)
1720 (it is safe to interrupt this process any time before data migration completes)
1720 (it is safe to interrupt this process any time before data migration completes)
1721 downgrading from dirstate-v2 to v1
1721 downgrading from dirstate-v2 to v1
1722 replaced files will be backed up at $TESTTMP/sparserevlogrepo/.hg/upgradebackup.* (glob)
1722 replaced files will be backed up at $TESTTMP/sparserevlogrepo/.hg/upgradebackup.* (glob)
1723 removing temporary repository $TESTTMP/sparserevlogrepo/.hg/upgrade.* (glob)
1723 removing temporary repository $TESTTMP/sparserevlogrepo/.hg/upgrade.* (glob)
1724 $ hg debugformat -v | grep dirstate-v2
1724 $ hg debugformat -v | grep dirstate-v2
1725 dirstate-v2: no no no
1725 dirstate-v2: no no no
1726 $ hg status
1726 $ hg status
1727
1727
1728 $ cd ..
1728 $ cd ..
1729
1729
1730 dirstate-v2: upgrade and downgrade from and empty repository:
1730 dirstate-v2: upgrade and downgrade from and empty repository:
1731 -------------------------------------------------------------
1731 -------------------------------------------------------------
1732
1732
1733 $ hg init --config format.exp-rc-dirstate-v2=no dirstate-v2-empty
1733 $ hg init --config format.exp-rc-dirstate-v2=no dirstate-v2-empty
1734 $ cd dirstate-v2-empty
1734 $ cd dirstate-v2-empty
1735 $ hg debugformat | grep dirstate-v2
1735 $ hg debugformat | grep dirstate-v2
1736 dirstate-v2: no
1736 dirstate-v2: no
1737
1737
1738 upgrade
1738 upgrade
1739
1739
1740 $ hg debugupgraderepo --run --config format.exp-rc-dirstate-v2=yes
1740 $ hg debugupgraderepo --run --config format.exp-rc-dirstate-v2=yes
1741 upgrade will perform the following actions:
1741 upgrade will perform the following actions:
1742
1742
1743 requirements
1743 requirements
1744 preserved: * (glob)
1744 preserved: * (glob)
1745 added: dirstate-v2
1745 added: dirstate-v2
1746
1746
1747 dirstate-v2
1747 dirstate-v2
1748 "hg status" will be faster
1748 "hg status" will be faster
1749
1749
1750 no revlogs to process
1750 no revlogs to process
1751
1751
1752 beginning upgrade...
1752 beginning upgrade...
1753 repository locked and read-only
1753 repository locked and read-only
1754 creating temporary repository to stage upgraded data: $TESTTMP/dirstate-v2-empty/.hg/upgrade.* (glob)
1754 creating temporary repository to stage upgraded data: $TESTTMP/dirstate-v2-empty/.hg/upgrade.* (glob)
1755 (it is safe to interrupt this process any time before data migration completes)
1755 (it is safe to interrupt this process any time before data migration completes)
1756 upgrading to dirstate-v2 from v1
1756 upgrading to dirstate-v2 from v1
1757 replaced files will be backed up at $TESTTMP/dirstate-v2-empty/.hg/upgradebackup.* (glob)
1757 replaced files will be backed up at $TESTTMP/dirstate-v2-empty/.hg/upgradebackup.* (glob)
1758 removing temporary repository $TESTTMP/dirstate-v2-empty/.hg/upgrade.* (glob)
1758 removing temporary repository $TESTTMP/dirstate-v2-empty/.hg/upgrade.* (glob)
1759 $ hg debugformat | grep dirstate-v2
1759 $ hg debugformat | grep dirstate-v2
1760 dirstate-v2: yes
1760 dirstate-v2: yes
1761
1761
1762 downgrade
1762 downgrade
1763
1763
1764 $ hg debugupgraderepo --run --config format.exp-rc-dirstate-v2=no
1764 $ hg debugupgraderepo --run --config format.exp-rc-dirstate-v2=no
1765 upgrade will perform the following actions:
1765 upgrade will perform the following actions:
1766
1766
1767 requirements
1767 requirements
1768 preserved: * (glob)
1768 preserved: * (glob)
1769 removed: dirstate-v2
1769 removed: dirstate-v2
1770
1770
1771 no revlogs to process
1771 no revlogs to process
1772
1772
1773 beginning upgrade...
1773 beginning upgrade...
1774 repository locked and read-only
1774 repository locked and read-only
1775 creating temporary repository to stage upgraded data: $TESTTMP/dirstate-v2-empty/.hg/upgrade.* (glob)
1775 creating temporary repository to stage upgraded data: $TESTTMP/dirstate-v2-empty/.hg/upgrade.* (glob)
1776 (it is safe to interrupt this process any time before data migration completes)
1776 (it is safe to interrupt this process any time before data migration completes)
1777 downgrading from dirstate-v2 to v1
1777 downgrading from dirstate-v2 to v1
1778 replaced files will be backed up at $TESTTMP/dirstate-v2-empty/.hg/upgradebackup.* (glob)
1778 replaced files will be backed up at $TESTTMP/dirstate-v2-empty/.hg/upgradebackup.* (glob)
1779 removing temporary repository $TESTTMP/dirstate-v2-empty/.hg/upgrade.* (glob)
1779 removing temporary repository $TESTTMP/dirstate-v2-empty/.hg/upgrade.* (glob)
1780 $ hg debugformat | grep dirstate-v2
1780 $ hg debugformat | grep dirstate-v2
1781 dirstate-v2: no
1781 dirstate-v2: no
1782
1782
1783 $ cd ..
1783 $ cd ..
General Comments 0
You need to be logged in to leave comments. Login now