--- 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')