fncache: drop dedicated 'onclose' function in favor of 'tr.addfinalize'
authorPierre-Yves David <pierre-yves.david@fb.com>
Thu, 04 Dec 2014 13:49:45 -0800
changeset 23510 065c0334846f
parent 23509 32e68271a037
child 23511 acc73273b27e
fncache: drop dedicated 'onclose' function in favor of 'tr.addfinalize' Now that we have a shiny generic mechanism, we can use it.
mercurial/localrepo.py
tests/test-fncache.t
--- 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 = {}
   >