Mercurial > public > mercurial-scm > hg-stable
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()/