hgext/evolve.py
changeset 816 03587920dfd9
parent 811 acfa2b67cff6
child 817 c2bf0eb727f1
equal deleted inserted replaced
815:916bebf91c41 816:03587920dfd9
   679         histedit = extensions.find('histedit')
   679         histedit = extensions.find('histedit')
   680         if histedit:
   680         if histedit:
   681             extensions.wrapcommand(histedit.cmdtable, 'histedit', warnobserrors)
   681             extensions.wrapcommand(histedit.cmdtable, 'histedit', warnobserrors)
   682     except KeyError:
   682     except KeyError:
   683         pass  # rebase not found
   683         pass  # rebase not found
   684 
       
   685 
   684 
   686 #####################################################################
   685 #####################################################################
   687 ### Old Evolve extension content                                  ###
   686 ### Old Evolve extension content                                  ###
   688 #####################################################################
   687 #####################################################################
   689 
   688 
  2029     entry[1].append(('o', 'obsolete', [],
  2028     entry[1].append(('o', 'obsolete', [],
  2030                      _("make graft obsoletes this revision")))
  2029                      _("make graft obsoletes this revision")))
  2031     entry[1].append(('O', 'old-obsolete', False,
  2030     entry[1].append(('O', 'old-obsolete', False,
  2032                      _("make graft obsoletes its source")))
  2031                      _("make graft obsoletes its source")))
  2033 
  2032 
       
  2033 #####################################################################
       
  2034 ### Obsolescence marker exchange experimenation                   ###
       
  2035 #####################################################################
       
  2036 
       
  2037 @command('debugobsoleterelevant',
       
  2038          [],
       
  2039          'REVSET')
       
  2040 def debugobsoleterelevant(ui, repo, *revsets):
       
  2041     """print allobsolescence marker relevant to a set of revision"""
       
  2042     nodes = [ctx.node() for ctx in repo.set('%lr', revsets)]
       
  2043     markers = repo.obsstore.relevantmarkers(nodes)
       
  2044     for rawmarker in sorted(markers):
       
  2045         marker = obsolete.marker(repo, rawmarker)
       
  2046         cmdutil.showmarker(ui, marker)
       
  2047 
       
  2048 @eh.addattr(obsolete.obsstore, 'relevantmarkers')
       
  2049 def relevantmarkers(self, nodes):
       
  2050     """return a set of all obsolescence marker relevant to a set of node.
       
  2051 
       
  2052     "relevant" to a set of node mean:
       
  2053 
       
  2054     - marker that use this changeset as successors
       
  2055     - prune marker of direct children on this changeset.
       
  2056     - recursive application of the two rules on precursors of these markers
       
  2057 
       
  2058     It  a set so you cannot rely on order"""
       
  2059     seennodes = set(nodes)
       
  2060     seenmarkers = set()
       
  2061     pendingnodes = set(nodes)
       
  2062     precursorsmarkers = self.precursors
       
  2063     prunedchildren = self.prunedchildren
       
  2064     while pendingnodes:
       
  2065         direct = set()
       
  2066         for current in pendingnodes:
       
  2067             direct.update(precursorsmarkers.get(current, ()))
       
  2068             direct.update(prunedchildren.get(current, ()))
       
  2069         direct -= seenmarkers
       
  2070         pendingnodes = set([m[0] for m in direct])
       
  2071         seenmarkers |= direct
       
  2072         pendingnodes -= seennodes
       
  2073         seennodes |= pendingnodes
       
  2074     return seenmarkers
       
  2075 
       
  2076