equal
deleted
inserted
replaced
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) |