Mercurial > hg
diff tests/test-bundle-phases.t @ 33031:e8c8d81eb864
bundle: add config option to include phases
This adds an experimental.bundle-phases config option to include phase
information in bundles. As with the recently added support for
bundling obsmarkers, the support for bundling phases is hidden behind
the config option until we decide to make a bundlespec v3 that
includes phases (and obsmarkers and ...).
We could perhaps use the listkeys format for this, but that's
considered obsolete according to Pierre-Yves. Instead, we introduce a
new "phase-heads" bundle part. The new part contains the phase heads
among the set of bundled revisions. It does not include those in
secret phase; any head in the bundle that is not mentioned in the
phase-heads part is assumed to be secret. As a special case, an empty
phase-heads part thus means that any changesets should be added in
secret phase. (If we ever add a fourth phase, we'll include secret in
the part and we'll add a version number.)
For now, phases are only included by "hg bundle", and not by
e.g. strip and rebase.
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Thu, 22 Jun 2017 10:10:02 -0700 |
parents | |
children | 8e3021fd1a44 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-bundle-phases.t Thu Jun 22 10:10:02 2017 -0700 @@ -0,0 +1,259 @@ + $ 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 + Stream params: sortdict([('Compression', 'BZ')]) + changegroup -- "sortdict([('version', '02'), ('nbchanges', '3')])" + 26805aba1e600a82e93661149f2313866a221a7b + f585351a92f85104bff7c284233c338b10eb1df7 + 9bc730a19041f9ec7cb33c626e811aa233efb18c + phase-heads -- 'sortdict()' + 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 + + $ 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 + | + | o 215e7b0814e1 D secret + |/| + 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 + Stream params: sortdict([('Compression', 'BZ')]) + changegroup -- "sortdict([('version', '02'), ('nbchanges', '5')])" + 426bada5c67598ca65036d57d9e4b64b0c1ce7a0 + 112478962961147124edd43549aedd1a335e44bf + dc0947a82db884575bb76ea10ac97b08536bfa03 + 215e7b0814e1cac8e2614e7284f2a5dc266b4323 + 03ca77807e919db8807c3749086dc36fb478cac0 + phase-heads -- 'sortdict()' + 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 + | + | o 215e7b0814e1 D secret + |/| + 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 + Stream params: sortdict([('Compression', 'BZ')]) + changegroup -- "sortdict([('version', '02'), ('nbchanges', '2')])" + 112478962961147124edd43549aedd1a335e44bf + 215e7b0814e1cac8e2614e7284f2a5dc266b4323 + phase-heads -- 'sortdict()' + $ rm bundle + + $ hg bundle --base A -r D bundle + 3 changesets found + $ hg debugbundle bundle + Stream params: sortdict([('Compression', 'BZ')]) + changegroup -- "sortdict([('version', '02'), ('nbchanges', '3')])" + 112478962961147124edd43549aedd1a335e44bf + dc0947a82db884575bb76ea10ac97b08536bfa03 + 215e7b0814e1cac8e2614e7284f2a5dc266b4323 + phase-heads -- 'sortdict()' + dc0947a82db884575bb76ea10ac97b08536bfa03 public + $ rm bundle + + $ hg bundle --base 'B + C' -r 'D + E' bundle + 2 changesets found + $ hg debugbundle bundle + Stream params: sortdict([('Compression', 'BZ')]) + changegroup -- "sortdict([('version', '02'), ('nbchanges', '2')])" + 215e7b0814e1cac8e2614e7284f2a5dc266b4323 + 03ca77807e919db8807c3749086dc36fb478cac0 + phase-heads -- 'sortdict()' + 03ca77807e919db8807c3749086dc36fb478cac0 draft + $ rm bundle