hgext/obsolete.py
changeset 143 0599fb01dc41
parent 135 1a08daef8a53
child 144 f387658d6d22
equal deleted inserted replaced
142:c2f7a8530e51 143:0599fb01dc41
   132 def revsetextinct(repo, subset, x):
   132 def revsetextinct(repo, subset, x):
   133     """obsolete changesets without obsolete descendants"""
   133     """obsolete changesets without obsolete descendants"""
   134     args = revset.getargs(x, 0, 0, 'unstable takes no arguments')
   134     args = revset.getargs(x, 0, 0, 'unstable takes no arguments')
   135     return [r for r in subset if r in repo._extinctset]
   135     return [r for r in subset if r in repo._extinctset]
   136 
   136 
       
   137 
       
   138 def _obsparents(repo, narrow, s):
       
   139     cs = set()
       
   140     nm = repo.changelog.nodemap
       
   141     for r in s:
       
   142         for p in repo._obssubrels.get(repo[r].node(), ()):
       
   143             pr = nm.get(p, None)
       
   144             if pr is not None:
       
   145                 cs.add(pr)
       
   146     return cs
       
   147 
       
   148 
       
   149 def revsetobsparents(repo, subset, x):
       
   150     """obsolete parents of a changeset"""
       
   151     s = revset.getset(repo, range(len(repo)), x)
       
   152     cs = _obsparents(repo, subset, s)
       
   153     return [r for r in subset if r in cs]
       
   154 
   137 ### Other Extension compat
   155 ### Other Extension compat
   138 ############################
   156 ############################
   139 
   157 
   140 def concludenode(orig, repo, rev, *args, **kwargs):
   158 def concludenode(orig, repo, rev, *args, **kwargs):
   141     """wrapper for rebase 's concludenode that set obsolete relation"""
   159     """wrapper for rebase 's concludenode that set obsolete relation"""
   158 
   176 
   159     revset.symbols["obsolete"] = revsetobsolete
   177     revset.symbols["obsolete"] = revsetobsolete
   160     revset.symbols["unstable"] = revsetunstable
   178     revset.symbols["unstable"] = revsetunstable
   161     revset.symbols["suspended"] = revsetsuspended
   179     revset.symbols["suspended"] = revsetsuspended
   162     revset.symbols["extinct"] = revsetextinct
   180     revset.symbols["extinct"] = revsetextinct
       
   181     revset.symbols["obsparents"] = revsetobsparents
   163 
   182 
   164 
   183 
   165     try:
   184     try:
   166         rebase = extensions.find('rebase')
   185         rebase = extensions.find('rebase')
   167         if rebase:
   186         if rebase: