mercurial/scmutil.py
branchstable
changeset 35035 96dcc78468e3
parent 35009 99ab7bc944d2
child 35177 9700cb9df140
--- a/mercurial/scmutil.py	Sat Nov 11 12:40:13 2017 +0900
+++ b/mercurial/scmutil.py	Fri Nov 24 21:51:41 2017 -0500
@@ -1233,9 +1233,17 @@
 
     def reportsummary(func):
         """decorator for report callbacks."""
-        reporef = weakref.ref(repo)
+        # The repoview life cycle is shorter than the one of the actual
+        # underlying repository. So the filtered object can die before the
+        # weakref is used leading to troubles. We keep a reference to the
+        # unfiltered object and restore the filtering when retrieving the
+        # repository through the weakref.
+        filtername = repo.filtername
+        reporef = weakref.ref(repo.unfiltered())
         def wrapped(tr):
             repo = reporef()
+            if filtername:
+                repo = repo.filtered(filtername)
             func(repo, tr)
         newcat = '%2i-txnreport' % len(categories)
         otr.addpostclose(newcat, wrapped)