tests/test-bundle-phases.t
changeset 33031 e8c8d81eb864
child 33032 8e3021fd1a44
--- /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