mercurial/branchmap.py
changeset 22357 9c3c3dc14a65
parent 22356 3c8fb24334e9
child 23785 cb99bacb9b4e
equal deleted inserted replaced
22356:3c8fb24334e9 22357:9c3c3dc14a65
   237         for r in revgen:
   237         for r in revgen:
   238             branch, closesbranch = getbranchinfo(r)
   238             branch, closesbranch = getbranchinfo(r)
   239             newbranches.setdefault(branch, []).append(r)
   239             newbranches.setdefault(branch, []).append(r)
   240             if closesbranch:
   240             if closesbranch:
   241                 self._closednodes.add(cl.node(r))
   241                 self._closednodes.add(cl.node(r))
       
   242 
       
   243         # fetch current topological heads to speed up filtering
       
   244         topoheads = set(cl.headrevs())
       
   245 
   242         # if older branchheads are reachable from new ones, they aren't
   246         # if older branchheads are reachable from new ones, they aren't
   243         # really branchheads. Note checking parents is insufficient:
   247         # really branchheads. Note checking parents is insufficient:
   244         # 1 (branch a) -> 2 (branch b) -> 3 (branch a)
   248         # 1 (branch a) -> 2 (branch b) -> 3 (branch a)
   245         for branch, newheadrevs in newbranches.iteritems():
   249         for branch, newheadrevs in newbranches.iteritems():
   246             bheads = self.setdefault(branch, [])
   250             bheads = self.setdefault(branch, [])
   253             bheadset.update(newheadrevs)
   257             bheadset.update(newheadrevs)
   254 
   258 
   255             # This prunes out two kinds of heads - heads that are superseded by
   259             # This prunes out two kinds of heads - heads that are superseded by
   256             # a head in newheadrevs, and newheadrevs that are not heads because
   260             # a head in newheadrevs, and newheadrevs that are not heads because
   257             # an existing head is their descendant.
   261             # an existing head is their descendant.
   258             ancestors = set(cl.ancestors(newheadrevs, min(bheadset)))
   262             uncertain = bheadset - topoheads
   259             bheadset -= ancestors
   263             if uncertain:
       
   264                 floorrev = min(uncertain)
       
   265                 ancestors = set(cl.ancestors(newheadrevs, floorrev))
       
   266                 bheadset -= ancestors
   260             bheadrevs = sorted(bheadset)
   267             bheadrevs = sorted(bheadset)
   261             self[branch] = [cl.node(rev) for rev in bheadrevs]
   268             self[branch] = [cl.node(rev) for rev in bheadrevs]
   262             tiprev = bheadrevs[-1]
   269             tiprev = bheadrevs[-1]
   263             if tiprev > self.tiprev:
   270             if tiprev > self.tiprev:
   264                 self.tipnode = cl.node(tiprev)
   271                 self.tipnode = cl.node(tiprev)