##// END OF EJS Templates
lfs: don't require the .hglfs file to be tracked to control the policy...
lfs: don't require the .hglfs file to be tracked to control the policy The .hgignore file doesn't need to be tracked, nor does the git equivalent of this file. I'm still a little concerned about the effects of forgetting to commit this file. But the fact that conversions maintain the hashes if only the normal vs external storage changes, should make this less risky.

File last commit:

r34767:d957d447 default
r35825:4425790f stable
Show More
test-rollback.t
466 lines | 12.2 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 (
Boris Feld
configitems: register the test 'ui.ioerrors' config
r34767 > registrar,
Gregory Szorc
tests: test behavior of IOError during transactions (issue5658)...
r33858 > error,
> ui as uimod,
> )
>
Boris Feld
configitems: register the test 'ui.ioerrors' config
r34767 > configtable = {}
> configitem = registrar.configitem(configtable)
>
> configitem('ui', 'ioerrors',
> default=list,
> )
>
Gregory Szorc
tests: test behavior of IOError during transactions (issue5658)...
r33858 > 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):
Boris Feld
configitems: register the test 'ui.ioerrors' config
r34767 > errors = set(self._ui.configlist('ui', 'ioerrors'))
Gregory Szorc
tests: test behavior of IOError during transactions (issue5658)...
r33858 > 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 ..