diff options
Diffstat (limited to 'tests/test-commit-amend.t')
-rw-r--r-- | tests/test-commit-amend.t | 357 |
1 files changed, 357 insertions, 0 deletions
diff --git a/tests/test-commit-amend.t b/tests/test-commit-amend.t new file mode 100644 index 0000000..8550fb5 --- /dev/null +++ b/tests/test-commit-amend.t @@ -0,0 +1,357 @@ + $ hg init + +Setup: + + $ echo a >> a + $ hg ci -Am 'base' + adding a + +Refuse to amend public csets: + + $ hg phase -r . -p + $ hg ci --amend + abort: cannot amend public changesets + [255] + $ hg phase -r . -f -d + + $ echo a >> a + $ hg ci -Am 'base1' + +Nothing to amend: + + $ hg ci --amend + nothing changed + [1] + + $ cat >> $HGRCPATH <<EOF + > [hooks] + > pretxncommit.foo = sh -c "echo \"pretxncommit \$HG_NODE\"; hg id -r \$HG_NODE" + > EOF + +Amending changeset with changes in working dir: + + $ echo a >> a + $ hg ci --amend -m 'amend base1' + pretxncommit 9cd25b479c51be2f4ed2c38e7abdf7ce67d8e0dc + 9cd25b479c51 tip + saved backup bundle to $TESTTMP/.hg/strip-backup/489edb5b847d-amend-backup.hg (glob) + $ echo 'pretxncommit.foo = ' >> $HGRCPATH + $ hg diff -c . + diff -r ad120869acf0 -r 9cd25b479c51 a + --- a/a Thu Jan 01 00:00:00 1970 +0000 + +++ b/a Thu Jan 01 00:00:00 1970 +0000 + @@ -1,1 +1,3 @@ + a + +a + +a + $ hg log + changeset: 1:9cd25b479c51 + tag: tip + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: amend base1 + + changeset: 0:ad120869acf0 + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: base + + +Add new file: + + $ echo b > b + $ hg ci --amend -Am 'amend base1 new file' + adding b + saved backup bundle to $TESTTMP/.hg/strip-backup/9cd25b479c51-amend-backup.hg (glob) + +Remove file that was added in amended commit: + + $ hg rm b + $ hg ci --amend -m 'amend base1 remove new file' + saved backup bundle to $TESTTMP/.hg/strip-backup/e2bb3ecffd2f-amend-backup.hg (glob) + + $ hg cat b + b: no such file in rev 664a9b2d60cd + [1] + +No changes, just a different message: + + $ hg ci -v --amend -m 'no changes, new message' + amending changeset 664a9b2d60cd + copying changeset 664a9b2d60cd to ad120869acf0 + a + stripping amended changeset 664a9b2d60cd + 1 changesets found + saved backup bundle to $TESTTMP/.hg/strip-backup/664a9b2d60cd-amend-backup.hg (glob) + 1 changesets found + adding branch + adding changesets + adding manifests + adding file changes + added 1 changesets with 1 changes to 1 files + committed changeset 1:ea6e356ff2ad + $ hg diff -c . + diff -r ad120869acf0 -r ea6e356ff2ad a + --- a/a Thu Jan 01 00:00:00 1970 +0000 + +++ b/a Thu Jan 01 00:00:00 1970 +0000 + @@ -1,1 +1,3 @@ + a + +a + +a + $ hg log + changeset: 1:ea6e356ff2ad + tag: tip + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: no changes, new message + + changeset: 0:ad120869acf0 + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: base + + +Disable default date on commit so when -d isn't given, the old date is preserved: + + $ echo '[defaults]' >> $HGRCPATH + $ echo 'commit=' >> $HGRCPATH + +Test -u/-d: + + $ hg ci --amend -u foo -d '1 0' + saved backup bundle to $TESTTMP/.hg/strip-backup/ea6e356ff2ad-amend-backup.hg (glob) + $ echo a >> a + $ hg ci --amend -u foo -d '1 0' + saved backup bundle to $TESTTMP/.hg/strip-backup/377b91ce8b56-amend-backup.hg (glob) + $ hg log -r . + changeset: 1:2c94e4a5756f + tag: tip + user: foo + date: Thu Jan 01 00:00:01 1970 +0000 + summary: no changes, new message + + +Open editor with old commit message if a message isn't given otherwise: + + $ cat > editor.sh << '__EOF__' + > #!/bin/sh + > cat $1 + > echo "another precious commit message" > "$1" + > __EOF__ + $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg commit --amend -v + amending changeset 2c94e4a5756f + copying changeset 2c94e4a5756f to ad120869acf0 + no changes, new message + + + HG: Enter commit message. Lines beginning with 'HG:' are removed. + HG: Leave message empty to abort commit. + HG: -- + HG: user: foo + HG: branch 'default' + HG: changed a + a + stripping amended changeset 2c94e4a5756f + 1 changesets found + saved backup bundle to $TESTTMP/.hg/strip-backup/2c94e4a5756f-amend-backup.hg (glob) + 1 changesets found + adding branch + adding changesets + adding manifests + adding file changes + added 1 changesets with 1 changes to 1 files + committed changeset 1:ffb49186f961 + +Same, but with changes in working dir (different code path): + + $ echo a >> a + $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg commit --amend -v + amending changeset ffb49186f961 + another precious commit message + + + HG: Enter commit message. Lines beginning with 'HG:' are removed. + HG: Leave message empty to abort commit. + HG: -- + HG: user: foo + HG: branch 'default' + HG: changed a + a + copying changeset 27f3aacd3011 to ad120869acf0 + a + stripping intermediate changeset 27f3aacd3011 + stripping amended changeset ffb49186f961 + 2 changesets found + saved backup bundle to $TESTTMP/.hg/strip-backup/ffb49186f961-amend-backup.hg (glob) + 1 changesets found + adding branch + adding changesets + adding manifests + adding file changes + added 1 changesets with 1 changes to 1 files + committed changeset 1:fb6cca43446f + + $ rm editor.sh + $ hg log -r . + changeset: 1:fb6cca43446f + tag: tip + user: foo + date: Thu Jan 01 00:00:01 1970 +0000 + summary: another precious commit message + + +Moving bookmarks, preserve active bookmark: + + $ hg book book1 + $ hg book book2 + $ hg ci --amend -m 'move bookmarks' + saved backup bundle to $TESTTMP/.hg/strip-backup/fb6cca43446f-amend-backup.hg (glob) + $ hg book + book1 1:0cf1c7a51bcf + * book2 1:0cf1c7a51bcf + $ echo a >> a + $ hg ci --amend -m 'move bookmarks' + saved backup bundle to $TESTTMP/.hg/strip-backup/0cf1c7a51bcf-amend-backup.hg (glob) + $ hg book + book1 1:7344472bd951 + * book2 1:7344472bd951 + + $ echo '[defaults]' >> $HGRCPATH + $ echo "commit=-d '0 0'" >> $HGRCPATH + +Moving branches: + + $ hg branch foo + marked working directory as branch foo + (branches are permanent and global, did you want a bookmark?) + $ echo a >> a + $ hg ci -m 'branch foo' + $ hg branch default -f + marked working directory as branch default + (branches are permanent and global, did you want a bookmark?) + $ hg ci --amend -m 'back to default' + saved backup bundle to $TESTTMP/.hg/strip-backup/1661ca36a2db-amend-backup.hg (glob) + $ hg branches + default 2:f24ee5961967 + +Close branch: + + $ hg up -q 0 + $ echo b >> b + $ hg branch foo + marked working directory as branch foo + (branches are permanent and global, did you want a bookmark?) + $ hg ci -Am 'fork' + adding b + $ echo b >> b + $ hg ci -mb + $ hg ci --amend --close-branch -m 'closing branch foo' + saved backup bundle to $TESTTMP/.hg/strip-backup/c962248fa264-amend-backup.hg (glob) + +Same thing, different code path: + + $ echo b >> b + $ hg ci -m 'reopen branch' + reopening closed branch head 4 + $ echo b >> b + $ hg ci --amend --close-branch + saved backup bundle to $TESTTMP/.hg/strip-backup/5e302dcc12b8-amend-backup.hg (glob) + $ hg branches + default 2:f24ee5961967 + +Refuse to amend merges: + + $ hg up -q default + $ hg merge foo + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + (branch merge, don't forget to commit) + $ hg ci --amend + abort: cannot amend while merging + [255] + $ hg ci -m 'merge' + $ hg ci --amend + abort: cannot amend merge changesets + [255] + +Follow copies/renames: + + $ hg mv b c + $ hg ci -m 'b -> c' + $ hg mv c d + $ hg ci --amend -m 'b -> d' + saved backup bundle to $TESTTMP/.hg/strip-backup/9c207120aa98-amend-backup.hg (glob) + $ hg st --rev '.^' --copies d + A d + b + $ hg cp d e + $ hg ci -m 'e = d' + $ hg cp e f + $ hg ci --amend -m 'f = d' + saved backup bundle to $TESTTMP/.hg/strip-backup/fda2b3b27b22-amend-backup.hg (glob) + $ hg st --rev '.^' --copies f + A f + d + + $ mv f f.orig + $ hg rm -A f + $ hg ci -m removef + $ hg cp a f + $ mv f.orig f + $ hg ci --amend -m replacef + saved backup bundle to $TESTTMP/.hg/strip-backup/20a7413547f9-amend-backup.hg (glob) + $ hg st --change . --copies + $ hg log -r . --template "{file_copies}\n" + + +Move added file (issue3410): + + $ echo g >> g + $ hg ci -Am g + adding g + $ hg mv g h + $ hg ci --amend + saved backup bundle to $TESTTMP/.hg/strip-backup/5daa77a5d616-amend-backup.hg (glob) + $ hg st --change . --copies h + A h + $ hg log -r . --template "{file_copies}\n" + + +Can't rollback an amend: + + $ hg rollback + no rollback information available + [1] + +Preserve extra dict (issue3430): + + $ hg branch a + marked working directory as branch a + (branches are permanent and global, did you want a bookmark?) + $ echo a >> a + $ hg ci -ma + $ hg ci --amend -m "a'" + saved backup bundle to $TESTTMP/.hg/strip-backup/167f8e3031df-amend-backup.hg (glob) + $ hg log -r . --template "{branch}\n" + a + $ hg ci --amend -m "a''" + saved backup bundle to $TESTTMP/.hg/strip-backup/ceac1a44c806-amend-backup.hg (glob) + $ hg log -r . --template "{branch}\n" + a + +Also preserve other entries in the dict that are in the old commit, +first graft something so there's an additional entry: + + $ hg up 0 -q + $ echo z > z + $ hg ci -Am 'fork' + adding z + created new head + $ hg up 11 + 5 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ hg graft 12 + grafting revision 12 + $ hg ci --amend -m 'graft amend' + saved backup bundle to $TESTTMP/.hg/strip-backup/18a5124daf7a-amend-backup.hg (glob) + $ hg log -r . --debug | grep extra + extra: branch=a + extra: source=2647734878ef0236dda712fae9c1651cf694ea8a |