tests/test-generaldelta.t
author |
Pierre-Yves David <pierre-yves.david@octobus.net> |
|
Mon, 14 Dec 2020 11:32:24 +0100 |
changeset 46149 |
294d5aca4ff5 |
parent 41823 |
f6eff9e4de80
|
child 46874 |
84a93fa7ecfd |
permissions |
-rw-r--r-- |
copies: iterate over children directly (instead of parents)
Before this change we would gather all parent → child edges and iterate on
all parent, gathering copy information for children and aggregating them from
there.
They are not strict requirement for edges to be processed in that specific
order. We could also simply iterate over all "children" revision and aggregate
data from both parents at the same time. This patch does that.
It make various things simpler:
* since both parents are processed at the same time, we no longer need to
cache data for merge (see next changeset for details),
* we no longer need nested loop to process data,
* we no longer need to store partial merge data for a rev from distinct loop
interaction to another when processing merges,
* we no longer need to build a full parent -> children mapping (we only rely on
a simpler "parent -> number of children" map (for memory efficiency),
* the data access pattern is now simpler (from lower revisions to higher
revisions) and entirely predicable. That predictability open the way to
prefetching and parallel processing.
So that new iterations order requires simpler code and open the way to
interesting optimisation.
The effect on performance is quite good. In the worse case, we don't see any
significant negative impact. And in the best case, the reduction of roundtrip
to Python provide us with a significant speed. Some example below:
Repo Case Source-Rev Dest-Rev # of revisions old time new time Difference Factor time per rev
---------------------------------------------------------------------------------------------------------------------------------------------------------------
mozilla-try x00000_revs_x00000_added_0_copies dc8a3ca7010e d16fde900c9c : 34414 revs, 0.962867 s, 0.502584 s, -0.460283 s, × 0.5220, 14 µs/rev
mozilla-try x0000_revs_xx000_added_x_copies 156f6e2674f2 4d0f2c178e66 : 8598 revs, 0.110717 s, 0.076323 s, -0.034394 s, × 0.6894, 8 µs/rev
# full comparison between the previous changeset and this one
Repo Case Source-Rev Dest-Rev # of revisions old time new time Difference Factor time per rev
---------------------------------------------------------------------------------------------------------------------------------------------------------------
mercurial x_revs_x_added_0_copies ad6b123de1c7 39cfcef4f463 : 1 revs, 0.000048 s, 0.000041 s, -0.000007 s, × 0.8542, 41 µs/rev
mercurial x_revs_x_added_x_copies 2b1c78674230 0c1d10351869 : 6 revs, 0.000153 s, 0.000102 s, -0.000051 s, × 0.6667, 17 µs/rev
mercurial x000_revs_x000_added_x_copies 81f8ff2a9bf2 dd3267698d84 : 1032 revs, 0.004209 s, 0.004254 s, +0.000045 s, × 1.0107, 4 µs/rev
pypy x_revs_x_added_0_copies aed021ee8ae8 099ed31b181b : 9 revs, 0.000203 s, 0.000282 s, +0.000079 s, × 1.3892, 31 µs/rev
pypy x_revs_x000_added_0_copies 4aa4e1f8e19a 359343b9ac0e : 1 revs, 0.000059 s, 0.000048 s, -0.000011 s, × 0.8136, 48 µs/rev
pypy x_revs_x_added_x_copies ac52eb7bbbb0 72e022663155 : 7 revs, 0.000194 s, 0.000211 s, +0.000017 s, × 1.0876, 30 µs/rev
pypy x_revs_x00_added_x_copies c3b14617fbd7 ace7255d9a26 : 1 revs, 0.000380 s, 0.000375 s, -0.000005 s, × 0.9868, 375 µs/rev
pypy x_revs_x000_added_x000_copies df6f7a526b60 a83dc6a2d56f : 6 revs, 0.010588 s, 0.010574 s, -0.000014 s, × 0.9987, 1762 µs/rev
pypy x000_revs_xx00_added_0_copies 89a76aede314 2f22446ff07e : 4785 revs, 0.048961 s, 0.049974 s, +0.001013 s, × 1.0207, 10 µs/rev
pypy x000_revs_x000_added_x_copies 8a3b5bfd266e 2c68e87c3efe : 6780 revs, 0.083612 s, 0.084300 s, +0.000688 s, × 1.0082, 12 µs/rev
pypy x000_revs_x000_added_x000_copies 89a76aede314 7b3dda341c84 : 5441 revs, 0.058579 s, 0.060128 s, +0.001549 s, × 1.0264, 11 µs/rev
pypy x0000_revs_x_added_0_copies d1defd0dc478 c9cb1334cc78 : 43645 revs, 0.736783 s, 0.686542 s, -0.050241 s, × 0.9318, 15 µs/rev
pypy x0000_revs_xx000_added_0_copies bf2c629d0071 4ffed77c095c : 2 revs, 0.022050 s, 0.009277 s, -0.012773 s, × 0.4207, 4638 µs/rev
pypy x0000_revs_xx000_added_x000_copies 08ea3258278e d9fa043f30c0 : 11316 revs, 0.120800 s, 0.114733 s, -0.006067 s, × 0.9498, 10 µs/rev
netbeans x_revs_x_added_0_copies fb0955ffcbcd a01e9239f9e7 : 2 revs, 0.000140 s, 0.000081 s, -0.000059 s, × 0.5786, 40 µs/rev
netbeans x_revs_x000_added_0_copies 6f360122949f 20eb231cc7d0 : 2 revs, 0.000114 s, 0.000107 s, -0.000007 s, × 0.9386, 53 µs/rev
netbeans x_revs_x_added_x_copies 1ada3faf6fb6 5a39d12eecf4 : 3 revs, 0.000224 s, 0.000173 s, -0.000051 s, × 0.7723, 57 µs/rev
netbeans x_revs_x00_added_x_copies 35be93ba1e2c 9eec5e90c05f : 9 revs, 0.000723 s, 0.000698 s, -0.000025 s, × 0.9654, 77 µs/rev
netbeans x000_revs_xx00_added_0_copies eac3045b4fdd 51d4ae7f1290 : 1421 revs, 0.009665 s, 0.009248 s, -0.000417 s, × 0.9569, 6 µs/rev
netbeans x000_revs_x000_added_x_copies e2063d266acd 6081d72689dc : 1533 revs, 0.014820 s, 0.015446 s, +0.000626 s, × 1.0422, 10 µs/rev
netbeans x000_revs_x000_added_x000_copies ff453e9fee32 411350406ec2 : 5750 revs, 0.076049 s, 0.074373 s, -0.001676 s, × 0.9780, 12 µs/rev
netbeans x0000_revs_xx000_added_x000_copies 588c2d1ced70 1aad62e59ddd : 66949 revs, 0.683603 s, 0.639870 s, -0.043733 s, × 0.9360, 9 µs/rev
mozilla-central x_revs_x_added_0_copies 3697f962bb7b 7015fcdd43a2 : 2 revs, 0.000161 s, 0.000088 s, -0.000073 s, × 0.5466, 44 µs/rev
mozilla-central x_revs_x000_added_0_copies dd390860c6c9 40d0c5bed75d : 8 revs, 0.000234 s, 0.000199 s, -0.000035 s, × 0.8504, 24 µs/rev
mozilla-central x_revs_x_added_x_copies 8d198483ae3b 14207ffc2b2f : 9 revs, 0.000247 s, 0.000171 s, -0.000076 s, × 0.6923, 19 µs/rev
mozilla-central x_revs_x00_added_x_copies 98cbc58cc6bc 446a150332c3 : 7 revs, 0.000630 s, 0.000592 s, -0.000038 s, × 0.9397, 84 µs/rev
mozilla-central x_revs_x000_added_x000_copies 3c684b4b8f68 0a5e72d1b479 : 3 revs, 0.003286 s, 0.003151 s, -0.000135 s, × 0.9589, 1050 µs/rev
mozilla-central x_revs_x0000_added_x0000_copies effb563bb7e5 c07a39dc4e80 : 6 revs, 0.062441 s, 0.061612 s, -0.000829 s, × 0.9867, 10268 µs/rev
mozilla-central x000_revs_xx00_added_0_copies 6100d773079a 04a55431795e : 1593 revs, 0.005423 s, 0.005381 s, -0.000042 s, × 0.9923, 3 µs/rev
mozilla-central x000_revs_x000_added_x_copies 9f17a6fc04f9 2d37b966abed : 41 revs, 0.005919 s, 0.003742 s, -0.002177 s, × 0.6322, 91 µs/rev
mozilla-central x000_revs_x000_added_x000_copies 7c97034feb78 4407bd0c6330 : 7839 revs, 0.062597 s, 0.061983 s, -0.000614 s, × 0.9902, 7 µs/rev
mozilla-central x0000_revs_xx000_added_0_copies 9eec5917337d 67118cc6dcad : 615 revs, 0.043551 s, 0.019861 s, -0.023690 s, × 0.4560, 32 µs/rev
mozilla-central x0000_revs_xx000_added_x000_copies f78c615a656c 96a38b690156 : 30263 revs, 0.192475 s, 0.188101 s, -0.004374 s, × 0.9773, 6 µs/rev
mozilla-central x00000_revs_x0000_added_x0000_copies 6832ae71433c 4c222a1d9a00 : 153721 revs, 1.955575 s, 1.806696 s, -0.148879 s, × 0.9239, 11 µs/rev
mozilla-central x00000_revs_x00000_added_x000_copies 76caed42cf7c 1daa622bbe42 : 204976 revs, 2.886501 s, 2.682987 s, -0.203514 s, × 0.9295, 13 µs/rev
mozilla-try x_revs_x_added_0_copies aaf6dde0deb8 9790f499805a : 2 revs, 0.001181 s, 0.000852 s, -0.000329 s, × 0.7214, 426 µs/rev
mozilla-try x_revs_x000_added_0_copies d8d0222927b4 5bb8ce8c7450 : 2 revs, 0.001189 s, 0.000859 s, -0.000330 s, × 0.7225, 429 µs/rev
mozilla-try x_revs_x_added_x_copies 092fcca11bdb 936255a0384a : 4 revs, 0.000563 s, 0.000150 s, -0.000413 s, × 0.2664, 37 µs/rev
mozilla-try x_revs_x00_added_x_copies b53d2fadbdb5 017afae788ec : 2 revs, 0.001548 s, 0.001158 s, -0.000390 s, × 0.7481, 579 µs/rev
mozilla-try x_revs_x000_added_x000_copies 20408ad61ce5 6f0ee96e21ad : 1 revs, 0.027782 s, 0.027240 s, -0.000542 s, × 0.9805, 27240 µs/rev
mozilla-try x_revs_x0000_added_x0000_copies effb563bb7e5 c07a39dc4e80 : 6 revs, 0.062781 s, 0.062824 s, +0.000043 s, × 1.0007, 10470 µs/rev
mozilla-try x000_revs_xx00_added_0_copies 6100d773079a 04a55431795e : 1593 revs, 0.005778 s, 0.005463 s, -0.000315 s, × 0.9455, 3 µs/rev
mozilla-try x000_revs_x000_added_x_copies 9f17a6fc04f9 2d37b966abed : 41 revs, 0.006192 s, 0.004238 s, -0.001954 s, × 0.6844, 103 µs/rev
mozilla-try x000_revs_x000_added_x000_copies 1346fd0130e4 4c65cbdabc1f : 6657 revs, 0.065391 s, 0.064113 s, -0.001278 s, × 0.9805, 9 µs/rev
mozilla-try x0000_revs_x_added_0_copies 63519bfd42ee a36a2a865d92 : 40314 revs, 0.317216 s, 0.294063 s, -0.023153 s, × 0.9270, 7 µs/rev
mozilla-try x0000_revs_x_added_x_copies 9fe69ff0762d bcabf2a78927 : 38690 revs, 0.303119 s, 0.281493 s, -0.021626 s, × 0.9287, 7 µs/rev
mozilla-try x0000_revs_xx000_added_x_copies 156f6e2674f2 4d0f2c178e66 : 8598 revs, 0.110717 s, 0.076323 s, -0.034394 s, × 0.6894, 8 µs/rev
mozilla-try x0000_revs_xx000_added_0_copies 9eec5917337d 67118cc6dcad : 615 revs, 0.045739 s, 0.020390 s, -0.025349 s, × 0.4458, 33 µs/rev
mozilla-try x0000_revs_xx000_added_x000_copies 89294cd501d9 7ccb2fc7ccb5 : 97052 revs, 3.098021 s, 3.023879 s, -0.074142 s, × 0.9761, 31 µs/rev
mozilla-try x0000_revs_x0000_added_x0000_copies e928c65095ed e951f4ad123a : 52031 revs, 0.771480 s, 0.735549 s, -0.035931 s, × 0.9534, 14 µs/rev
mozilla-try x00000_revs_x_added_0_copies 6a320851d377 1ebb79acd503 : 363753 revs, 18.813422 s, 18.568900 s, -0.244522 s, × 0.9870, 51 µs/rev
mozilla-try x00000_revs_x00000_added_0_copies dc8a3ca7010e d16fde900c9c : 34414 revs, 0.962867 s, 0.502584 s, -0.460283 s, × 0.5220, 14 µs/rev
mozilla-try x00000_revs_x_added_x_copies 5173c4b6f97c 95d83ee7242d : 362229 revs, 18.684923 s, 18.356645 s, -0.328278 s, × 0.9824, 50 µs/rev
mozilla-try x00000_revs_x000_added_x_copies 9126823d0e9c ca82787bb23c : 359344 revs, 18.296305 s, 18.250393 s, -0.045912 s, × 0.9975, 50 µs/rev
mozilla-try x00000_revs_x0000_added_x0000_copies 8d3fafa80d4b eb884023b810 : 192665 revs, 3.061887 s, 2.792459 s, -0.269428 s, × 0.9120, 14 µs/rev
mozilla-try x00000_revs_x00000_added_x0000_copies 1b661134e2ca 1ae03d022d6d : 228985 revs, 103.869641 s, 107.697264 s, +3.827623 s, × 1.0369, 470 µs/rev
mozilla-try x00000_revs_x00000_added_x000_copies 9b2a99adc05e 8e29777b48e6 : 382065 revs, 64.262957 s, 63.961040 s, -0.301917 s, × 0.9953, 167 µs/rev
Differential Revision: https://phab.mercurial-scm.org/D9422
#require no-reposimplestore
Check whether size of generaldelta revlog is not bigger than its
regular equivalent. Test would fail if generaldelta was naive
implementation of parentdelta: third manifest revision would be fully
inserted due to big distance from its paren revision (zero).
$ cat << EOF >> $HGRCPATH
> [format]
> sparse-revlog = no
> EOF
$ hg init repo --config format.generaldelta=no --config format.usegeneraldelta=no
$ cd repo
$ echo foo > foo
$ echo bar > bar
$ echo baz > baz
$ hg commit -q -Am boo
$ hg clone --pull . ../gdrepo -q --config format.generaldelta=yes
$ for r in 1 2 3; do
> echo $r > foo
> hg commit -q -m $r
> hg up -q -r 0
> hg pull . -q -r $r -R ../gdrepo
> done
$ cd ..
>>> from __future__ import print_function
>>> import os
>>> regsize = os.stat("repo/.hg/store/00manifest.i").st_size
>>> gdsize = os.stat("gdrepo/.hg/store/00manifest.i").st_size
>>> if regsize < gdsize:
... print('generaldata increased size of manifest')
Verify rev reordering doesnt create invalid bundles (issue4462)
This requires a commit tree that when pulled will reorder manifest revs such
that the second manifest to create a file rev will be ordered before the first
manifest to create that file rev. We also need to do a partial pull to ensure
reordering happens. At the end we verify the linkrev points at the earliest
commit.
$ hg init server --config format.generaldelta=True
$ cd server
$ touch a
$ hg commit -Aqm a
$ echo x > x
$ echo y > y
$ hg commit -Aqm xy
$ hg up -q '.^'
$ echo x > x
$ echo z > z
$ hg commit -Aqm xz
$ hg up -q 1
$ echo b > b
$ hg commit -Aqm b
$ hg merge -q 2
$ hg commit -Aqm merge
$ echo c > c
$ hg commit -Aqm c
$ hg log -G -T '{rev} {shortest(node)} {desc}'
@ 5 ebb8 c
|
o 4 baf7 merge
|\
| o 3 a129 b
| |
o | 2 958c xz
| |
| o 1 f00c xy
|/
o 0 3903 a
$ cd ..
$ hg init client --config format.generaldelta=false --config format.usegeneraldelta=false
$ cd client
$ hg pull -q ../server -r 4
$ hg debugdeltachain x
rev chain# chainlen prev delta size rawsize chainsize ratio lindist extradist extraratio
0 1 1 -1 base 3 2 3 1.50000 3 0 0.00000
$ cd ..
Test "usegeneraldelta" config
(repo are general delta, but incoming bundle are not re-deltafied)
delta coming from the server base delta server are not recompressed.
(also include the aggressive version for comparison)
$ hg clone repo --pull --config format.usegeneraldelta=1 usegd
requesting all changes
adding changesets
adding manifests
adding file changes
added 4 changesets with 6 changes to 3 files (+2 heads)
new changesets 0ea3fcf9d01d:bba78d330d9c
updating to branch default
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg clone repo --pull --config format.generaldelta=1 full
requesting all changes
adding changesets
adding manifests
adding file changes
added 4 changesets with 6 changes to 3 files (+2 heads)
new changesets 0ea3fcf9d01d:bba78d330d9c
updating to branch default
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg -R repo debugdeltachain -m
rev chain# chainlen prev delta size rawsize chainsize ratio lindist extradist extraratio
0 1 1 -1 base 104 135 104 0.77037 104 0 0.00000
1 1 2 0 prev 57 135 161 1.19259 161 0 0.00000
2 1 3 1 prev 57 135 218 1.61481 218 0 0.00000
3 2 1 -1 base 104 135 104 0.77037 104 0 0.00000
$ hg -R usegd debugdeltachain -m
rev chain# chainlen prev delta size rawsize chainsize ratio lindist extradist extraratio
0 1 1 -1 base 104 135 104 0.77037 104 0 0.00000
1 1 2 0 p1 57 135 161 1.19259 161 0 0.00000
2 1 3 1 prev 57 135 218 1.61481 218 0 0.00000
3 1 2 0 p1 57 135 161 1.19259 275 114 0.70807
$ hg -R full debugdeltachain -m
rev chain# chainlen prev delta size rawsize chainsize ratio lindist extradist extraratio
0 1 1 -1 base 104 135 104 0.77037 104 0 0.00000
1 1 2 0 p1 57 135 161 1.19259 161 0 0.00000
2 1 2 0 p1 57 135 161 1.19259 218 57 0.35404
3 1 2 0 p1 57 135 161 1.19259 275 114 0.70807
Test revlog.optimize-delta-parent-choice
$ hg init --config format.generaldelta=1 aggressive
$ cd aggressive
$ cat << EOF >> .hg/hgrc
> [format]
> generaldelta = 1
> EOF
$ touch a b c d e
$ hg commit -Aqm side1
$ hg up -q null
$ touch x y
$ hg commit -Aqm side2
- Verify non-aggressive merge uses p1 (commit 1) as delta parent
$ hg merge -q 0
$ hg commit -q -m merge
$ hg debugdeltachain -m
rev chain# chainlen prev delta size rawsize chainsize ratio lindist extradist extraratio
0 1 1 -1 base 59 215 59 0.27442 59 0 0.00000
1 1 2 0 prev 61 86 120 1.39535 120 0 0.00000
2 1 2 0 p2 62 301 121 0.40199 182 61 0.50413
$ hg strip -q -r . --config extensions.strip=
- Verify aggressive merge uses p2 (commit 0) as delta parent
$ hg up -q -C 1
$ hg merge -q 0
$ hg commit -q -m merge --config storage.revlog.optimize-delta-parent-choice=yes
$ hg debugdeltachain -m
rev chain# chainlen prev delta size rawsize chainsize ratio lindist extradist extraratio
0 1 1 -1 base 59 215 59 0.27442 59 0 0.00000
1 1 2 0 prev 61 86 120 1.39535 120 0 0.00000
2 1 2 0 p2 62 301 121 0.40199 182 61 0.50413
Test that strip bundle use bundle2
$ hg --config extensions.strip= strip .
0 files updated, 0 files merged, 5 files removed, 0 files unresolved
saved backup bundle to $TESTTMP/aggressive/.hg/strip-backup/1c5d4dc9a8b8-6c68e60c-backup.hg
$ hg debugbundle .hg/strip-backup/*
Stream params: {Compression: BZ}
changegroup -- {nbchanges: 1, version: 02} (mandatory: True)
1c5d4dc9a8b8d6e1750966d343e94db665e7a1e9
cache:rev-branch-cache -- {} (mandatory: False)
phase-heads -- {} (mandatory: True)
1c5d4dc9a8b8d6e1750966d343e94db665e7a1e9 draft
$ cd ..
test maxdeltachainspan
$ hg init source-repo
$ cd source-repo
$ hg debugbuilddag --new-file '.+5:brancha$.+11:branchb$.+30:branchc<brancha+2<branchb+2'
# add an empty revision somewhere
$ hg up tip
14 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg rm .
removing nf10
removing nf11
removing nf12
removing nf13
removing nf14
removing nf15
removing nf16
removing nf17
removing nf51
removing nf52
removing nf6
removing nf7
removing nf8
removing nf9
$ hg commit -m 'empty all'
$ hg revert --all --rev 'p1(.)'
adding nf10
adding nf11
adding nf12
adding nf13
adding nf14
adding nf15
adding nf16
adding nf17
adding nf51
adding nf52
adding nf6
adding nf7
adding nf8
adding nf9
$ hg commit -m 'restore all'
$ hg up null
0 files updated, 0 files merged, 14 files removed, 0 files unresolved
$
$ cd ..
$ hg -R source-repo debugdeltachain -m
rev chain# chainlen prev delta size rawsize chainsize ratio lindist extradist extraratio
0 1 1 -1 base 46 45 46 1.02222 46 0 0.00000
1 1 2 0 p1 57 90 103 1.14444 103 0 0.00000
2 1 3 1 p1 57 135 160 1.18519 160 0 0.00000
3 1 4 2 p1 57 180 217 1.20556 217 0 0.00000
4 1 5 3 p1 57 225 274 1.21778 274 0 0.00000
5 1 6 4 p1 57 270 331 1.22593 331 0 0.00000
6 2 1 -1 base 46 45 46 1.02222 46 0 0.00000
7 2 2 6 p1 57 90 103 1.14444 103 0 0.00000
8 2 3 7 p1 57 135 160 1.18519 160 0 0.00000
9 2 4 8 p1 57 180 217 1.20556 217 0 0.00000
10 2 5 9 p1 58 226 275 1.21681 275 0 0.00000
11 2 6 10 p1 58 272 333 1.22426 333 0 0.00000
12 2 7 11 p1 58 318 391 1.22956 391 0 0.00000
13 2 8 12 p1 58 364 449 1.23352 449 0 0.00000
14 2 9 13 p1 58 410 507 1.23659 507 0 0.00000
15 2 10 14 p1 58 456 565 1.23904 565 0 0.00000
16 2 11 15 p1 58 502 623 1.24104 623 0 0.00000
17 2 12 16 p1 58 548 681 1.24270 681 0 0.00000
18 3 1 -1 base 47 46 47 1.02174 47 0 0.00000
19 3 2 18 p1 58 92 105 1.14130 105 0 0.00000
20 3 3 19 p1 58 138 163 1.18116 163 0 0.00000
21 3 4 20 p1 58 184 221 1.20109 221 0 0.00000
22 3 5 21 p1 58 230 279 1.21304 279 0 0.00000
23 3 6 22 p1 58 276 337 1.22101 337 0 0.00000
24 3 7 23 p1 58 322 395 1.22671 395 0 0.00000
25 3 8 24 p1 58 368 453 1.23098 453 0 0.00000
26 3 9 25 p1 58 414 511 1.23430 511 0 0.00000
27 3 10 26 p1 58 460 569 1.23696 569 0 0.00000
28 3 11 27 p1 58 506 627 1.23913 627 0 0.00000
29 3 12 28 p1 58 552 685 1.24094 685 0 0.00000
30 3 13 29 p1 58 598 743 1.24247 743 0 0.00000
31 3 14 30 p1 58 644 801 1.24379 801 0 0.00000
32 3 15 31 p1 58 690 859 1.24493 859 0 0.00000
33 3 16 32 p1 58 736 917 1.24592 917 0 0.00000
34 3 17 33 p1 58 782 975 1.24680 975 0 0.00000
35 3 18 34 p1 58 828 1033 1.24758 1033 0 0.00000
36 3 19 35 p1 58 874 1091 1.24828 1091 0 0.00000
37 3 20 36 p1 58 920 1149 1.24891 1149 0 0.00000
38 3 21 37 p1 58 966 1207 1.24948 1207 0 0.00000
39 3 22 38 p1 58 1012 1265 1.25000 1265 0 0.00000
40 3 23 39 p1 58 1058 1323 1.25047 1323 0 0.00000
41 3 24 40 p1 58 1104 1381 1.25091 1381 0 0.00000
42 3 25 41 p1 58 1150 1439 1.25130 1439 0 0.00000
43 3 26 42 p1 58 1196 1497 1.25167 1497 0 0.00000
44 3 27 43 p1 58 1242 1555 1.25201 1555 0 0.00000
45 3 28 44 p1 58 1288 1613 1.25233 1613 0 0.00000
46 3 29 45 p1 58 1334 1671 1.25262 1671 0 0.00000
47 3 30 46 p1 58 1380 1729 1.25290 1729 0 0.00000
48 3 31 47 p1 58 1426 1787 1.25316 1787 0 0.00000
49 4 1 -1 base 197 316 197 0.62342 197 0 0.00000
50 4 2 49 p1 58 362 255 0.70442 255 0 0.00000
51 4 3 50 prev 356 594 611 1.02862 611 0 0.00000
52 4 4 51 p1 58 640 669 1.04531 669 0 0.00000
53 5 1 -1 base 0 0 0 0.00000 0 0 0.00000
54 6 1 -1 base 369 640 369 0.57656 369 0 0.00000
$ hg clone --pull source-repo --config experimental.maxdeltachainspan=2800 relax-chain --config format.generaldelta=yes
requesting all changes
adding changesets
adding manifests
adding file changes
added 55 changesets with 53 changes to 53 files (+2 heads)
new changesets 61246295ee1e:c930ac4a5b32
updating to branch default
14 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg -R relax-chain debugdeltachain -m
rev chain# chainlen prev delta size rawsize chainsize ratio lindist extradist extraratio
0 1 1 -1 base 46 45 46 1.02222 46 0 0.00000
1 1 2 0 p1 57 90 103 1.14444 103 0 0.00000
2 1 3 1 p1 57 135 160 1.18519 160 0 0.00000
3 1 4 2 p1 57 180 217 1.20556 217 0 0.00000
4 1 5 3 p1 57 225 274 1.21778 274 0 0.00000
5 1 6 4 p1 57 270 331 1.22593 331 0 0.00000
6 2 1 -1 base 46 45 46 1.02222 46 0 0.00000
7 2 2 6 p1 57 90 103 1.14444 103 0 0.00000
8 2 3 7 p1 57 135 160 1.18519 160 0 0.00000
9 2 4 8 p1 57 180 217 1.20556 217 0 0.00000
10 2 5 9 p1 58 226 275 1.21681 275 0 0.00000
11 2 6 10 p1 58 272 333 1.22426 333 0 0.00000
12 2 7 11 p1 58 318 391 1.22956 391 0 0.00000
13 2 8 12 p1 58 364 449 1.23352 449 0 0.00000
14 2 9 13 p1 58 410 507 1.23659 507 0 0.00000
15 2 10 14 p1 58 456 565 1.23904 565 0 0.00000
16 2 11 15 p1 58 502 623 1.24104 623 0 0.00000
17 2 12 16 p1 58 548 681 1.24270 681 0 0.00000
18 3 1 -1 base 47 46 47 1.02174 47 0 0.00000
19 3 2 18 p1 58 92 105 1.14130 105 0 0.00000
20 3 3 19 p1 58 138 163 1.18116 163 0 0.00000
21 3 4 20 p1 58 184 221 1.20109 221 0 0.00000
22 3 5 21 p1 58 230 279 1.21304 279 0 0.00000
23 3 6 22 p1 58 276 337 1.22101 337 0 0.00000
24 3 7 23 p1 58 322 395 1.22671 395 0 0.00000
25 3 8 24 p1 58 368 453 1.23098 453 0 0.00000
26 3 9 25 p1 58 414 511 1.23430 511 0 0.00000
27 3 10 26 p1 58 460 569 1.23696 569 0 0.00000
28 3 11 27 p1 58 506 627 1.23913 627 0 0.00000
29 3 12 28 p1 58 552 685 1.24094 685 0 0.00000
30 3 13 29 p1 58 598 743 1.24247 743 0 0.00000
31 3 14 30 p1 58 644 801 1.24379 801 0 0.00000
32 3 15 31 p1 58 690 859 1.24493 859 0 0.00000
33 3 16 32 p1 58 736 917 1.24592 917 0 0.00000
34 3 17 33 p1 58 782 975 1.24680 975 0 0.00000
35 3 18 34 p1 58 828 1033 1.24758 1033 0 0.00000
36 3 19 35 p1 58 874 1091 1.24828 1091 0 0.00000
37 3 20 36 p1 58 920 1149 1.24891 1149 0 0.00000
38 3 21 37 p1 58 966 1207 1.24948 1207 0 0.00000
39 3 22 38 p1 58 1012 1265 1.25000 1265 0 0.00000
40 3 23 39 p1 58 1058 1323 1.25047 1323 0 0.00000
41 3 24 40 p1 58 1104 1381 1.25091 1381 0 0.00000
42 3 25 41 p1 58 1150 1439 1.25130 1439 0 0.00000
43 3 26 42 p1 58 1196 1497 1.25167 1497 0 0.00000
44 3 27 43 p1 58 1242 1555 1.25201 1555 0 0.00000
45 3 28 44 p1 58 1288 1613 1.25233 1613 0 0.00000
46 3 29 45 p1 58 1334 1671 1.25262 1671 0 0.00000
47 3 30 46 p1 58 1380 1729 1.25290 1729 0 0.00000
48 3 31 47 p1 58 1426 1787 1.25316 1787 0 0.00000
49 4 1 -1 base 197 316 197 0.62342 197 0 0.00000
50 4 2 49 p1 58 362 255 0.70442 255 0 0.00000
51 2 13 17 p1 58 594 739 1.24411 2781 2042 2.76319
52 5 1 -1 base 369 640 369 0.57656 369 0 0.00000
53 6 1 -1 base 0 0 0 0.00000 0 0 0.00000
54 7 1 -1 base 369 640 369 0.57656 369 0 0.00000
$ hg clone --pull source-repo --config experimental.maxdeltachainspan=0 noconst-chain --config format.usegeneraldelta=yes --config storage.revlog.reuse-external-delta-parent=no
requesting all changes
adding changesets
adding manifests
adding file changes
added 55 changesets with 53 changes to 53 files (+2 heads)
new changesets 61246295ee1e:c930ac4a5b32
updating to branch default
14 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg -R noconst-chain debugdeltachain -m
rev chain# chainlen prev delta size rawsize chainsize ratio lindist extradist extraratio
0 1 1 -1 base 46 45 46 1.02222 46 0 0.00000
1 1 2 0 p1 57 90 103 1.14444 103 0 0.00000
2 1 3 1 p1 57 135 160 1.18519 160 0 0.00000
3 1 4 2 p1 57 180 217 1.20556 217 0 0.00000
4 1 5 3 p1 57 225 274 1.21778 274 0 0.00000
5 1 6 4 p1 57 270 331 1.22593 331 0 0.00000
6 2 1 -1 base 46 45 46 1.02222 46 0 0.00000
7 2 2 6 p1 57 90 103 1.14444 103 0 0.00000
8 2 3 7 p1 57 135 160 1.18519 160 0 0.00000
9 2 4 8 p1 57 180 217 1.20556 217 0 0.00000
10 2 5 9 p1 58 226 275 1.21681 275 0 0.00000
11 2 6 10 p1 58 272 333 1.22426 333 0 0.00000
12 2 7 11 p1 58 318 391 1.22956 391 0 0.00000
13 2 8 12 p1 58 364 449 1.23352 449 0 0.00000
14 2 9 13 p1 58 410 507 1.23659 507 0 0.00000
15 2 10 14 p1 58 456 565 1.23904 565 0 0.00000
16 2 11 15 p1 58 502 623 1.24104 623 0 0.00000
17 2 12 16 p1 58 548 681 1.24270 681 0 0.00000
18 3 1 -1 base 47 46 47 1.02174 47 0 0.00000
19 3 2 18 p1 58 92 105 1.14130 105 0 0.00000
20 3 3 19 p1 58 138 163 1.18116 163 0 0.00000
21 3 4 20 p1 58 184 221 1.20109 221 0 0.00000
22 3 5 21 p1 58 230 279 1.21304 279 0 0.00000
23 3 6 22 p1 58 276 337 1.22101 337 0 0.00000
24 3 7 23 p1 58 322 395 1.22671 395 0 0.00000
25 3 8 24 p1 58 368 453 1.23098 453 0 0.00000
26 3 9 25 p1 58 414 511 1.23430 511 0 0.00000
27 3 10 26 p1 58 460 569 1.23696 569 0 0.00000
28 3 11 27 p1 58 506 627 1.23913 627 0 0.00000
29 3 12 28 p1 58 552 685 1.24094 685 0 0.00000
30 3 13 29 p1 58 598 743 1.24247 743 0 0.00000
31 3 14 30 p1 58 644 801 1.24379 801 0 0.00000
32 3 15 31 p1 58 690 859 1.24493 859 0 0.00000
33 3 16 32 p1 58 736 917 1.24592 917 0 0.00000
34 3 17 33 p1 58 782 975 1.24680 975 0 0.00000
35 3 18 34 p1 58 828 1033 1.24758 1033 0 0.00000
36 3 19 35 p1 58 874 1091 1.24828 1091 0 0.00000
37 3 20 36 p1 58 920 1149 1.24891 1149 0 0.00000
38 3 21 37 p1 58 966 1207 1.24948 1207 0 0.00000
39 3 22 38 p1 58 1012 1265 1.25000 1265 0 0.00000
40 3 23 39 p1 58 1058 1323 1.25047 1323 0 0.00000
41 3 24 40 p1 58 1104 1381 1.25091 1381 0 0.00000
42 3 25 41 p1 58 1150 1439 1.25130 1439 0 0.00000
43 3 26 42 p1 58 1196 1497 1.25167 1497 0 0.00000
44 3 27 43 p1 58 1242 1555 1.25201 1555 0 0.00000
45 3 28 44 p1 58 1288 1613 1.25233 1613 0 0.00000
46 3 29 45 p1 58 1334 1671 1.25262 1671 0 0.00000
47 3 30 46 p1 58 1380 1729 1.25290 1729 0 0.00000
48 3 31 47 p1 58 1426 1787 1.25316 1787 0 0.00000
49 1 7 5 p1 58 316 389 1.23101 2857 2468 6.34447
50 1 8 49 p1 58 362 447 1.23481 2915 2468 5.52125
51 2 13 17 p1 58 594 739 1.24411 2642 1903 2.57510
52 2 14 51 p1 58 640 797 1.24531 2700 1903 2.38770
53 4 1 -1 base 0 0 0 0.00000 0 0 0.00000
54 5 1 -1 base 369 640 369 0.57656 369 0 0.00000