Mercurial > hg
comparison mercurial/obsolete.py @ 17828:9495be4126ef
obsolete: add the detection of bumped changeset.
Bumped changesets are non-public changesets that tries to succeed a public()
changeset.
author | Pierre-Yves David <pierre-yves.david@logilab.fr> |
---|---|
date | Fri, 19 Oct 2012 00:36:18 +0200 |
parents | 612db9d7e76a |
children | 70b08df24fef |
comparison
equal
deleted
inserted
replaced
17827:612db9d7e76a | 17828:9495be4126ef |
---|---|
366 for suc in mark[1]: | 366 for suc in mark[1]: |
367 if suc not in seen: | 367 if suc not in seen: |
368 seen.add(suc) | 368 seen.add(suc) |
369 remaining.add(suc) | 369 remaining.add(suc) |
370 | 370 |
371 # mapping of 'set-name' -> <function to computer this set> | 371 def _knownrevs(repo, nodes): |
372 """yield revision numbers of known nodes passed in parameters | |
373 | |
374 Unknown revisions are silently ignored.""" | |
375 torev = repo.changelog.nodemap.get | |
376 for n in nodes: | |
377 rev = torev(n) | |
378 if rev is not None: | |
379 yield rev | |
380 | |
381 # mapping of 'set-name' -> <function to compute this set> | |
372 cachefuncs = {} | 382 cachefuncs = {} |
373 def cachefor(name): | 383 def cachefor(name): |
374 """Decorator to register a function as computing the cache for a set""" | 384 """Decorator to register a function as computing the cache for a set""" |
375 def decorator(func): | 385 def decorator(func): |
376 assert name not in cachefuncs | 386 assert name not in cachefuncs |
429 | 439 |
430 @cachefor('extinct') | 440 @cachefor('extinct') |
431 def _computeextinctset(repo): | 441 def _computeextinctset(repo): |
432 """the set of obsolete parents without non obsolete descendants""" | 442 """the set of obsolete parents without non obsolete descendants""" |
433 return set(repo.revs('obsolete() - obsolete()::unstable()')) | 443 return set(repo.revs('obsolete() - obsolete()::unstable()')) |
444 | |
445 | |
446 @cachefor('bumped') | |
447 def _computebumpedset(repo): | |
448 """the set of revs trying to obsolete public revisions""" | |
449 # get all possible bumped changesets | |
450 tonode = repo.changelog.node | |
451 publicnodes = (tonode(r) for r in repo.revs('public()')) | |
452 successors = allsuccessors(repo.obsstore, publicnodes) | |
453 # revision public or already obsolete don't count as bumped | |
454 query = '%ld - obsolete() - public()' | |
455 return set(repo.revs(query, _knownrevs(repo, successors))) | |
434 | 456 |
435 def createmarkers(repo, relations, flag=0, metadata=None): | 457 def createmarkers(repo, relations, flag=0, metadata=None): |
436 """Add obsolete markers between changesets in a repo | 458 """Add obsolete markers between changesets in a repo |
437 | 459 |
438 <relations> must be an iterable of (<old>, (<new>, ...)) tuple. | 460 <relations> must be an iterable of (<old>, (<new>, ...)) tuple. |