comparison mercurial/obsolete.py @ 18984:efef056b1ae9

obsolete: extract foreground computation from bookmark.validdest This foreground logic will be reused by update logic.
author Pierre-Yves David <pierre-yves.david@logilab.fr>
date Tue, 16 Apr 2013 15:16:33 +0200
parents e9331e979d7a
children f74f2a4e3327
comparison
equal deleted inserted replaced
18983:31bcc5112191 18984:efef056b1ae9
402 continue 402 continue
403 for suc in mark[1]: 403 for suc in mark[1]:
404 if suc not in seen: 404 if suc not in seen:
405 seen.add(suc) 405 seen.add(suc)
406 remaining.add(suc) 406 remaining.add(suc)
407
408 def foreground(repo, nodes):
409 """return all nodes in the "foreground" of other node
410
411 The foreground of a revision is anything reachable using parent -> children
412 or precursor -> sucessor relation. It is very similars to "descendant" but
413 augmented with obsolescence information.
414
415 Beware that possible obsolescence cycle may result if complexe situation.
416 """
417 repo = repo.unfiltered()
418 foreground = set(repo.set('%ln::', nodes))
419 if repo.obsstore:
420 # We only need this complicated logic if there is obsolescence
421 # XXX will probably deserve an optimised revset.
422 nm = repo.changelog.nodemap
423 plen = -1
424 # compute the whole set of successors or descendants
425 while len(foreground) != plen:
426 plen = len(foreground)
427 succs = set(c.node() for c in foreground)
428 mutable = [c.node() for c in foreground if c.mutable()]
429 succs.update(allsuccessors(repo.obsstore, mutable))
430 known = (n for n in succs if n in nm)
431 foreground = set(repo.set('%ln::', known))
432 return set(c.node() for c in foreground)
433
407 434
408 def successorssets(repo, initialnode, cache=None): 435 def successorssets(repo, initialnode, cache=None):
409 """Return all set of successors of initial nodes 436 """Return all set of successors of initial nodes
410 437
411 Successors set of changeset A are a group of revision that succeed A. It 438 Successors set of changeset A are a group of revision that succeed A. It