326 repo = repo.unfiltered() |
326 repo = repo.unfiltered() |
327 foreground = set(repo.set(b'%ln::', nodes)) |
327 foreground = set(repo.set(b'%ln::', nodes)) |
328 if repo.obsstore: |
328 if repo.obsstore: |
329 # We only need this complicated logic if there is obsolescence |
329 # We only need this complicated logic if there is obsolescence |
330 # XXX will probably deserve an optimised revset. |
330 # XXX will probably deserve an optimised revset. |
331 nm = repo.changelog.nodemap |
331 has_node = repo.changelog.index.has_node |
332 plen = -1 |
332 plen = -1 |
333 # compute the whole set of successors or descendants |
333 # compute the whole set of successors or descendants |
334 while len(foreground) != plen: |
334 while len(foreground) != plen: |
335 plen = len(foreground) |
335 plen = len(foreground) |
336 succs = set(c.node() for c in foreground) |
336 succs = set(c.node() for c in foreground) |
337 mutable = [c.node() for c in foreground if c.mutable()] |
337 mutable = [c.node() for c in foreground if c.mutable()] |
338 succs.update(allsuccessors(repo.obsstore, mutable)) |
338 succs.update(allsuccessors(repo.obsstore, mutable)) |
339 known = (n for n in succs if n in nm) |
339 known = (n for n in succs if has_node(n)) |
340 foreground = set(repo.set(b'%ln::', known)) |
340 foreground = set(repo.set(b'%ln::', known)) |
341 return set(c.node() for c in foreground) |
341 return set(c.node() for c in foreground) |
342 |
342 |
343 |
343 |
344 # effectflag field |
344 # effectflag field |