rewind: add a message about obsolete changeset
Not the best output, but useful to have the data. We can improve that later.
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")'
rewinded to 1 changesets
$ 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"))'
rewinded to 1 changesets
$ 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 ..
rewind a simple amend - creating content-divergence
---------------------------------------------------
Setup
`````
$ hg clone rewind-testing-base rewind-testing-single-rewrite
updating to branch default
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd rewind-testing-single-rewrite
$ echo BB > B
$ hg amend -m 'c_B1'
$ hg log -G
@ changeset: 3:25c8f5ab0c3b
| tag: tip
| parent: 1:579f120ba918
| user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: c_B1
|
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
Actual rewind
`````````````
$ hg rewind --hidden --to 'desc("c_B0")' --as-divergence
2 new content-divergent changesets
rewinded to 1 changesets
$ hg debugobsolete
7e594302a05d3769b27be88fc3cdfd39d7498498 25c8f5ab0c3bb569ec672570f1a901be4c6f032b 0 (Thu Jan 01 00:00:01 1970 +0000) {'ef1': '9', 'operation': 'amend', 'user': 'test'}
7e594302a05d3769b27be88fc3cdfd39d7498498 48acf2c0d9c8961859ce9a913671eb2adc9b057b 4 (Thu Jan 01 00:00:01 1970 +0000) {'ef1': '34', 'operation': 'rewind', 'user': 'test'}
$ hg obslog --rev 'desc("c_B0")'
* 48acf2c0d9c8 (4) c_B0
|
x 7e594302a05d (2) c_B0
rewritten(description, content) as 25c8f5ab0c3b using amend by test (Thu Jan 01 00:00:01 1970 +0000)
rewritten(meta, date) as 48acf2c0d9c8 using rewind by test (Thu Jan 01 00:00:01 1970 +0000)
$ hg log -G
* changeset: 4:48acf2c0d9c8
| tag: tip
| parent: 1:579f120ba918
| user: test
| date: Thu Jan 01 00:00:01 1970 +0000
| instability: content-divergent
| summary: c_B0
|
| @ changeset: 3:25c8f5ab0c3b
|/ parent: 1:579f120ba918
| user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| instability: content-divergent
| summary: c_B1
|
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
$ hg log -G --hidden
* changeset: 4:48acf2c0d9c8
| tag: tip
| parent: 1:579f120ba918
| user: test
| date: Thu Jan 01 00:00:01 1970 +0000
| instability: content-divergent
| summary: c_B0
|
| @ changeset: 3:25c8f5ab0c3b
|/ parent: 1:579f120ba918
| user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| instability: content-divergent
| summary: c_B1
|
| x changeset: 2:7e594302a05d
|/ user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| obsolete: rewritten using rewind as 4:48acf2c0d9c8
| obsolete: rewritten using amend as 3:25c8f5ab0c3b
| 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
Cleanup
```````
$ hg prune 'max(desc("c_B0"))'
1 changesets pruned
$ hg log -G
@ changeset: 3:25c8f5ab0c3b
| tag: tip
| parent: 1:579f120ba918
| user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: c_B1
|
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
$ echo 'default-date = 2 0' >> $HGRCPATH
rewind a simple amend - obsoleting the current latest successors
----------------------------------------------------------------
$ hg rewind --hidden --to 'min(desc("c_B0"))'
rewinded to 1 changesets
(1 changesets obsoleted)
$ hg debugobsolete
7e594302a05d3769b27be88fc3cdfd39d7498498 25c8f5ab0c3bb569ec672570f1a901be4c6f032b 0 (Thu Jan 01 00:00:01 1970 +0000) {'ef1': '9', 'operation': 'amend', 'user': 'test'}
7e594302a05d3769b27be88fc3cdfd39d7498498 48acf2c0d9c8961859ce9a913671eb2adc9b057b 4 (Thu Jan 01 00:00:01 1970 +0000) {'ef1': '34', 'operation': 'rewind', 'user': 'test'}
48acf2c0d9c8961859ce9a913671eb2adc9b057b 0 {579f120ba91885449adc92eedf48ef3569742cee} (Thu Jan 01 00:00:01 1970 +0000) {'ef1': '0', 'operation': 'prune', 'user': 'test'}
7e594302a05d3769b27be88fc3cdfd39d7498498 d8b4471cfb3caa290e0a78ae6bc57d78656c9075 4 (Thu Jan 01 00:00:02 1970 +0000) {'ef1': '34', 'operation': 'rewind', 'user': 'test'}
25c8f5ab0c3bb569ec672570f1a901be4c6f032b d8b4471cfb3caa290e0a78ae6bc57d78656c9075 0 (Thu Jan 01 00:00:02 1970 +0000) {'ef1': '43', 'operation': 'rewind', 'user': 'test'}
$ hg obslog --rev 'desc("c_B0")'
o d8b4471cfb3c (5) c_B0
|\
@ | 25c8f5ab0c3b (3) c_B1
|/ rewritten(description, meta, date, content) as d8b4471cfb3c using rewind by test (Thu Jan 01 00:00:02 1970 +0000)
|
x 7e594302a05d (2) c_B0
rewritten(description, content) as 25c8f5ab0c3b using amend by test (Thu Jan 01 00:00:01 1970 +0000)
rewritten(meta, date) as 48acf2c0d9c8 using rewind by test (Thu Jan 01 00:00:01 1970 +0000)
rewritten(meta, date) as d8b4471cfb3c using rewind by test (Thu Jan 01 00:00:02 1970 +0000)
$ hg log -G
o changeset: 5:d8b4471cfb3c
| tag: tip
| parent: 1:579f120ba918
| user: test
| date: Thu Jan 01 00:00:02 1970 +0000
| summary: c_B0
|
| @ changeset: 3:25c8f5ab0c3b
|/ parent: 1:579f120ba918
| user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| obsolete: rewritten using rewind as 5:d8b4471cfb3c
| summary: c_B1
|
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
$ hg log -G --hidden
o changeset: 5:d8b4471cfb3c
| tag: tip
| parent: 1:579f120ba918
| user: test
| date: Thu Jan 01 00:00:02 1970 +0000
| summary: c_B0
|
| x changeset: 4:48acf2c0d9c8
|/ parent: 1:579f120ba918
| user: test
| date: Thu Jan 01 00:00:01 1970 +0000
| obsolete: pruned using prune
| summary: c_B0
|
| @ changeset: 3:25c8f5ab0c3b
|/ parent: 1:579f120ba918
| user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| obsolete: rewritten using rewind as 5:d8b4471cfb3c
| summary: c_B1
|
| x changeset: 2:7e594302a05d
|/ user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| obsolete: rewritten using rewind as 5:d8b4471cfb3c
| obsolete: rewritten using rewind as 4:48acf2c0d9c8
| obsolete: rewritten using amend as 3:25c8f5ab0c3b
| 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