summaryrefslogtreecommitdiff
path: root/tests/test-rollback.t
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-rollback.t')
-rw-r--r--tests/test-rollback.t187
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 ..