mercurial/obsolete.py
changeset 35137 5cd6682b5a90
parent 35136 82680919d75e
child 35365 7354fda50e8b
equal deleted inserted replaced
35136:82680919d75e 35137:5cd6682b5a90
  1021     """the set of rev that compete to be the final successors of some revision.
  1021     """the set of rev that compete to be the final successors of some revision.
  1022     """
  1022     """
  1023     divergent = set()
  1023     divergent = set()
  1024     obsstore = repo.obsstore
  1024     obsstore = repo.obsstore
  1025     newermap = {}
  1025     newermap = {}
  1026     for ctx in repo.set('(not public()) - obsolete()'):
  1026     tonode = repo.changelog.node
  1027         mark = obsstore.predecessors.get(ctx.node(), ())
  1027     for rev in repo.revs('(not public()) - obsolete()'):
       
  1028         node = tonode(rev)
       
  1029         mark = obsstore.predecessors.get(node, ())
  1028         toprocess = set(mark)
  1030         toprocess = set(mark)
  1029         seen = set()
  1031         seen = set()
  1030         while toprocess:
  1032         while toprocess:
  1031             prec = toprocess.pop()[0]
  1033             prec = toprocess.pop()[0]
  1032             if prec in seen:
  1034             if prec in seen:
  1034             seen.add(prec)
  1036             seen.add(prec)
  1035             if prec not in newermap:
  1037             if prec not in newermap:
  1036                 obsutil.successorssets(repo, prec, cache=newermap)
  1038                 obsutil.successorssets(repo, prec, cache=newermap)
  1037             newer = [n for n in newermap[prec] if n]
  1039             newer = [n for n in newermap[prec] if n]
  1038             if len(newer) > 1:
  1040             if len(newer) > 1:
  1039                 divergent.add(ctx.rev())
  1041                 divergent.add(rev)
  1040                 break
  1042                 break
  1041             toprocess.update(obsstore.predecessors.get(prec, ()))
  1043             toprocess.update(obsstore.predecessors.get(prec, ()))
  1042     return divergent
  1044     return divergent
  1043 
  1045 
  1044 
  1046