##// END OF EJS Templates
tests: stabilize `test-merge-partial-tool.t` on Windows...
tests: stabilize `test-merge-partial-tool.t` on Windows The test was previously failing because it was opening the shell scripts being used as an executable in a text editor, and problems cascaded from there.

File last commit:

r51358:63dc24be default
r52838:4ee2505f 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 ..