##// END OF EJS Templates
transaction: use a ".bck" extension for all backup file...
transaction: use a ".bck" extension for all backup file There are too much code in Mercurial that assume file function from extension. Keeping the original extension when doing backup is just creating confusion (for exemple, backup of revlog's confused with new version revlogs). So we change the backup name from now on to be explicilty backup file and prevent this kind of problem. (note that repository using fncache is less affected (but still affected) by this kind of problem as the backup are not listed in the fncache).

File last commit:

r51358:63dc24be default
r51358:63dc24be default
Show More
test-rollback.t
457 lines | 11.9 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
test: explicitly "add" file before some commit in test-rollback.t...
r50881 $ hg add a
$ hg commit -m 'add a'
Raphaël Gomès
tests: use the `--quiet` flag for verify when applicable...
r50720 $ hg verify -q
Matt Mackall
tests: unify test-rollback
r12485 $ 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
Raphaël Gomès
tests: use the `--quiet` flag for verify when applicable...
r50720 $ hg verify -q
Matt Mackall
tests: unify test-rollback
r12485 $ 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
transaction: use the standard transaction mechanism to backup branch...
r51090 working dir unaffected by rollback: do not restore dirstate et. al.
$ hg branch test --quiet
Matt Mackall
tests: unify test-rollback
r12485 $ hg branch
test
Greg Ward
rollback: only restore dirstate and branch when appropriate....
r15131 $ 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
rollback: display some graphlog before/after a test piece...
r50962 $ hg log -G --template '{rev} [{branch}] ({bookmarks}) {desc|firstline}\n'
@ 1 [test] (foo) modify a again
|
o 0 [default] (bar) add a again
rollback: avoid a `hg commit --addremove` at a critical point...
r50963 $ hg add b
$ hg commit -m'add b'
rollback: display some graphlog before/after a test piece...
r50962 $ hg log -G --template '{rev} [{branch}] ({bookmarks}) {desc|firstline}\n'
@ 2 [test] (foo) add b
|
o 1 [test] () modify a again
|
o 0 [default] (bar) 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)
transaction: use a ".bck" extension for all backup file...
r51358 $ cat .hg/undo.backup.branch.bck
Greg Ward
rollback: only restore dirstate and branch when appropriate....
r15131 test
rollback: display some graphlog before/after a test piece...
r50962 $ hg log -G --template '{rev} [{branch}] ({bookmarks}) {desc|firstline}\n'
o 2 [test] (foo) add b
|
o 1 [test] () modify a again
|
@ 0 [default] (bar) add a again
rollback: show that the safety works in a associated test...
r50961 $ hg rollback
abort: rollback of last commit while not checked out may lose data
(use -f to force)
[255]
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
rollback: display some graphlog before/after a test piece...
r50962 $ hg log -G --template '{rev} [{branch}] ({bookmarks}) {desc|firstline}\n'
o 1 [test] (foo) modify a again
|
@ 0 [default] (bar) add a again
Greg Ward
rollback: only restore dirstate and branch when appropriate....
r15131 $ 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)
Martin von Zweigbergk
errors: use exit code 40 for when a hook fails...
r47145 [40]
Matt Mackall
tests: unify test-rollback
r12485 $ 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
Matt Mackall
tests: unify test-rollback
r12485 transaction abort!
rollback completed
Martin von Zweigbergk
localrepo: use context manager for transaction in commit()...
r41398 note: commit message saved in .hg/last-message.txt
Martin von Zweigbergk
commit: tell user what to do with .hg/last-message.txt...
r45227 note: use 'hg commit --logfile .hg/last-message.txt --edit' to reuse it
Matt Mackall
tests: unify test-rollback
r12485 abort: pretxncommit hook exited with status * (glob)
Martin von Zweigbergk
errors: use exit code 40 for when a hook fails...
r47145 [40]
Mads Kiilerich
tests: remove the last traces of $HGTMP...
r12642 $ 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
rollback: detect "parentgone" case earlier...
r50964 working directory now based on revision 0
Greg Ward
rollback: avoid unsafe rollback when not at tip (issue2998)...
r15183 $ 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
Raphaël Gomès
tests: use the `--quiet` flag for verify when applicable...
r50720 $ hg recover --verify -q
Matt Mackall
journal: report parsing errors on recover/rollback (issue4172)
r20524 couldn't read journal entry 'foo\n'!
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 (
Augie Fackler
tests: fix various test-check-module-imports.t violations...
r36663 > error,
Boris Feld
configitems: register the test 'ui.ioerrors' config
r34767 > registrar,
Gregory Szorc
tests: test behavior of IOError during transactions (issue5658)...
r33858 > ui as uimod,
> )
>
Boris Feld
configitems: register the test 'ui.ioerrors' config
r34767 > configtable = {}
> configitem = registrar.configitem(configtable)
>
Pulkit Goyal
py3: add b'' prefixes in tests/test-rollback.t...
r36504 > configitem(b'ui', b'ioerrors',
Boris Feld
configitems: register the test 'ui.ioerrors' config
r34767 > default=list,
> )
>
Gregory Szorc
tests: test behavior of IOError during transactions (issue5658)...
r33858 > def pretxncommit(ui, repo, **kwargs):
Pulkit Goyal
py3: add b'' prefixes in tests/test-rollback.t...
r36504 > ui.warn(b'warn during pretxncommit\n')
Gregory Szorc
tests: test behavior of IOError during transactions (issue5658)...
r33858 >
> def pretxnclose(ui, repo, **kwargs):
Pulkit Goyal
py3: add b'' prefixes in tests/test-rollback.t...
r36504 > ui.warn(b'warn during pretxnclose\n')
Gregory Szorc
tests: test behavior of IOError during transactions (issue5658)...
r33858 >
> def txnclose(ui, repo, **kwargs):
Pulkit Goyal
py3: add b'' prefixes in tests/test-rollback.t...
r36504 > ui.warn(b'warn during txnclose\n')
Gregory Szorc
tests: test behavior of IOError during transactions (issue5658)...
r33858 >
> def txnabort(ui, repo, **kwargs):
Pulkit Goyal
py3: add b'' prefixes in tests/test-rollback.t...
r36504 > ui.warn(b'warn during abort\n')
Gregory Szorc
tests: test behavior of IOError during transactions (issue5658)...
r33858 >
> 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):
Pulkit Goyal
py3: add b'' prefixes in tests/test-rollback.t...
r36504 > errors = set(self._ui.configlist(b'ui', b'ioerrors'))
> pretxncommit = msg == b'warn during pretxncommit\n'
> pretxnclose = msg == b'warn during pretxnclose\n'
> txnclose = msg == b'warn during txnclose\n'
> txnabort = msg == b'warn during abort\n'
> msgabort = msg == _(b'transaction abort!\n')
> msgrollback = msg == _(b'rollback completed\n')
Gregory Szorc
tests: test behavior of IOError during transactions (issue5658)...
r33858 >
Pulkit Goyal
py3: add b'' prefixes in tests/test-rollback.t...
r36504 > if pretxncommit and b'pretxncommit' in errors:
Gregory Szorc
tests: test behavior of IOError during transactions (issue5658)...
r33858 > raise IOError(errno.EPIPE, 'simulated epipe')
Pulkit Goyal
py3: add b'' prefixes in tests/test-rollback.t...
r36504 > if pretxnclose and b'pretxnclose' in errors:
Gregory Szorc
tests: test behavior of IOError during transactions (issue5658)...
r33858 > raise IOError(errno.EIO, 'simulated eio')
Pulkit Goyal
py3: add b'' prefixes in tests/test-rollback.t...
r36504 > if txnclose and b'txnclose' in errors:
Gregory Szorc
tests: test behavior of IOError during transactions (issue5658)...
r33858 > raise IOError(errno.EBADF, 'simulated badf')
Pulkit Goyal
py3: add b'' prefixes in tests/test-rollback.t...
r36504 > if txnabort and b'txnabort' in errors:
Gregory Szorc
tests: test behavior of IOError during transactions (issue5658)...
r33858 > raise IOError(errno.EPIPE, 'simulated epipe')
Pulkit Goyal
py3: add b'' prefixes in tests/test-rollback.t...
r36504 > if msgabort and b'msgabort' in errors:
Gregory Szorc
tests: test behavior of IOError during transactions (issue5658)...
r33858 > raise IOError(errno.EBADF, 'simulated ebadf')
Pulkit Goyal
py3: add b'' prefixes in tests/test-rollback.t...
r36504 > if msgrollback and b'msgrollback' in errors:
Gregory Szorc
tests: test behavior of IOError during transactions (issue5658)...
r33858 > raise IOError(errno.EIO, 'simulated eio')
>
> return self._o.write(msg)
>
> def uisetup(ui):
> class badui(ui.__class__):
Yuya Nishihara
ui: add inner function to select write destination...
r40577 > def _write(self, dest, *args, **kwargs):
Gregory Szorc
tests: test behavior of IOError during transactions (issue5658)...
r33858 > olderr = self.ferr
> try:
Yuya Nishihara
ui: add inner function to select write destination...
r40577 > if dest is self.ferr:
> self.ferr = dest = fdproxy(self, olderr)
> return super(badui, self)._write(dest, *args, **kwargs)
Gregory Szorc
tests: test behavior of IOError during transactions (issue5658)...
r33858 > finally:
> self.ferr = olderr
>
> ui.__class__ = badui
>
> def reposetup(ui, repo):
Pulkit Goyal
py3: add b'' prefixes in tests/test-rollback.t...
r36504 > ui.setconfig(b'hooks', b'pretxnclose.badui', pretxnclose, b'badui')
> ui.setconfig(b'hooks', b'txnclose.badui', txnclose, b'badui')
> ui.setconfig(b'hooks', b'pretxncommit.badui', pretxncommit, b'badui')
> ui.setconfig(b'hooks', b'txnabort.badui', txnabort, b'badui')
Gregory Szorc
tests: test behavior of IOError during transactions (issue5658)...
r33858 > 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
Martin von Zweigbergk
errors: use exit code 40 for when a hook fails...
r47145 [40]
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 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
Martin von Zweigbergk
errors: use exit code 40 for when a hook fails...
r47145 [40]
Gregory Szorc
tests: test behavior of IOError during transactions (issue5658)...
r33858
$ 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
Martin von Zweigbergk
errors: use exit code 40 for when a hook fails...
r47145 [40]
Gregory Szorc
tests: test behavior of IOError during transactions (issue5658)...
r33858
Raphaël Gomès
tests: use the `--quiet` flag for verify when applicable...
r50720 $ hg verify -q
Gregory Szorc
tests: test behavior of IOError during transactions (issue5658)...
r33858
$ 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'
Raphaël Gomès
tests: use the `--quiet` flag for verify when applicable...
r50720 $ hg verify -q
Gregory Szorc
tests: test behavior of IOError during transactions (issue5658)...
r33858
$ cd ..