hgext/obsolete.py
changeset 109 a2e8057117d3
parent 95 5dcece86aeb0
child 112 eae9be0ee00e
equal deleted inserted replaced
108:85271a8a7fb9 109:a2e8057117d3
   114     # compute hidden (XXX should move elsewhere)
   114     # compute hidden (XXX should move elsewhere)
   115     if not getattr(ctx._repo.changelog, 'hiddeninit', False):
   115     if not getattr(ctx._repo.changelog, 'hiddeninit', False):
   116         shown = ['not obsolete()', '.', 'bookmark()', 'tagged()',
   116         shown = ['not obsolete()', '.', 'bookmark()', 'tagged()',
   117                  'publishedheads()']
   117                  'publishedheads()']
   118         basicquery = 'obsolete() - (::(%s))' % (' or '.join(shown))
   118         basicquery = 'obsolete() - (::(%s))' % (' or '.join(shown))
   119         for rev in scmutil.revrange(ctx._repo, [basicquery]):
   119         ctx._repo.changelog.hiddenrevs.update(
   120             ctx._repo.changelog.hiddenrevs.add(rev)
   120             scmutil.revrange(ctx._repo, [basicquery]))
   121         ctx._repo.changelog.hiddeninit = True
   121         ctx._repo.changelog.hiddeninit = True
   122 
   122 
   123     return ohidden(ctx)
   123     return ohidden(ctx)
   124 context.changectx.hidden = hidden
   124 context.changectx.hidden = hidden
   125 
   125 
   128 
   128 
   129 def revsetobsolete(repo, subset, x):
   129 def revsetobsolete(repo, subset, x):
   130     """filter obsolet entry"""
   130     """filter obsolet entry"""
   131     args = revset.getargs(x, 0, 0, 'publicheads takes no arguments')
   131     args = revset.getargs(x, 0, 0, 'publicheads takes no arguments')
   132     # XXX slow stop using context
   132     # XXX slow stop using context
   133     return [r for r in subset if repo[r].obsolete()]
   133     return [r for r in subset if r in repo._obsoleteset]
   134 
   134 
   135 ### Other Extension compat
   135 ### Other Extension compat
   136 ############################
   136 ############################
   137 
   137 
   138 def concludenode(orig, repo, rev, *args, **kwargs):
   138 def concludenode(orig, repo, rev, *args, **kwargs):
   328             return self._obsobjrels.get(node, set())
   328             return self._obsobjrels.get(node, set())
   329 
   329 
   330         def obsolete(self, node):
   330         def obsolete(self, node):
   331             """return the set of node that <node> make obsolete (sub)"""
   331             """return the set of node that <node> make obsolete (sub)"""
   332             return self._obssubrels.get(node, set())
   332             return self._obssubrels.get(node, set())
       
   333 
       
   334         @util.propertycache
       
   335         def _obsoleteset(self):
       
   336             obs = set()
       
   337             for obj in self._obsobjrels:
       
   338                 try:
       
   339                     obs.add(self.changelog.rev(obj))
       
   340                 except error.LookupError:
       
   341                     pass
       
   342             return obs
   333 
   343 
   334         def addobsolete(self, sub, obj):
   344         def addobsolete(self, sub, obj):
   335             """Add a relation marking that node <sub> is a new version of <obj>"""
   345             """Add a relation marking that node <sub> is a new version of <obj>"""
   336             if sub == nullid:
   346             if sub == nullid:
   337                 sub = None
   347                 sub = None
   349                             % {'sub': short(sub), 'obj': short(obj)})
   359                             % {'sub': short(sub), 'obj': short(obj)})
   350                 self.changelog.hiddenrevs.add(repo[obj].rev())
   360                 self.changelog.hiddenrevs.add(repo[obj].rev())
   351             except (error.RepoLookupError, error.LookupError):
   361             except (error.RepoLookupError, error.LookupError):
   352                 pass #unknow revision (but keep propagating the data
   362                 pass #unknow revision (but keep propagating the data
   353             self._writeobsrels()
   363             self._writeobsrels()
       
   364             if '_obsobjrels' in vars(self):
       
   365                 del self._obsobjrels
       
   366             if '_obssubrels' in vars(self):
       
   367                 del self._obssubrels
       
   368             if '_obsoleteset' in vars(self):
       
   369                 del self._obsoleteset
   354 
   370 
   355         ### obsolete storage
   371         ### obsolete storage
   356         @util.propertycache
   372         @util.propertycache
   357         def _obsobjrels(self):
   373         def _obsobjrels(self):
   358             """{<old-node> -> set(<new-node>)}
   374             """{<old-node> -> set(<new-node>)}