comparison hgext/obsolete.py @ 382:58fdb2180064

Use the core check heads mecanism to prevent zaelous warning
author Pierre-Yves David <pierre-yves.david@logilab.fr>
date Wed, 25 Jul 2012 19:07:20 +0200
parents 3a161a89d65d
children 57bccc6452e9
comparison
equal deleted inserted replaced
381:3a161a89d65d 382:58fdb2180064
446 # do not push instability 446 # do not push instability
447 for h in outgoing.missingheads: 447 for h in outgoing.missingheads:
448 # checking heads only is enought because any thing base on obsolete 448 # checking heads only is enought because any thing base on obsolete
449 # changeset is either obsolete or unstable. 449 # changeset is either obsolete or unstable.
450 ctx = repo[h] 450 ctx = repo[h]
451 if ctx.unstable():
452 raise util.Abort(_("push includes an unstable changeset: %s!")
453 % ctx)
454 if ctx.obsolete():
455 raise util.Abort(_("push includes an obsolete changeset: %s!")
456 % ctx)
457 if ctx.latecomer(): 451 if ctx.latecomer():
458 raise util.Abort(_("push includes an latecomer changeset: %s!") 452 raise util.Abort(_("push includes an latecomer changeset: %s!")
459 % ctx) 453 % ctx)
460 if ctx.conflicting(): 454 if ctx.conflicting():
461 raise util.Abort(_("push includes conflicting changeset: %s!") 455 raise util.Abort(_("push includes conflicting changeset: %s!")
462 % ctx) 456 % ctx)
463 ### patch remote branch map 457 return orig(repo, remote, outgoing, *args, **kwargs)
464 # do not read it this burn eyes
465 try:
466 if 'oldbranchmap' not in vars(remote):
467 remote.oldbranchmap = remote.branchmap
468 def branchmap():
469 newbm = {}
470 oldbm = None
471 if (util.safehasattr(discovery, 'visiblebranchmap')
472 and not util.safehasattr(remote, 'ignorevisiblebranchmap')
473 ):
474 remote.ignorevisiblebranchmap = False
475 remote.branchmap = remote.oldbranchmap
476 oldbm = phases.visiblebranchmap(remote)
477 remote.branchmap = remote.newbranchmap
478 remote.ignorevisiblebranchmap = True
479 if oldbm is None:
480 oldbm = remote.oldbranchmap()
481 for branch, nodes in oldbm.iteritems():
482 nodes = list(nodes)
483 new = set()
484 while nodes:
485 n = nodes.pop()
486 if n in repo.obsstore.precursors:
487 markers = repo.obsstore.precursors[n]
488 for mark in markers:
489 for newernode in mark[1]:
490 if newernode is not None:
491 nodes.append(newernode)
492 else:
493 new.add(n)
494 if new:
495 newbm[branch] = list(new)
496 return newbm
497 remote.ignorevisiblebranchmap = True
498 remote.branchmap = branchmap
499 remote.newbranchmap = branchmap
500 return orig(repo, remote, outgoing, *args, **kwargs)
501 finally:
502 remote.__dict__.pop('branchmap', None) # restore class one
503 remote.__dict__.pop('oldbranchmap', None)
504 remote.__dict__.pop('newbranchmap', None)
505 remote.__dict__.pop('ignorevisiblebranchmap', None)
506
507 # eye are still burning
508 def wrapvisiblebranchmap(orig, repo):
509 ignore = getattr(repo, 'ignorevisiblebranchmap', None)
510 if ignore is None:
511 return orig(repo)
512 elif ignore:
513 return repo.branchmap()
514 else:
515 return None # break recursion
516 458
517 def wrapclearcache(orig, repo, *args, **kwargs): 459 def wrapclearcache(orig, repo, *args, **kwargs):
518 try: 460 try:
519 return orig(repo, *args, **kwargs) 461 return orig(repo, *args, **kwargs)
520 finally: 462 finally:
709 if util.safehasattr(cmdutil, 'amend'): 651 if util.safehasattr(cmdutil, 'amend'):
710 extensions.wrapfunction(cmdutil, 'amend', wrapcmdutilamend) 652 extensions.wrapfunction(cmdutil, 'amend', wrapcmdutilamend)
711 extensions.wrapfunction(discovery, 'checkheads', wrapcheckheads) 653 extensions.wrapfunction(discovery, 'checkheads', wrapcheckheads)
712 extensions.wrapfunction(discovery, 'visibleheads', noextinctsvisibleheads) 654 extensions.wrapfunction(discovery, 'visibleheads', noextinctsvisibleheads)
713 extensions.wrapfunction(phases, 'advanceboundary', wrapclearcache) 655 extensions.wrapfunction(phases, 'advanceboundary', wrapclearcache)
714 if util.safehasattr(discovery, 'visiblebranchmap'):
715 extensions.wrapfunction(discovery, 'visiblebranchmap', wrapvisiblebranchmap)
716 656
717 ### serialisation 657 ### serialisation
718 ############################# 658 #############################
719 659
720 def _obsserialise(obssubrels, flike): 660 def _obsserialise(obssubrels, flike):