comparison tests/test-copies-in-changeset.t @ 45634:9a6b409b8ebc

changing-files: rework the way we store changed files in side-data We need to store new data so this is a good opportunity to rework this fully. 1) We directly store the list of affected file in the side data: * This avoid having to fetch and parse the `files` list in the revision in addition to the sidedata. Making the data more self sufficient. * This work around situation where that `files` field contains wrong information, and open the way to other bug fixing (eg: issue6219) * The format (fixed initial index, sorted files) allow for fast lookup of filename within the structure. * This unify the storage of affected files and copies sources and destination, limiting the number filename stored redundantly. * This prepare for the fact we should drop the `files` as soon as we do any change affecting the revision schema. * This rely on compression to avoid a significant increase of the changelog.d. More testing on this will be done before we freeze the final format. 2) We can store additional data: * The new "merged" field, * A future "salvaged" set recording files that might have been deleted but have were still present in the final result. Differential Revision: https://phab.mercurial-scm.org/D9090
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Tue, 15 Sep 2020 10:55:17 +0200
parents ea9563e9e65a
children f90a5c211251
comparison
equal deleted inserted replaced
45632:7d0e54056586 45634:9a6b409b8ebc
77 p1copies: 0\x00a (esc) 77 p1copies: 0\x00a (esc)
78 1\x00a (esc) 78 1\x00a (esc)
79 2\x00a (esc) 79 2\x00a (esc)
80 #else 80 #else
81 $ hg debugsidedata -c -v -- -1 81 $ hg debugsidedata -c -v -- -1
82 2 sidedata entries 82 1 sidedata entries
83 entry-0010 size 11 83 entry-0014 size 44
84 '0\x00a\n1\x00a\n2\x00a' 84 '\x00\x00\x00\x04\x00\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00\x06\x00\x00\x00\x03\x00\x00\x00\x00\x06\x00\x00\x00\x04\x00\x00\x00\x00abcd'
85 entry-0012 size 5
86 '0\n1\n2'
87 #endif 85 #endif
88 86
89 $ hg showcopies 87 $ hg showcopies
90 a -> b 88 a -> b
91 a -> c 89 a -> c
115 113
116 p1copies: 1\x00b (esc) 114 p1copies: 1\x00b (esc)
117 115
118 #else 116 #else
119 $ hg debugsidedata -c -v -- -1 117 $ hg debugsidedata -c -v -- -1
120 3 sidedata entries 118 1 sidedata entries
121 entry-0010 size 3 119 entry-0014 size 25
122 '1\x00b' 120 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x03\x00\x00\x00\x00bb2'
123 entry-0012 size 1
124 '1'
125 entry-0013 size 1
126 '0'
127 #endif 121 #endif
128 122
129 $ hg showcopies 123 $ hg showcopies
130 b -> b2 124 b -> b2
131 125
163 p1copies: 0\x00b2 (esc) 157 p1copies: 0\x00b2 (esc)
164 158
165 #else 159 #else
166 $ hg debugsidedata -c -v -- -1 160 $ hg debugsidedata -c -v -- -1
167 1 sidedata entries 161 1 sidedata entries
168 entry-0010 size 4 162 entry-0014 size 25
169 '0\x00b2' 163 '\x00\x00\x00\x02\x00\x00\x00\x00\x02\x00\x00\x00\x00\x16\x00\x00\x00\x03\x00\x00\x00\x00b2c'
170 #endif 164 #endif
171 165
172 $ hg showcopies 166 $ hg showcopies
173 b2 -> c 167 b2 -> c
174 168
219 2\x00f (esc) 213 2\x00f (esc)
220 p2copies: 1\x00d (esc) 214 p2copies: 1\x00d (esc)
221 215
222 #else 216 #else
223 $ hg debugsidedata -c -v -- -1 217 $ hg debugsidedata -c -v -- -1
224 3 sidedata entries 218 1 sidedata entries
225 entry-0010 size 7 219 entry-0014 size 64
226 '0\x00a\n2\x00f' 220 '\x00\x00\x00\x06\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x06\x00\x00\x00\x04\x00\x00\x00\x00\x07\x00\x00\x00\x05\x00\x00\x00\x01\x06\x00\x00\x00\x06\x00\x00\x00\x02adfghi'
227 entry-0011 size 3
228 '1\x00d'
229 entry-0012 size 5
230 '0\n1\n2'
231 #endif 221 #endif
232 222
233 $ hg showcopies 223 $ hg showcopies
234 a -> g 224 a -> g
235 d -> h 225 d -> h
248 p1copies: 0\x00a (esc) 238 p1copies: 0\x00a (esc)
249 p2copies: 239 p2copies:
250 #else 240 #else
251 $ hg ci -m 'copy a to j' 241 $ hg ci -m 'copy a to j'
252 $ hg debugsidedata -c -v -- -1 242 $ hg debugsidedata -c -v -- -1
253 2 sidedata entries 243 1 sidedata entries
254 entry-0010 size 3 244 entry-0014 size 24
255 '0\x00a' 245 '\x00\x00\x00\x02\x00\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00aj'
256 entry-0012 size 1
257 '0'
258 #endif 246 #endif
259 $ hg debugdata j 0 247 $ hg debugdata j 0
260 \x01 (esc) 248 \x01 (esc)
261 copy: a 249 copy: a
262 copyrev: b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3 250 copyrev: b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3
279 267
280 #else 268 #else
281 $ hg ci --amend -m 'copy a to j, v2' 269 $ hg ci --amend -m 'copy a to j, v2'
282 saved backup bundle to $TESTTMP/repo/.hg/strip-backup/*-*-amend.hg (glob) 270 saved backup bundle to $TESTTMP/repo/.hg/strip-backup/*-*-amend.hg (glob)
283 $ hg debugsidedata -c -v -- -1 271 $ hg debugsidedata -c -v -- -1
284 2 sidedata entries 272 1 sidedata entries
285 entry-0010 size 3 273 entry-0014 size 24
286 '0\x00a' 274 '\x00\x00\x00\x02\x00\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00aj'
287 entry-0012 size 1
288 '0'
289 #endif 275 #endif
290 $ hg showcopies --config experimental.copies.read-from=filelog-only 276 $ hg showcopies --config experimental.copies.read-from=filelog-only
291 a -> j 277 a -> j
292 The entries should be written to extras even if they're empty (so the client 278 The entries should be written to extras even if they're empty (so the client
293 won't have to fall back to reading from filelogs) 279 won't have to fall back to reading from filelogs)
302 p1copies: 288 p1copies:
303 p2copies: 289 p2copies:
304 #else 290 #else
305 $ hg ci -m 'modify j' 291 $ hg ci -m 'modify j'
306 $ hg debugsidedata -c -v -- -1 292 $ hg debugsidedata -c -v -- -1
293 1 sidedata entries
294 entry-0014 size 14
295 '\x00\x00\x00\x01\x14\x00\x00\x00\x01\x00\x00\x00\x00j'
307 #endif 296 #endif
308 297
309 Test writing only to filelog 298 Test writing only to filelog
310 299
311 $ hg cp a k 300 $ hg cp a k
316 files: k 305 files: k
317 306
318 #else 307 #else
319 $ hg ci -m 'copy a to k' 308 $ hg ci -m 'copy a to k'
320 $ hg debugsidedata -c -v -- -1 309 $ hg debugsidedata -c -v -- -1
321 2 sidedata entries 310 1 sidedata entries
322 entry-0010 size 3 311 entry-0014 size 24
323 '0\x00a' 312 '\x00\x00\x00\x02\x00\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00ak'
324 entry-0012 size 1
325 '0'
326 #endif 313 #endif
327 314
328 $ hg debugdata k 0 315 $ hg debugdata k 0
329 \x01 (esc) 316 \x01 (esc)
330 copy: a 317 copy: a
437 plain-cl-delta: yes yes yes 424 plain-cl-delta: yes yes yes
438 compression: zlib zlib zlib 425 compression: zlib zlib zlib
439 compression-level: default default default 426 compression-level: default default default
440 $ hg debugsidedata -c -- 0 427 $ hg debugsidedata -c -- 0
441 1 sidedata entries 428 1 sidedata entries
442 entry-0012 size 1 429 entry-0014 size 14
443 $ hg debugsidedata -c -- 1 430 $ hg debugsidedata -c -- 1
444 1 sidedata entries 431 1 sidedata entries
445 entry-0013 size 1 432 entry-0014 size 14
446 $ hg debugsidedata -m -- 0 433 $ hg debugsidedata -m -- 0
447 $ cat << EOF > .hg/hgrc 434 $ cat << EOF > .hg/hgrc
448 > [format] 435 > [format]
449 > exp-use-side-data = yes 436 > exp-use-side-data = yes
450 > exp-use-copies-side-data-changeset = no 437 > exp-use-copies-side-data-changeset = no
461 copies-sdc: no no no 448 copies-sdc: no no no
462 plain-cl-delta: yes yes yes 449 plain-cl-delta: yes yes yes
463 compression: zlib zlib zlib 450 compression: zlib zlib zlib
464 compression-level: default default default 451 compression-level: default default default
465 $ hg debugsidedata -c -- 0 452 $ hg debugsidedata -c -- 0
453 1 sidedata entries
454 entry-0014 size 14
466 $ hg debugsidedata -c -- 1 455 $ hg debugsidedata -c -- 1
456 1 sidedata entries
457 entry-0014 size 14
467 $ hg debugsidedata -m -- 0 458 $ hg debugsidedata -m -- 0
468 459
469 upgrading 460 upgrading
470 461
471 $ cat << EOF > .hg/hgrc 462 $ cat << EOF > .hg/hgrc
485 plain-cl-delta: yes yes yes 476 plain-cl-delta: yes yes yes
486 compression: zlib zlib zlib 477 compression: zlib zlib zlib
487 compression-level: default default default 478 compression-level: default default default
488 $ hg debugsidedata -c -- 0 479 $ hg debugsidedata -c -- 0
489 1 sidedata entries 480 1 sidedata entries
490 entry-0012 size 1 481 entry-0014 size 14
491 $ hg debugsidedata -c -- 1 482 $ hg debugsidedata -c -- 1
492 1 sidedata entries 483 1 sidedata entries
493 entry-0013 size 1 484 entry-0014 size 14
494 $ hg debugsidedata -m -- 0 485 $ hg debugsidedata -m -- 0
495 486
496 #endif 487 #endif
497 488
498 $ cd .. 489 $ cd ..