##// END OF EJS Templates
copies: add config option for writing copy metadata to file and/or changset...
copies: add config option for writing copy metadata to file and/or changset This introduces a config option that lets you choose to write copy metadata to the changeset extras instead of to filelog. There's also an option to write it to both places. I imagine that may possibly be useful when transitioning an existing repo. The copy metadata is stored as two fields in extras: one for copies since p1 and one for copies since p2. I may need to add more information later in order to make copy tracing faster. Specifically, I'm thinking out recording which files were added or removed so that copies._chaincopies() doesn't have to look at the manifest for that. But that would just be an optimization and that can be added once we know if it's necessary. I have also considered saving space by using replacing the destination file path by an index into the "files" list, but that can also be changed later (but before the feature is ready to release). Differential Revision: https://phab.mercurial-scm.org/D6183

File last commit:

r41398:57c462db default
r42317:0e41f40b default
Show More
test-rollback.t
467 lines | 12.3 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
Meirambek Omyrzak
verify: make output less confusing (issue5924)...
r39525 checked 1 changesets with 1 changes to 1 files
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
Matt Mackall
tests: unify test-rollback
r12485 $ hg verify
checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
Meirambek Omyrzak
verify: make output less confusing (issue5924)...
r39525 checked 0 changesets with 0 changes to 0 files
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
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
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
Matt Mackall
tests: unify test-rollback
r12485 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
Meirambek Omyrzak
verify: make output less confusing (issue5924)...
r39525 checked 2 changesets with 2 changes to 1 files
Matt Mackall
journal: report parsing errors on recover/rollback (issue4172)
r20524
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
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
Meirambek Omyrzak
verify: make output less confusing (issue5924)...
r39525 checked 1 changesets with 1 changes to 1 files
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'
$ hg verify
checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
Meirambek Omyrzak
verify: make output less confusing (issue5924)...
r39525 checked 2 changesets with 2 changes to 1 files
Gregory Szorc
tests: test behavior of IOError during transactions (issue5658)...
r33858
$ cd ..