hgext/obsolete.py
changeset 112 eae9be0ee00e
parent 109 a2e8057117d3
child 114 1a64195e2b09
--- a/hgext/obsolete.py	Mon Dec 19 14:05:05 2011 +0100
+++ b/hgext/obsolete.py	Mon Dec 19 14:05:25 2011 +0100
@@ -101,7 +101,7 @@
     """is the changeset obsolete by other"""
     if ctx.node()is None:
         return False
-    return bool(ctx._repo.obsoletedby(ctx.node())) and ctx.state().mutable
+    return bool(ctx._repo.obsoletedby(ctx.node())) and ctx.phase()
 
 context.changectx.obsolete = obsolete
 
@@ -114,7 +114,7 @@
     # compute hidden (XXX should move elsewhere)
     if not getattr(ctx._repo.changelog, 'hiddeninit', False):
         shown = ['not obsolete()', '.', 'bookmark()', 'tagged()',
-                 'publishedheads()']
+                 'public()']
         basicquery = 'obsolete() - (::(%s))' % (' or '.join(shown))
         ctx._repo.changelog.hiddenrevs.update(
             scmutil.revrange(ctx._repo, [basicquery]))
@@ -126,11 +126,16 @@
 ### revset
 #############################
 
+def revsetpublic(repo, subset, x):
+    args = revset.getargs(x, 0, 0, 'publicheads takes no arguments')
+    # XXX slow stop using context
+    return [r for r in subset if repo._phaserev[r] == 0]
+
 def revsetobsolete(repo, subset, x):
     """filter obsolet entry"""
     args = revset.getargs(x, 0, 0, 'publicheads takes no arguments')
     # XXX slow stop using context
-    return [r for r in subset if r in repo._obsoleteset]
+    return [r for r in subset if r in repo._obsoleteset and repo._phaserev[r] > 0]
 
 ### Other Extension compat
 ############################
@@ -178,12 +183,9 @@
     return common, heads
 
 def extsetup(ui):
-    try:
-        rebase = extensions.find('states')
-    except KeyError:
-        raise error.Abort(_('obsolete extension require states extension.'))
 
     revset.symbols["obsolete"] = revsetobsolete
+    revset.symbols["public"] = revsetpublic
 
     extensions.wrapfunction(discovery, 'findcommonoutgoing', filterobsoleteout)
 
@@ -348,7 +350,7 @@
             self._obssubrels.setdefault(sub, set()).add(obj)
             self._obsobjrels.setdefault(obj, set()).add(sub)
             try:
-                if not self.nodestate(obj).mutable:
+                if self[obj].phase() == 0:
                     if sub is None:
                         self.ui.warn(
                             _("trying to kill immutable changeset %(obj)s\n")
@@ -463,13 +465,13 @@
                 entries.append(journalpath)
             return tuple(entries)
 
-        def rollback(self, dryrun=False):
+        def rollback(self, dryrun=False, **kwargs):
             """wrapped version of rollback that restore obsolete data"""
             wlock = lock = None
             try:
                 wlock = self.wlock()
                 lock = self.lock()
-                ret = orollback(dryrun)
+                ret = orollback(dryrun, **kwargs)
                 if not (ret or dryrun): #rollback did not failed
                     src = self.join('undo.obsolete-relations')
                     dst = self.join('obsolete-relations')