hgext/inhibit.py
changeset 1240 e1347ce2f954
parent 1234 c15d4677f2ba
child 1241 3625d006e81b
--- a/hgext/inhibit.py	Thu Apr 02 18:33:44 2015 -0700
+++ b/hgext/inhibit.py	Wed Apr 01 13:51:21 2015 -0700
@@ -47,6 +47,10 @@
                 obsinhibit.add(raw[i:i+20])
             return obsinhibit
 
+    # Wrapping this to inhibit obsolete revs resulting from a transaction
+    extensions.wrapfunction(localrepo.localrepository,
+                            'transaction', transactioncallback)
+
     repo.__class__ = obsinhibitedrepo
     repo._explicitaccess = set()
 
@@ -136,6 +140,19 @@
     finally:
         tr.release()
 
+
+def transactioncallback(orig, repo, *args, **kwargs):
+    """ Wrap localrepo.transaction to inhibit new obsolete changes """
+    def inhibitposttransaction(transaction):
+        # At the end of the transaction we catch all the new visible and
+        # obsolete commit to inhibit them
+        visibleobsolete = repo.revs('(not hidden()) and obsolete()')
+        if visibleobsolete:
+            _inhibitmarkers(repo, [repo[r].node() for r in visibleobsolete])
+    transaction = orig(repo, *args, **kwargs)
+    transaction.addpostclose('inhibitposttransaction', inhibitposttransaction)
+    return transaction
+
 def extsetup(ui):
     # lets wrap the computation of the obsolete set
     # We apply inhibition there