##// END OF EJS Templates
bundle: include advisory rev branch cache part in bundle2 bundle...
bundle: include advisory rev branch cache part in bundle2 bundle `hg bundle` command producing bundle2 will now include an optional part containing the revision-branch cache data. The data sent are mostly nodes so it is quite compact. The goal of the rev-branch-cache is to speed up branch map computation, especially when the branchmap gets invalidated so we send data for all exchanged changesets. In addition, computing the relevant heads to send in case of partial pulling would be challenging. As a reminder, the rev branch cache data significantly speed up branch computation. Having it around provides a small speedup to pull/clone and much higher tolerance to branch map cache invalidation that might happens from later commands. On the Mercurial repository, computing the visible branchmap from scratch move from 2.00 seconds to 0.34s (a -83% speedup). Using this new part, Unbundling the full Mercurial repository moves from 25.736 seconds to 24.030 seconds (around -7% speedup). The bundle size increase is around 3% (from 22.43 MB to 23.13MB) On an half a million revision repository with twenty thousand branches, computing the branchmap moves from 75 seconds to 45 second (-40%) if the caches is used. A bundle containing 50 000 changesets in such repository get a 0.5% size increase from such part for a -3% unbundling time speedup.

File last commit:

r34027:626a28f3 default
r36983:b89a7ef2 default
Show More
test-bundle-phases.t
290 lines | 6.1 KiB | text/troff | Tads3Lexer
/ tests / test-bundle-phases.t
Martin von Zweigbergk
bundle: add config option to include phases...
r33031 $ cat >> $HGRCPATH <<EOF
> [experimental]
> bundle-phases=yes
> [extensions]
> strip=
> drawdag=$TESTDIR/drawdag.py
> EOF
Set up repo with linear history
$ hg init linear
$ cd linear
$ hg debugdrawdag <<'EOF'
> E
> |
> D
> |
> C
> |
> B
> |
> A
> EOF
$ hg phase --public A
$ hg phase --force --secret D
$ hg log -G -T '{desc} {phase}\n'
o E secret
|
o D secret
|
o C draft
|
o B draft
|
o A public
Phases are restored when unbundling
$ hg bundle --base B -r E bundle
3 changesets found
$ hg debugbundle bundle
Augie Fackler
debugcommands: stabilize output of debugbundle by having a custom repr...
r34027 Stream params: {Compression: BZ}
changegroup -- {nbchanges: 3, targetphase: 2, version: 02}
Martin von Zweigbergk
bundle: add config option to include phases...
r33031 26805aba1e600a82e93661149f2313866a221a7b
f585351a92f85104bff7c284233c338b10eb1df7
9bc730a19041f9ec7cb33c626e811aa233efb18c
Boris Feld
bundle: include advisory rev branch cache part in bundle2 bundle...
r36983 cache:rev-branch-cache -- {}
Augie Fackler
debugcommands: stabilize output of debugbundle by having a custom repr...
r34027 phase-heads -- {}
Martin von Zweigbergk
bundle: add config option to include phases...
r33031 26805aba1e600a82e93661149f2313866a221a7b draft
$ hg strip --no-backup C
$ hg unbundle -q bundle
$ rm bundle
$ hg log -G -T '{desc} {phase}\n'
o E secret
|
o D secret
|
o C draft
|
o B draft
|
o A public
Root revision's phase is preserved
$ hg bundle -a bundle
5 changesets found
$ hg strip --no-backup A
$ hg unbundle -q bundle
$ rm bundle
$ hg log -G -T '{desc} {phase}\n'
o E secret
|
o D secret
|
o C draft
|
o B draft
|
o A public
Completely public history can be restored
$ hg phase --public E
$ hg bundle -a bundle
5 changesets found
$ hg strip --no-backup A
$ hg unbundle -q bundle
$ rm bundle
$ hg log -G -T '{desc} {phase}\n'
o E public
|
o D public
|
o C public
|
o B public
|
o A public
Direct transition from public to secret can be restored
$ hg phase --secret --force D
$ hg bundle -a bundle
5 changesets found
$ hg strip --no-backup A
$ hg unbundle -q bundle
$ rm bundle
$ hg log -G -T '{desc} {phase}\n'
o E secret
|
o D secret
|
o C public
|
o B public
|
o A public
Revisions within bundle preserve their phase even if parent changes its phase
$ hg phase --draft --force B
$ hg bundle --base B -r E bundle
3 changesets found
$ hg strip --no-backup C
$ hg phase --public B
$ hg unbundle -q bundle
$ rm bundle
$ hg log -G -T '{desc} {phase}\n'
o E secret
|
o D secret
|
o C draft
|
o B public
|
o A public
Phase of ancestors of stripped node get advanced to accommodate child
$ hg bundle --base B -r E bundle
3 changesets found
$ hg strip --no-backup C
$ hg phase --force --secret B
$ hg unbundle -q bundle
$ rm bundle
$ hg log -G -T '{desc} {phase}\n'
o E secret
|
o D secret
|
o C draft
|
o B draft
|
o A public
Unbundling advances phases of changesets even if they were already in the repo.
To test that, create a bundle of everything in draft phase and then unbundle
to see that secret becomes draft, but public remains public.
$ hg phase --draft --force A
$ hg phase --draft E
$ hg bundle -a bundle
5 changesets found
$ hg phase --public A
$ hg phase --secret --force E
$ hg unbundle -q bundle
$ rm bundle
$ hg log -G -T '{desc} {phase}\n'
o E draft
|
o D draft
|
o C draft
|
o B draft
|
o A public
Martin von Zweigbergk
strip: include phases in bundle (BC)...
r33032 Unbundling change in the middle of a stack does not affect later changes
$ hg strip --no-backup E
$ hg phase --secret --force D
$ hg log -G -T '{desc} {phase}\n'
o D secret
|
o C draft
|
o B draft
|
o A public
$ hg bundle --base A -r B bundle
1 changesets found
$ hg unbundle -q bundle
$ rm bundle
$ hg log -G -T '{desc} {phase}\n'
o D secret
|
o C draft
|
o B draft
|
o A public
Martin von Zweigbergk
bundle: add config option to include phases...
r33031 $ cd ..
Set up repo with non-linear history
$ hg init non-linear
$ cd non-linear
$ hg debugdrawdag <<'EOF'
> D E
> |\|
> B C
> |/
> A
> EOF
$ hg phase --public C
$ hg phase --force --secret B
$ hg log -G -T '{node|short} {desc} {phase}\n'
o 03ca77807e91 E draft
|
Martin von Zweigbergk
drawdag: include files from both parents in merge commits...
r33558 | o 4e4f9194f9f1 D secret
Martin von Zweigbergk
bundle: add config option to include phases...
r33031 |/|
o | dc0947a82db8 C public
| |
| o 112478962961 B secret
|/
o 426bada5c675 A public
Restore bundle of entire repo
$ hg bundle -a bundle
5 changesets found
$ hg debugbundle bundle
Augie Fackler
debugcommands: stabilize output of debugbundle by having a custom repr...
r34027 Stream params: {Compression: BZ}
changegroup -- {nbchanges: 5, targetphase: 2, version: 02}
Martin von Zweigbergk
bundle: add config option to include phases...
r33031 426bada5c67598ca65036d57d9e4b64b0c1ce7a0
112478962961147124edd43549aedd1a335e44bf
dc0947a82db884575bb76ea10ac97b08536bfa03
Martin von Zweigbergk
drawdag: include files from both parents in merge commits...
r33558 4e4f9194f9f181c57f62e823e8bdfa46ab9e4ff4
Martin von Zweigbergk
bundle: add config option to include phases...
r33031 03ca77807e919db8807c3749086dc36fb478cac0
Boris Feld
bundle: include advisory rev branch cache part in bundle2 bundle...
r36983 cache:rev-branch-cache -- {}
Augie Fackler
debugcommands: stabilize output of debugbundle by having a custom repr...
r34027 phase-heads -- {}
Martin von Zweigbergk
bundle: add config option to include phases...
r33031 dc0947a82db884575bb76ea10ac97b08536bfa03 public
03ca77807e919db8807c3749086dc36fb478cac0 draft
$ hg strip --no-backup A
$ hg unbundle -q bundle
$ rm bundle
$ hg log -G -T '{node|short} {desc} {phase}\n'
o 03ca77807e91 E draft
|
Martin von Zweigbergk
drawdag: include files from both parents in merge commits...
r33558 | o 4e4f9194f9f1 D secret
Martin von Zweigbergk
bundle: add config option to include phases...
r33031 |/|
o | dc0947a82db8 C public
| |
| o 112478962961 B secret
|/
o 426bada5c675 A public
$ hg bundle --base 'A + C' -r D bundle
2 changesets found
$ hg debugbundle bundle
Augie Fackler
debugcommands: stabilize output of debugbundle by having a custom repr...
r34027 Stream params: {Compression: BZ}
changegroup -- {nbchanges: 2, targetphase: 2, version: 02}
Martin von Zweigbergk
bundle: add config option to include phases...
r33031 112478962961147124edd43549aedd1a335e44bf
Martin von Zweigbergk
drawdag: include files from both parents in merge commits...
r33558 4e4f9194f9f181c57f62e823e8bdfa46ab9e4ff4
Boris Feld
bundle: include advisory rev branch cache part in bundle2 bundle...
r36983 cache:rev-branch-cache -- {}
Augie Fackler
debugcommands: stabilize output of debugbundle by having a custom repr...
r34027 phase-heads -- {}
Martin von Zweigbergk
bundle: add config option to include phases...
r33031 $ rm bundle
$ hg bundle --base A -r D bundle
3 changesets found
$ hg debugbundle bundle
Augie Fackler
debugcommands: stabilize output of debugbundle by having a custom repr...
r34027 Stream params: {Compression: BZ}
changegroup -- {nbchanges: 3, targetphase: 2, version: 02}
Martin von Zweigbergk
bundle: add config option to include phases...
r33031 112478962961147124edd43549aedd1a335e44bf
dc0947a82db884575bb76ea10ac97b08536bfa03
Martin von Zweigbergk
drawdag: include files from both parents in merge commits...
r33558 4e4f9194f9f181c57f62e823e8bdfa46ab9e4ff4
Boris Feld
bundle: include advisory rev branch cache part in bundle2 bundle...
r36983 cache:rev-branch-cache -- {}
Augie Fackler
debugcommands: stabilize output of debugbundle by having a custom repr...
r34027 phase-heads -- {}
Martin von Zweigbergk
bundle: add config option to include phases...
r33031 dc0947a82db884575bb76ea10ac97b08536bfa03 public
$ rm bundle
$ hg bundle --base 'B + C' -r 'D + E' bundle
2 changesets found
$ hg debugbundle bundle
Augie Fackler
debugcommands: stabilize output of debugbundle by having a custom repr...
r34027 Stream params: {Compression: BZ}
changegroup -- {nbchanges: 2, targetphase: 2, version: 02}
Martin von Zweigbergk
drawdag: include files from both parents in merge commits...
r33558 4e4f9194f9f181c57f62e823e8bdfa46ab9e4ff4
Martin von Zweigbergk
bundle: add config option to include phases...
r33031 03ca77807e919db8807c3749086dc36fb478cac0
Boris Feld
bundle: include advisory rev branch cache part in bundle2 bundle...
r36983 cache:rev-branch-cache -- {}
Augie Fackler
debugcommands: stabilize output of debugbundle by having a custom repr...
r34027 phase-heads -- {}
Martin von Zweigbergk
bundle: add config option to include phases...
r33031 03ca77807e919db8807c3749086dc36fb478cac0 draft
$ rm bundle