##// END OF EJS Templates
configitems: register the test 'failafterfinalize.fail' config
configitems: register the test 'failafterfinalize.fail' config

File last commit:

r34662:eb586ed5 default
r34766:f3e4a5ad default
Show More
test-rollback.t
458 lines | 12.0 KiB | text/troff | Tads3Lexer
Greg Ward
test-rollback: tinker a bit to make it easier to add more tests.
r15108 setup repo
Martin Geisler
tests: remove redundant mkdir...
r13956 $ hg init t
Matt Mackall
tests: unify test-rollback
r12485 $ cd t
$ echo a > a
Greg Ward
test-rollback: tinker a bit to make it easier to add more tests.
r15108 $ hg commit -Am'add a'
adding a
Matt Mackall
tests: unify test-rollback
r12485 $ hg verify
checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
1 files, 1 changesets, 1 total revisions
$ hg parents
Greg Ward
test-rollback: tinker a bit to make it easier to add more tests.
r15108 changeset: 0:1f0dee641bb7
Matt Mackall
tests: unify test-rollback
r12485 tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
Greg Ward
test-rollback: tinker a bit to make it easier to add more tests.
r15108 summary: add a
Matt Mackall
tests: unify test-rollback
r12485
Greg Ward
test-rollback: tinker a bit to make it easier to add more tests.
r15108
rollback to null revision
Matt Mackall
tests: unify test-rollback
r12485 $ hg status
$ hg rollback
Gilles Moris
rollback: clarifies the message about the reverted state (issue2628)...
r13446 repository tip rolled back to revision -1 (undo commit)
working directory now based on revision -1
Matt Mackall
tests: unify test-rollback
r12485 $ 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
Greg Ward
test-rollback: tinker a bit to make it easier to add more tests.
r15108 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'
Matt Mackall
tests: unify test-rollback
r12485
Greg Ward
test-rollback: tinker a bit to make it easier to add more tests.
r15108 Test issue 902 (current branch is preserved)
Matt Mackall
tests: unify test-rollback
r12485 $ hg branch test
marked working directory as branch test
Matt Mackall
branch: warn on branching
r15615 (branches are permanent and global, did you want a bookmark?)
Matt Mackall
tests: unify test-rollback
r12485 $ hg rollback
Greg Ward
test-rollback: tinker a bit to make it easier to add more tests.
r15108 repository tip rolled back to revision 0 (undo commit)
working directory now based on revision 0
Matt Mackall
tests: unify test-rollback
r12485 $ hg branch
default
Test issue 1635 (commit message saved)
$ cat .hg/last-message.txt ; echo
Greg Ward
test-rollback: tinker a bit to make it easier to add more tests.
r15108 modify a
Matt Mackall
tests: unify test-rollback
r12485
Test rollback of hg before issue 902 was fixed
$ hg commit -m "test3"
$ hg branch test
marked working directory as branch test
Matt Mackall
branch: warn on branching
r15615 (branches are permanent and global, did you want a bookmark?)
Matt Mackall
tests: unify test-rollback
r12485 $ rm .hg/undo.branch
$ hg rollback
Greg Ward
test-rollback: tinker a bit to make it easier to add more tests.
r15108 repository tip rolled back to revision 0 (undo commit)
Greg Ward
rollback: refactor for readability; cosmetics....
r15130 named branch could not be reset: current branch is still 'test'
Greg Ward
test-rollback: tinker a bit to make it easier to add more tests.
r15108 working directory now based on revision 0
Matt Mackall
tests: unify test-rollback
r12485 $ hg branch
test
Greg Ward
rollback: only restore dirstate and branch when appropriate....
r15131 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
Pierre-Yves David
bookmarks: change bookmark within a transaction...
r25744 $ hg bookmark bar -r default #making bar active, before the transaction
Greg Ward
rollback: only restore dirstate and branch when appropriate....
r15131 $ 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
Pierre-Yves David
bookmarks: change bookmark within a transaction...
r25744 $ hg update bar
Greg Ward
rollback: only restore dirstate and branch when appropriate....
r15131 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
Pierre-Yves David
bookmarks: change bookmark within a transaction...
r25744 (activating bookmark bar)
Greg Ward
rollback: only restore dirstate and branch when appropriate....
r15131 $ cat .hg/undo.branch ; echo
test
Greg Ward
rollback: avoid unsafe rollback when not at tip (issue2998)...
r15183 $ hg rollback -f
Greg Ward
rollback: only restore dirstate and branch when appropriate....
r15131 repository tip rolled back to revision 1 (undo commit)
$ hg id -n
0
$ hg branch
default
$ cat .hg/bookmarks.current ; echo
bar
Pierre-Yves David
bookmarks: change bookmark within a transaction...
r25744 $ hg bookmark --delete foo bar
Greg Ward
rollback: only restore dirstate and branch when appropriate....
r15131
Matt Mackall
tests: fixup issue markers to make check-commit happy
r22183 rollback by pretxncommit saves commit message (issue1635)
Matt Mackall
tests: unify test-rollback
r12485
$ 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
Nicolas Dumazet
tests: clean up test-rollback.t...
r13185
same thing, but run $EDITOR
Mads Kiilerich
tests: consistently use a HGEDITOR pattern that works with msys on windows...
r16901 $ cat > editor.sh << '__EOF__'
Matt Mackall
tests: unify test-rollback
r12485 > echo "another precious commit message" > "$1"
> __EOF__
Mads Kiilerich
tests: consistently use a HGEDITOR pattern that works with msys on windows...
r16901 $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg --config hooks.pretxncommit=false commit 2>&1
Laurent Charignon
localrepo: put bookmark move following commit in one transaction...
r26998 note: commit message saved in .hg/last-message.txt
Matt Mackall
tests: unify test-rollback
r12485 transaction abort!
rollback completed
abort: pretxncommit hook exited with status * (glob)
Mads Kiilerich
tests: remove the last traces of $HGTMP...
r12642 [255]
$ cat .hg/last-message.txt
Matt Mackall
tests: unify test-rollback
r12485 another precious commit message
Martin Geisler
hgweb: detect change based on changelog size too...
r13958 test rollback on served repository
Adrian Buehlmann
test-rollback: enable for Windows...
r16916 #if serve
Martin Geisler
hgweb: detect change based on changelog size too...
r13958 $ 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
Greg Ward
rollback: only restore dirstate and branch when appropriate....
r15131 added 3 changesets with 2 changes to 1 files (+1 heads)
Denis Laxalde
transaction-summary: show the range of new revisions upon pull/unbundle (BC)...
r34662 new changesets 23b0221f3370:068774709090
Greg Ward
test-rollback: tinker a bit to make it easier to add more tests.
r15108 updating to branch default
Martin Geisler
hgweb: detect change based on changelog size too...
r13958 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd u
$ hg id default
Greg Ward
rollback: only restore dirstate and branch when appropriate....
r15131 068774709090
Martin Geisler
hgweb: detect change based on changelog size too...
r13958
now rollback and observe that 'hg serve' reloads the repository and
presents the correct tip changeset:
$ hg -R ../t rollback
Greg Ward
rollback: only restore dirstate and branch when appropriate....
r15131 repository tip rolled back to revision 1 (undo commit)
Greg Ward
test-rollback: tinker a bit to make it easier to add more tests.
r15108 working directory now based on revision 0
Martin Geisler
hgweb: detect change based on changelog size too...
r13958 $ hg id default
Greg Ward
rollback: only restore dirstate and branch when appropriate....
r15131 791dd2169706
Matt Harbison
test-serve: kill daemons before deleting the access and error logs...
r31770
$ killdaemons.py
Adrian Buehlmann
test-rollback: enable for Windows...
r16916 #endif
Greg Ward
rollback: avoid unsafe rollback when not at tip (issue2998)...
r15183
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
Matt Mackall
rollback: use a hint for force
r15187 abort: rollback of last commit while not checked out may lose data
(use -f to force)
Greg Ward
rollback: avoid unsafe rollback when not at tip (issue2998)...
r15183 [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
Mads Kiilerich
tests: add missing trailing 'cd ..'...
r16913
Matt Mackall
journal: report parsing errors on recover/rollback (issue4172)
r20524 corrupt journal test
$ echo "foo" > .hg/store/journal
$ hg recover
rolling back interrupted transaction
couldn't read journal entry 'foo\n'!
checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
1 files, 2 changesets, 2 total revisions
Augie Fackler
rollback: add a config knob for entirely disabling the command...
r29086 rollback disabled by config
$ cat >> $HGRCPATH <<EOF
> [ui]
> rollback = false
> EOF
$ echo narf >> pinky-sayings.txt
$ hg add pinky-sayings.txt
$ hg ci -m 'First one.'
$ hg rollback
abort: rollback is disabled because it is unsafe
(see `hg help -v rollback` for information)
[255]
Gregory Szorc
tests: test behavior of IOError during transactions (issue5658)...
r33858
$ cd ..
I/O errors on stdio are handled properly (issue5658)
$ cat > badui.py << EOF
> import errno
> from mercurial.i18n import _
> from mercurial import (
> error,
> ui as uimod,
> )
>
> def pretxncommit(ui, repo, **kwargs):
> ui.warn('warn during pretxncommit\n')
>
> def pretxnclose(ui, repo, **kwargs):
> ui.warn('warn during pretxnclose\n')
>
> def txnclose(ui, repo, **kwargs):
> ui.warn('warn during txnclose\n')
>
> def txnabort(ui, repo, **kwargs):
> ui.warn('warn during abort\n')
>
> class fdproxy(object):
> def __init__(self, ui, o):
> self._ui = ui
> self._o = o
>
> def __getattr__(self, attr):
> return getattr(self._o, attr)
>
> def write(self, msg):
> errors = set(self._ui.configlist('ui', 'ioerrors', []))
> pretxncommit = msg == 'warn during pretxncommit\n'
> pretxnclose = msg == 'warn during pretxnclose\n'
> txnclose = msg == 'warn during txnclose\n'
> txnabort = msg == 'warn during abort\n'
> msgabort = msg == _('transaction abort!\n')
> msgrollback = msg == _('rollback completed\n')
>
> if pretxncommit and 'pretxncommit' in errors:
> raise IOError(errno.EPIPE, 'simulated epipe')
> if pretxnclose and 'pretxnclose' in errors:
> raise IOError(errno.EIO, 'simulated eio')
> if txnclose and 'txnclose' in errors:
> raise IOError(errno.EBADF, 'simulated badf')
> if txnabort and 'txnabort' in errors:
> raise IOError(errno.EPIPE, 'simulated epipe')
> if msgabort and 'msgabort' in errors:
> raise IOError(errno.EBADF, 'simulated ebadf')
> if msgrollback and 'msgrollback' in errors:
> raise IOError(errno.EIO, 'simulated eio')
>
> return self._o.write(msg)
>
> def uisetup(ui):
> class badui(ui.__class__):
> def write_err(self, *args, **kwargs):
> olderr = self.ferr
> try:
> self.ferr = fdproxy(self, olderr)
> return super(badui, self).write_err(*args, **kwargs)
> finally:
> self.ferr = olderr
>
> ui.__class__ = badui
>
> def reposetup(ui, repo):
> ui.setconfig('hooks', 'pretxnclose.badui', pretxnclose, 'badui')
> ui.setconfig('hooks', 'txnclose.badui', txnclose, 'badui')
> ui.setconfig('hooks', 'pretxncommit.badui', pretxncommit, 'badui')
> ui.setconfig('hooks', 'txnabort.badui', txnabort, 'badui')
> EOF
$ cat >> $HGRCPATH << EOF
> [extensions]
> badui = $TESTTMP/badui.py
> EOF
An I/O error during pretxncommit is handled
$ hg init ioerror-pretxncommit
$ cd ioerror-pretxncommit
$ echo 0 > foo
$ hg -q commit -A -m initial
warn during pretxncommit
warn during pretxnclose
warn during txnclose
$ echo 1 > foo
$ hg --config ui.ioerrors=pretxncommit commit -m 'error during pretxncommit'
Gregory Szorc
ui: restore behavior to ignore some I/O errors (issue5658)...
r33859 warn during pretxnclose
warn during txnclose
Gregory Szorc
tests: test behavior of IOError during transactions (issue5658)...
r33858
$ hg commit -m 'commit 1'
Gregory Szorc
ui: restore behavior to ignore some I/O errors (issue5658)...
r33859 nothing changed
[1]
Gregory Szorc
tests: test behavior of IOError during transactions (issue5658)...
r33858
$ cd ..
An I/O error during pretxnclose is handled
$ hg init ioerror-pretxnclose
$ cd ioerror-pretxnclose
$ echo 0 > foo
$ hg -q commit -A -m initial
warn during pretxncommit
warn during pretxnclose
warn during txnclose
$ echo 1 > foo
$ hg --config ui.ioerrors=pretxnclose commit -m 'error during pretxnclose'
warn during pretxncommit
Gregory Szorc
ui: restore behavior to ignore some I/O errors (issue5658)...
r33859 warn during txnclose
Gregory Szorc
tests: test behavior of IOError during transactions (issue5658)...
r33858
$ hg commit -m 'commit 1'
Gregory Szorc
ui: restore behavior to ignore some I/O errors (issue5658)...
r33859 nothing changed
[1]
Gregory Szorc
tests: test behavior of IOError during transactions (issue5658)...
r33858
$ cd ..
An I/O error during txnclose is handled
$ hg init ioerror-txnclose
$ cd ioerror-txnclose
$ echo 0 > foo
$ hg -q commit -A -m initial
warn during pretxncommit
warn during pretxnclose
warn during txnclose
$ echo 1 > foo
$ hg --config ui.ioerrors=txnclose commit -m 'error during txnclose'
warn during pretxncommit
warn during pretxnclose
$ hg commit -m 'commit 1'
nothing changed
[1]
$ cd ..
An I/O error writing "transaction abort" is handled
$ hg init ioerror-msgabort
$ cd ioerror-msgabort
$ echo 0 > foo
$ hg -q commit -A -m initial
warn during pretxncommit
warn during pretxnclose
warn during txnclose
$ echo 1 > foo
$ hg --config ui.ioerrors=msgabort --config hooks.pretxncommit=false commit -m 'error during abort message'
Gregory Szorc
ui: restore behavior to ignore some I/O errors (issue5658)...
r33859 warn during abort
rollback completed
abort: pretxncommit hook exited with status 1
Gregory Szorc
tests: test behavior of IOError during transactions (issue5658)...
r33858 [255]
$ hg commit -m 'commit 1'
Gregory Szorc
ui: restore behavior to ignore some I/O errors (issue5658)...
r33859 warn during pretxncommit
warn during pretxnclose
warn during txnclose
Gregory Szorc
tests: test behavior of IOError during transactions (issue5658)...
r33858
$ cd ..
An I/O error during txnabort should still result in rollback
$ hg init ioerror-txnabort
$ cd ioerror-txnabort
$ echo 0 > foo
$ hg -q commit -A -m initial
warn during pretxncommit
warn during pretxnclose
warn during txnclose
$ echo 1 > foo
$ hg --config ui.ioerrors=txnabort --config hooks.pretxncommit=false commit -m 'error during abort'
transaction abort!
rollback completed
abort: pretxncommit hook exited with status 1
[255]
$ hg commit -m 'commit 1'
warn during pretxncommit
warn during pretxnclose
warn during txnclose
$ cd ..
An I/O error writing "rollback completed" is handled
$ hg init ioerror-msgrollback
$ cd ioerror-msgrollback
$ echo 0 > foo
$ hg -q commit -A -m initial
warn during pretxncommit
warn during pretxnclose
warn during txnclose
$ echo 1 > foo
$ hg --config ui.ioerrors=msgrollback --config hooks.pretxncommit=false commit -m 'error during rollback message'
transaction abort!
warn during abort
abort: pretxncommit hook exited with status 1
[255]
$ hg verify
checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
1 files, 1 changesets, 1 total revisions
$ cd ..
Multiple I/O errors after transaction open are handled.
This is effectively what happens if a peer disconnects in the middle
of a transaction.
$ hg init ioerror-multiple
$ cd ioerror-multiple
$ echo 0 > foo
$ hg -q commit -A -m initial
warn during pretxncommit
warn during pretxnclose
warn during txnclose
$ echo 1 > foo
$ hg --config ui.ioerrors=pretxncommit,pretxnclose,txnclose,txnabort,msgabort,msgrollback commit -m 'multiple errors'
$ hg verify
checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
Gregory Szorc
ui: restore behavior to ignore some I/O errors (issue5658)...
r33859 1 files, 2 changesets, 2 total revisions
Gregory Szorc
tests: test behavior of IOError during transactions (issue5658)...
r33858
$ cd ..