diff options
Diffstat (limited to 'tests/test-rollback.t')
-rw-r--r-- | tests/test-rollback.t | 187 |
1 files changed, 187 insertions, 0 deletions
diff --git a/tests/test-rollback.t b/tests/test-rollback.t new file mode 100644 index 0000000..305555b --- /dev/null +++ b/tests/test-rollback.t @@ -0,0 +1,187 @@ +setup repo + $ hg init t + $ cd t + $ echo a > a + $ hg commit -Am'add a' + adding a + $ hg verify + checking changesets + checking manifests + crosschecking files in changesets and manifests + checking files + 1 files, 1 changesets, 1 total revisions + $ hg parents + changeset: 0:1f0dee641bb7 + tag: tip + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: add a + + +rollback to null revision + $ hg status + $ hg rollback + repository tip rolled back to revision -1 (undo commit) + working directory now based on revision -1 + $ hg verify + checking changesets + checking manifests + crosschecking files in changesets and manifests + checking files + 0 files, 0 changesets, 0 total revisions + $ hg parents + $ hg status + A a + +Two changesets this time so we rollback to a real changeset + $ hg commit -m'add a again' + $ echo a >> a + $ hg commit -m'modify a' + +Test issue 902 (current branch is preserved) + $ hg branch test + marked working directory as branch test + (branches are permanent and global, did you want a bookmark?) + $ hg rollback + repository tip rolled back to revision 0 (undo commit) + working directory now based on revision 0 + $ hg branch + default + +Test issue 1635 (commit message saved) + $ cat .hg/last-message.txt ; echo + modify a + +Test rollback of hg before issue 902 was fixed + + $ hg commit -m "test3" + $ hg branch test + marked working directory as branch test + (branches are permanent and global, did you want a bookmark?) + $ rm .hg/undo.branch + $ hg rollback + repository tip rolled back to revision 0 (undo commit) + named branch could not be reset: current branch is still 'test' + working directory now based on revision 0 + $ hg branch + test + +working dir unaffected by rollback: do not restore dirstate et. al. + $ hg log --template '{rev} {branch} {desc|firstline}\n' + 0 default add a again + $ hg status + M a + $ hg bookmark foo + $ hg commit -m'modify a again' + $ echo b > b + $ hg commit -Am'add b' + adding b + $ hg log --template '{rev} {branch} {desc|firstline}\n' + 2 test add b + 1 test modify a again + 0 default add a again + $ hg update default + 1 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ hg bookmark bar + $ cat .hg/undo.branch ; echo + test + $ hg rollback -f + repository tip rolled back to revision 1 (undo commit) + $ hg id -n + 0 + $ hg branch + default + $ cat .hg/bookmarks.current ; echo + bar + $ hg bookmark --delete foo + +rollback by pretxncommit saves commit message (issue 1635) + + $ echo a >> a + $ hg --config hooks.pretxncommit=false commit -m"precious commit message" + transaction abort! + rollback completed + abort: pretxncommit hook exited with status * (glob) + [255] + $ cat .hg/last-message.txt ; echo + precious commit message + +same thing, but run $EDITOR + + $ cat > editor.sh << '__EOF__' + > echo "another precious commit message" > "$1" + > __EOF__ + $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg --config hooks.pretxncommit=false commit 2>&1 + transaction abort! + rollback completed + note: commit message saved in .hg/last-message.txt + abort: pretxncommit hook exited with status * (glob) + [255] + $ cat .hg/last-message.txt + another precious commit message + +test rollback on served repository + +#if serve + $ hg commit -m "precious commit message" + $ hg serve -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log + $ cat hg.pid >> $DAEMON_PIDS + $ cd .. + $ hg clone http://localhost:$HGPORT u + requesting all changes + adding changesets + adding manifests + adding file changes + added 3 changesets with 2 changes to 1 files (+1 heads) + updating to branch default + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ cd u + $ hg id default + 068774709090 + +now rollback and observe that 'hg serve' reloads the repository and +presents the correct tip changeset: + + $ hg -R ../t rollback + repository tip rolled back to revision 1 (undo commit) + working directory now based on revision 0 + $ hg id default + 791dd2169706 +#endif + +update to older changeset and then refuse rollback, because +that would lose data (issue2998) + $ cd ../t + $ hg -q update + $ rm `hg status -un` + $ template='{rev}:{node|short} [{branch}] {desc|firstline}\n' + $ echo 'valuable new file' > b + $ echo 'valuable modification' >> a + $ hg commit -A -m'a valuable change' + adding b + $ hg update 0 + 1 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ hg rollback + abort: rollback of last commit while not checked out may lose data + (use -f to force) + [255] + $ hg tip -q + 2:4d9cd3795eea + $ hg rollback -f + repository tip rolled back to revision 1 (undo commit) + $ hg status + $ hg log --removed b # yep, it's gone + +same again, but emulate an old client that doesn't write undo.desc + $ hg -q update + $ echo 'valuable modification redux' >> a + $ hg commit -m'a valuable change redux' + $ rm .hg/undo.desc + $ hg update 0 + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg rollback + rolling back unknown transaction + $ cat a + a + + $ cd .. |