diff mercurial/context.py @ 17173:c621f84dbb35

obsolete: compute extinct changesets `extinct` changesets are obsolete changesets with obsolete descendants only. They are of no interest anymore and can be: - exclude from exchange - hidden to the user in most situation - safely garbage collected This changeset just allows mercurial to detect them. The implementation is a bit naive, as for unstable changesets. We better use a simple revset query and a cache, but simple version comes first.
author Pierre-Yves David <pierre-yves.david@ens-lyon.org>
date Fri, 06 Jul 2012 19:34:09 +0200
parents 9c750c3e4fac
children 62c56c94c77e
line wrap: on
line diff
--- a/mercurial/context.py	Tue Jul 10 01:39:03 2012 +0200
+++ b/mercurial/context.py	Fri Jul 06 19:34:09 2012 +0200
@@ -235,6 +235,21 @@
         return (self.node() in self._repo.obsstore.precursors
                 and self.phase() > phases.public)
 
+    def extinct(self):
+        """True if the changeset is extinct"""
+        # We should just compute a cache a check againts it.
+        # see revset implementation for details
+        #
+        # But this naive implementation does not require cache
+        if self.phase() <= phases.public:
+            return False
+        if not self.obsolete():
+            return False
+        for desc in self.descendants():
+            if not desc.obsolete():
+                return False
+        return True
+
     def unstable(self):
         """True if the changeset is not obsolete but it's ancestor are"""
         # We should just compute /(obsolete()::) - obsolete()/