diff --git a/hgext3rd/undo.py b/hgext3rd/undo.py --- a/hgext3rd/undo.py +++ b/hgext3rd/undo.py @@ -13,6 +13,7 @@ dispatch, error, extensions, + localrepo, lock as lockmod, registrar, revlog, @@ -37,6 +38,9 @@ def extsetup(ui): extensions.wrapfunction(dispatch, 'runcommand', _runcommandwrapper) + # undo has its own locking, whitelist itself to bypass repo lock audit + localrepo.localrepository._wlockfreeprefix.add('undolog/') + # Wrappers def _runcommandwrapper(orig, lui, repo, cmd, fullargs, *args): @@ -73,8 +77,8 @@ # allows running command during other commands when # otherwise legal. Could cause weird undolog states, # which gap handling generally covers. - with lockmod.lock(repo.vfs, "undologlock", - desc="undolog"): + repo.vfs.makedirs('undolog') + with lockmod.lock(repo.vfs, "undolog/lock", desc="undolog"): # developer config: undo._duringundologlock if repo.ui.configbool('undo', '_duringundologlock'): repo.hook("duringundologlock") @@ -94,8 +98,8 @@ # abandoned tr's (since we only record info) and doesn't # do any tag handling vfsmap = {'plain': repo.vfs} - tr = transaction.transaction(repo.ui.warn, repo.svfs, vfsmap, - "_undojournal", "_undolog") + tr = transaction.transaction(repo.ui.warn, repo.vfs, vfsmap, + "undolog/tr.journal", "undolog/tr.undo") return tr def log(repo, command, tr): @@ -135,9 +139,6 @@ def writelog(repo, tr, name, revstring): if tr is None: raise error.ProgrammingError - # the transaction code doesn't work with vfs - # specifically, repo.recover() assumes svfs? - repo.svfs.makedirs('undolog') rlog = _getrevlog(repo, name) node = rlog.addrevision(revstring, tr, 1, nullid, nullid) return hex(node) @@ -316,4 +317,4 @@ def _getrevlog(repo, filename): path = 'undolog/' + filename - return revlog.revlog(repo.svfs, path) + return revlog.revlog(repo.vfs, path) diff --git a/tests/test-undo.t b/tests/test-undo.t --- a/tests/test-undo.t +++ b/tests/test-undo.t @@ -23,7 +23,7 @@ $ touch c2 && hg add c2 && hg ci -mc2 $ hg book feature2 $ touch d && hg add d && hg ci -md - $ hg debugindex .hg/store/undolog/command.i + $ hg debugindex .hg/undolog/command.i rev offset length delta linkrev nodeid p1 p2 0 0 0 -1 1 b80de5d13875 000000000000 000000000000 1 0 12 -1 1 440cdcef588f 000000000000 000000000000 @@ -36,27 +36,27 @@ 8 70 8 -1 1 60920018c706 000000000000 000000000000 9 78 14 -1 1 c3e212568400 000000000000 000000000000 10 92 7 -1 1 9d609b5b001c 000000000000 000000000000 - $ hg debugdata .hg/store/undolog/command.i 0 - $ hg debugdata .hg/store/undolog/command.i 1 + $ hg debugdata .hg/undolog/command.i 0 + $ hg debugdata .hg/undolog/command.i 1 book\x00master (no-eol) (esc) - $ hg debugdata .hg/store/undolog/command.i 2 + $ hg debugdata .hg/undolog/command.i 2 ci\x00-ma1 (no-eol) (esc) - $ hg debugdata .hg/store/undolog/command.i 3 + $ hg debugdata .hg/undolog/command.i 3 ci\x00-ma2 (no-eol) (esc) - $ hg debugdata .hg/store/undolog/bookmarks.i 0 - $ hg debugdata .hg/store/undolog/bookmarks.i 1 + $ hg debugdata .hg/undolog/bookmarks.i 0 + $ hg debugdata .hg/undolog/bookmarks.i 1 master 0000000000000000000000000000000000000000 (no-eol) - $ hg debugdata .hg/store/undolog/bookmarks.i 2 + $ hg debugdata .hg/undolog/bookmarks.i 2 master df4fd610a3d6ca792281e7576587fa18f940d37a (no-eol) - $ hg debugdata .hg/store/undolog/workingparent.i 0 + $ hg debugdata .hg/undolog/workingparent.i 0 0000000000000000000000000000000000000000 (no-eol) - $ hg debugdata .hg/store/undolog/workingparent.i 1 + $ hg debugdata .hg/undolog/workingparent.i 1 df4fd610a3d6ca792281e7576587fa18f940d37a (no-eol) - $ hg debugdata .hg/store/undolog/draftheads.i 1 + $ hg debugdata .hg/undolog/draftheads.i 1 df4fd610a3d6ca792281e7576587fa18f940d37a (no-eol) - $ hg debugdata .hg/store/undolog/draftheads.i 2 + $ hg debugdata .hg/undolog/draftheads.i 2 b68836a6e2cac33ba33a20249b85a486eec78186 (no-eol) - $ hg debugdata .hg/store/undolog/index.i 1 + $ hg debugdata .hg/undolog/index.i 1 bookmarks 8153d44860d076e9c328951c8f36cf8daebe695a command 440cdcef588f9a594c5530a5b6dede39a96d930d date * (glob) @@ -65,7 +65,7 @@ $ touch a3 && hg add a3 $ hg commit --amend saved backup bundle to $TESTTMP/repo/.hg/strip-backup/db92053d5c83-e25f6bc1-amend.hg (glob) - $ hg debugdata .hg/store/undolog/command.i 11 + $ hg debugdata .hg/undolog/command.i 11 commit\x00--amend (no-eol) (esc) Test debugundohistory