There are people who wants to do hg uncommit on dirty working directory, so
this patch adds a config which can be used to the achieve that.
Adds tests for the same.
( )
durin42 |
hg-reviewers |
There are people who wants to do hg uncommit on dirty working directory, so
this patch adds a config which can be used to the achieve that.
Adds tests for the same.
Lint Skipped |
Unit Tests Skipped |
Path | Packages | |||
---|---|---|---|---|
M | hgext/uncommit.py (3 lines) | |||
M | tests/test-uncommit.t (49 lines) |
abort: uncommitted changes | abort: uncommitted changes | ||||
[255] | [255] | ||||
$ hg uncommit files | $ hg uncommit files | ||||
$ cat files | $ cat files | ||||
abcde | abcde | ||||
foo | foo | ||||
$ hg commit -m "files abcde + foo" | $ hg commit -m "files abcde + foo" | ||||
Testing the 'experimental.uncommitondirtywdir' config | |||||
$ echo "bar" >> files | |||||
$ hg uncommit | |||||
abort: uncommitted changes | |||||
[255] | |||||
$ hg uncommit --config experimental.uncommitondirtywdir=True | |||||
$ hg commit -m "files abcde + foo" | |||||
Uncommit in the middle of a stack, does not move bookmark | Uncommit in the middle of a stack, does not move bookmark | ||||
$ hg checkout '.^^^' | $ hg checkout '.^^^' | ||||
1 files updated, 0 files merged, 2 files removed, 0 files unresolved | 1 files updated, 0 files merged, 2 files removed, 0 files unresolved | ||||
(leaving bookmark foo) | (leaving bookmark foo) | ||||
$ hg log -r . -p -T '{rev}:{node} {desc}' | $ hg log -r . -p -T '{rev}:{node} {desc}' | ||||
2:abf2df566fc193b3ac34d946e63c1583e4d4732b added file-abcdiff -r 69a232e754b0 -r abf2df566fc1 file-abc | 2:abf2df566fc193b3ac34d946e63c1583e4d4732b added file-abcdiff -r 69a232e754b0 -r abf2df566fc1 file-abc | ||||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 | ||||
+++ b/file-abc Thu Jan 01 00:00:00 1970 +0000 | +++ b/file-abc Thu Jan 01 00:00:00 1970 +0000 | ||||
@@ -0,0 +1,1 @@ | @@ -0,0 +1,1 @@ | ||||
+abc | +abc | ||||
diff -r 69a232e754b0 -r abf2df566fc1 files | diff -r 69a232e754b0 -r abf2df566fc1 files | ||||
--- a/files Thu Jan 01 00:00:00 1970 +0000 | --- a/files Thu Jan 01 00:00:00 1970 +0000 | ||||
+++ b/files Thu Jan 01 00:00:00 1970 +0000 | +++ b/files Thu Jan 01 00:00:00 1970 +0000 | ||||
@@ -1,1 +1,1 @@ | @@ -1,1 +1,1 @@ | ||||
-ab | -ab | ||||
+abc | +abc | ||||
$ hg bookmark | $ hg bookmark | ||||
foo 8:83815831694b | foo 9:48e5bd7cd583 | ||||
$ hg uncommit | $ hg uncommit | ||||
$ hg status | $ hg status | ||||
M files | M files | ||||
A file-abc | A file-abc | ||||
$ hg heads -T '{rev}:{node} {desc}' | $ hg heads -T '{rev}:{node} {desc}' | ||||
8:83815831694b1271e9f207cb1b79b2b19275edcb files abcde + foo (no-eol) | 9:48e5bd7cd583eb24164ef8b89185819c84c96ed7 files abcde + foo (no-eol) | ||||
$ hg bookmark | $ hg bookmark | ||||
foo 8:83815831694b | foo 9:48e5bd7cd583 | ||||
$ hg commit -m 'new abc' | $ hg commit -m 'new abc' | ||||
created new head | created new head | ||||
Partial uncommit in the middle, does not move bookmark | Partial uncommit in the middle, does not move bookmark | ||||
$ hg checkout '.^' | $ hg checkout '.^' | ||||
1 files updated, 0 files merged, 1 files removed, 0 files unresolved | 1 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
$ hg log -r . -p -T '{rev}:{node} {desc}' | $ hg log -r . -p -T '{rev}:{node} {desc}' | ||||
1:69a232e754b08d568c4899475faf2eb44b857802 added file-abdiff -r 3004d2d9b508 -r 69a232e754b0 file-ab | 1:69a232e754b08d568c4899475faf2eb44b857802 added file-abdiff -r 3004d2d9b508 -r 69a232e754b0 file-ab | ||||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 | ||||
+++ b/file-ab Thu Jan 01 00:00:00 1970 +0000 | +++ b/file-ab Thu Jan 01 00:00:00 1970 +0000 | ||||
@@ -0,0 +1,1 @@ | @@ -0,0 +1,1 @@ | ||||
+ab | +ab | ||||
diff -r 3004d2d9b508 -r 69a232e754b0 files | diff -r 3004d2d9b508 -r 69a232e754b0 files | ||||
--- a/files Thu Jan 01 00:00:00 1970 +0000 | --- a/files Thu Jan 01 00:00:00 1970 +0000 | ||||
+++ b/files Thu Jan 01 00:00:00 1970 +0000 | +++ b/files Thu Jan 01 00:00:00 1970 +0000 | ||||
@@ -1,1 +1,1 @@ | @@ -1,1 +1,1 @@ | ||||
-a | -a | ||||
+ab | +ab | ||||
$ hg bookmark | $ hg bookmark | ||||
foo 8:83815831694b | foo 9:48e5bd7cd583 | ||||
$ hg uncommit file-ab | $ hg uncommit file-ab | ||||
$ hg status | $ hg status | ||||
A file-ab | A file-ab | ||||
$ hg heads -T '{rev}:{node} {desc}\n' | $ hg heads -T '{rev}:{node} {desc}\n' | ||||
10:8eb87968f2edb7f27f27fe676316e179de65fff6 added file-ab | 11:8eb87968f2edb7f27f27fe676316e179de65fff6 added file-ab | ||||
9:5dc89ca4486f8a88716c5797fa9f498d13d7c2e1 new abc | 10:5dc89ca4486f8a88716c5797fa9f498d13d7c2e1 new abc | ||||
8:83815831694b1271e9f207cb1b79b2b19275edcb files abcde + foo | 9:48e5bd7cd583eb24164ef8b89185819c84c96ed7 files abcde + foo | ||||
$ hg bookmark | $ hg bookmark | ||||
foo 8:83815831694b | foo 9:48e5bd7cd583 | ||||
$ hg commit -m 'update ab' | $ hg commit -m 'update ab' | ||||
$ hg status | $ hg status | ||||
$ hg heads -T '{rev}:{node} {desc}\n' | $ hg heads -T '{rev}:{node} {desc}\n' | ||||
11:f21039c59242b085491bb58f591afc4ed1c04c09 update ab | 12:f21039c59242b085491bb58f591afc4ed1c04c09 update ab | ||||
9:5dc89ca4486f8a88716c5797fa9f498d13d7c2e1 new abc | 10:5dc89ca4486f8a88716c5797fa9f498d13d7c2e1 new abc | ||||
8:83815831694b1271e9f207cb1b79b2b19275edcb files abcde + foo | 9:48e5bd7cd583eb24164ef8b89185819c84c96ed7 files abcde + foo | ||||
$ hg log -G -T '{rev}:{node} {desc}' --hidden | $ hg log -G -T '{rev}:{node} {desc}' --hidden | ||||
@ 11:f21039c59242b085491bb58f591afc4ed1c04c09 update ab | @ 12:f21039c59242b085491bb58f591afc4ed1c04c09 update ab | ||||
| | | | ||||
o 10:8eb87968f2edb7f27f27fe676316e179de65fff6 added file-ab | o 11:8eb87968f2edb7f27f27fe676316e179de65fff6 added file-ab | ||||
| | | | ||||
| o 9:5dc89ca4486f8a88716c5797fa9f498d13d7c2e1 new abc | | o 10:5dc89ca4486f8a88716c5797fa9f498d13d7c2e1 new abc | ||||
| | | | | | ||||
| | o 8:83815831694b1271e9f207cb1b79b2b19275edcb files abcde + foo | | | o 9:48e5bd7cd583eb24164ef8b89185819c84c96ed7 files abcde + foo | ||||
| | | | | | | | ||||
| | | x 8:83815831694b1271e9f207cb1b79b2b19275edcb files abcde + foo | |||||
| | |/ | |||||
| | | x 7:0977fa602c2fd7d8427ed4e7ee15ea13b84c9173 update files for abcde | | | | x 7:0977fa602c2fd7d8427ed4e7ee15ea13b84c9173 update files for abcde | ||||
| | |/ | | | |/ | ||||
| | o 6:3727deee06f72f5ffa8db792ee299cf39e3e190b new change abcde | | | o 6:3727deee06f72f5ffa8db792ee299cf39e3e190b new change abcde | ||||
| | | | | | | | ||||
| | | x 5:0c07a3ccda771b25f1cb1edbd02e683723344ef1 new change abcde | | | | x 5:0c07a3ccda771b25f1cb1edbd02e683723344ef1 new change abcde | ||||
| | |/ | | | |/ | ||||
| | | x 4:6c4fd43ed714e7fcd8adbaa7b16c953c2e985b60 added file-abcde | | | | x 4:6c4fd43ed714e7fcd8adbaa7b16c953c2e985b60 added file-abcde | ||||
| | |/ | | | |/ | ||||
| | o 3:6db330d65db434145c0b59d291853e9a84719b24 added file-abcd | | | o 3:6db330d65db434145c0b59d291853e9a84719b24 added file-abcd | ||||
| | | | | | | | ||||
| | x 2:abf2df566fc193b3ac34d946e63c1583e4d4732b added file-abc | | | x 2:abf2df566fc193b3ac34d946e63c1583e4d4732b added file-abc | ||||
| |/ | | |/ | ||||
| x 1:69a232e754b08d568c4899475faf2eb44b857802 added file-ab | | x 1:69a232e754b08d568c4899475faf2eb44b857802 added file-ab | ||||
|/ | |/ | ||||
o 0:3004d2d9b50883c1538fc754a3aeb55f1b4084f6 added file-a | o 0:3004d2d9b50883c1538fc754a3aeb55f1b4084f6 added file-a | ||||
Uncommit with draft parent | Uncommit with draft parent | ||||
$ hg uncommit | $ hg uncommit | ||||
$ hg phase -r . | $ hg phase -r . | ||||
10: draft | 11: draft | ||||
$ hg commit -m 'update ab again' | $ hg commit -m 'update ab again' | ||||
Uncommit with public parent | Uncommit with public parent | ||||
$ hg phase -p "::.^" | $ hg phase -p "::.^" | ||||
$ hg uncommit | $ hg uncommit | ||||
$ hg phase -r . | $ hg phase -r . | ||||
10: public | 11: public | ||||
Partial uncommit with public parent | Partial uncommit with public parent | ||||
$ echo xyz > xyz | $ echo xyz > xyz | ||||
$ hg add xyz | $ hg add xyz | ||||
$ hg commit -m "update ab and add xyz" | $ hg commit -m "update ab and add xyz" | ||||
$ hg uncommit xyz | $ hg uncommit xyz | ||||
$ hg status | $ hg status | ||||
A xyz | A xyz | ||||
$ hg phase -r . | $ hg phase -r . | ||||
14: draft | 15: draft | ||||
$ hg phase -r ".^" | $ hg phase -r ".^" | ||||
10: public | 11: public | ||||
Uncommit leaving an empty changeset | Uncommit leaving an empty changeset | ||||
$ cd $TESTTMP | $ cd $TESTTMP | ||||
$ hg init repo1 | $ hg init repo1 | ||||
$ cd repo1 | $ cd repo1 | ||||
$ hg debugdrawdag <<'EOS' | $ hg debugdrawdag <<'EOS' | ||||
> Q | > Q |
Perhaps we should test this case, dirtyuncommit & merge.