fncache: drop dedicated 'onclose' function in favor of 'tr.addfinalize'
Now that we have a shiny generic mechanism, we can use it.
--- a/mercurial/localrepo.py Tue Dec 09 13:32:19 2014 -0600
+++ b/mercurial/localrepo.py Thu Dec 04 13:49:45 2014 -0800
@@ -883,9 +883,6 @@
_("abandoned transaction found"),
hint=_("run 'hg recover' to clean up transaction"))
- def onclose():
- self.store.write(self._transref())
-
self._writejournal(desc)
renames = [(vfs, x, undoname(x)) for vfs, x in self._journalfiles()]
rp = report and report or self.ui.warn
@@ -893,8 +890,8 @@
tr = transaction.transaction(rp, self.sopener, vfsmap,
"journal",
aftertrans(renames),
- self.store.createmode,
- onclose)
+ self.store.createmode)
+ tr.addfinalize('repo.store.write', self.store.write)
self._transref = weakref.ref(tr)
return tr
--- a/tests/test-fncache.t Tue Dec 09 13:32:19 2014 -0600
+++ b/tests/test-fncache.t Thu Dec 04 13:49:45 2014 -0800
@@ -210,19 +210,19 @@
$ cat > ../exceptionext.py <<EOF
> import os
- > from mercurial import commands, util, transaction
+ > from mercurial import commands, util, localrepo
> from mercurial.extensions import wrapfunction
>
> def wrapper(orig, self, *args, **kwargs):
- > origonclose = self.onclose
- > def onclose():
- > origonclose()
+ > tr = orig(self, *args, **kwargs)
+ > def fail(tr):
> raise util.Abort("forced transaction failure")
- > self.onclose = onclose
- > return orig(self, *args, **kwargs)
+ > # zzz prefix to ensure it sorted after store.write
+ > tr.addfinalize('zzz-forcefails', fail)
+ > return tr
>
> def uisetup(ui):
- > wrapfunction(transaction.transaction, 'close', wrapper)
+ > wrapfunction(localrepo.localrepository, 'transaction', wrapper)
>
> cmdtable = {}
>