--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-rewind.t Sat Jun 16 23:11:52 2018 +0200
@@ -0,0 +1,225 @@
+This test file test the rewind command in several situations.
+
+Global setup
+============
+
+ $ . $TESTDIR/testlib/common.sh
+ $ cat >> $HGRCPATH <<EOF
+ > [ui]
+ > interactive = true
+ > [phases]
+ > publish=False
+ > [extensions]
+ > evolve =
+ > EOF
+
+ $ hg init rewind-testing-base
+ $ cd rewind-testing-base
+ $ echo a > root
+ $ hg add root
+ $ hg ci -m 'c_ROOT'
+ $ echo a > A
+ $ hg add A
+ $ hg ci -m 'c_A0'
+ $ echo a > B
+ $ hg add B
+ $ hg ci -m 'c_B0'
+ $ hg log -G
+ @ changeset: 2:7e594302a05d
+ | tag: tip
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: c_B0
+ |
+ o changeset: 1:579f120ba918
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: c_A0
+ |
+ o changeset: 0:eba9c2249fe7
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: c_ROOT
+
+
+ $ cd ..
+
+Test rewinding to single changesets
+====================================
+
+ $ hg clone rewind-testing-base rewind-testing-simple-prune
+ updating to branch default
+ 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ cd rewind-testing-simple-prune
+
+Prune changeset unrelated to the working copy
+---------------------------------------------
+
+Setup
+`````
+
+Update to an unrelated changeset
+
+ $ hg up 'desc("c_ROOT")'
+ 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
+
+Prune the head
+
+ $ hg prune -r 'desc("c_B0")'
+ 1 changesets pruned
+ $ hg log -G
+ o changeset: 1:579f120ba918
+ | tag: tip
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: c_A0
+ |
+ @ changeset: 0:eba9c2249fe7
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: c_ROOT
+
+
+Actual rewind
+`````````````
+
+ $ hg rewind --hidden --to 'desc("c_B0")'
+ $ hg debugobsolete
+ 7e594302a05d3769b27be88fc3cdfd39d7498498 0 {579f120ba91885449adc92eedf48ef3569742cee} (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'prune', 'user': 'test'}
+ 7e594302a05d3769b27be88fc3cdfd39d7498498 073989a581cf430a844192364fa37606357cbbc2 4 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '2', 'operation': 'rewind', 'user': 'test'}
+ $ hg obslog -r 'desc("c_B0")'
+ o 073989a581cf (3) c_B0
+ |
+ x 7e594302a05d (2) c_B0
+ pruned using prune by test (Thu Jan 01 00:00:00 1970 +0000)
+ rewritten(meta) as 073989a581cf using rewind by test (Thu Jan 01 00:00:00 1970 +0000)
+
+ $ hg log -G
+ o changeset: 3:073989a581cf
+ | tag: tip
+ | parent: 1:579f120ba918
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: c_B0
+ |
+ o changeset: 1:579f120ba918
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: c_A0
+ |
+ @ changeset: 0:eba9c2249fe7
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: c_ROOT
+
+XXX-TODO: fix the obsfate from "meta-changed as 3" to "identical" or something.
+
+ $ hg log -G --hidden
+ o changeset: 3:073989a581cf
+ | tag: tip
+ | parent: 1:579f120ba918
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: c_B0
+ |
+ | x changeset: 2:7e594302a05d
+ |/ user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | obsolete: meta-changed using rewind as 3:073989a581cf
+ | summary: c_B0
+ |
+ o changeset: 1:579f120ba918
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: c_A0
+ |
+ @ changeset: 0:eba9c2249fe7
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: c_ROOT
+
+
+Other independant rewind create a different revision
+----------------------------------------------------------
+
+setup
+`````
+
+note: we use "default-date" to make it a "different rewind"
+
+ $ echo '[devel]' >> $HGRCPATH
+ $ echo 'default-date = 1 0' >> $HGRCPATH
+
+Actual rewind
+`````````````
+
+ $ hg prune 'desc("c_B0")'
+ 1 changesets pruned
+ $ hg rewind --hidden --to 'min(desc("c_B0"))'
+ $ hg debugobsolete
+ 7e594302a05d3769b27be88fc3cdfd39d7498498 0 {579f120ba91885449adc92eedf48ef3569742cee} (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'prune', 'user': 'test'}
+ 7e594302a05d3769b27be88fc3cdfd39d7498498 073989a581cf430a844192364fa37606357cbbc2 4 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '2', 'operation': 'rewind', 'user': 'test'}
+ 073989a581cf430a844192364fa37606357cbbc2 0 {579f120ba91885449adc92eedf48ef3569742cee} (Thu Jan 01 00:00:01 1970 +0000) {'ef1': '0', 'operation': 'prune', 'user': 'test'}
+ 7e594302a05d3769b27be88fc3cdfd39d7498498 48acf2c0d9c8961859ce9a913671eb2adc9b057b 4 (Thu Jan 01 00:00:01 1970 +0000) {'ef1': '34', 'operation': 'rewind', 'user': 'test'}
+ $ hg obslog -r 'desc("c_B0")' --all
+ x 073989a581cf (3) c_B0
+ | pruned using prune by test (Thu Jan 01 00:00:01 1970 +0000)
+ |
+ | o 48acf2c0d9c8 (4) c_B0
+ |/
+ x 7e594302a05d (2) c_B0
+ pruned using prune by test (Thu Jan 01 00:00:00 1970 +0000)
+ rewritten(meta) as 073989a581cf using rewind by test (Thu Jan 01 00:00:00 1970 +0000)
+ rewritten(meta, date) as 48acf2c0d9c8 using rewind by test (Thu Jan 01 00:00:01 1970 +0000)
+
+ $ hg log -G
+ o changeset: 4:48acf2c0d9c8
+ | tag: tip
+ | parent: 1:579f120ba918
+ | user: test
+ | date: Thu Jan 01 00:00:01 1970 +0000
+ | summary: c_B0
+ |
+ o changeset: 1:579f120ba918
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: c_A0
+ |
+ @ changeset: 0:eba9c2249fe7
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: c_ROOT
+
+ $ hg log -G --hidden
+ o changeset: 4:48acf2c0d9c8
+ | tag: tip
+ | parent: 1:579f120ba918
+ | user: test
+ | date: Thu Jan 01 00:00:01 1970 +0000
+ | summary: c_B0
+ |
+ | x changeset: 3:073989a581cf
+ |/ parent: 1:579f120ba918
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | obsolete: pruned using prune
+ | summary: c_B0
+ |
+ | x changeset: 2:7e594302a05d
+ |/ user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | obsolete: rewritten using rewind as 4:48acf2c0d9c8
+ | obsolete: meta-changed using rewind as 3:073989a581cf
+ | summary: c_B0
+ |
+ o changeset: 1:579f120ba918
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: c_A0
+ |
+ @ changeset: 0:eba9c2249fe7
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: c_ROOT
+
+ $ cd ..