Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/revset.py @ 26303:c99b4d6efdd8
merge: move default destination computation in a revset
This is another step toward having "default" destination more clear and unified.
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Thu, 17 Sep 2015 14:03:15 -0700 |
parents | 43f9976346e9 |
children | bca60842e22d |
comparison
equal
deleted
inserted
replaced
26302:5ba3358ebc7f | 26303:c99b4d6efdd8 |
---|---|
461 syms = [s for (s, fn) in symbols.items() if keep(fn)] | 461 syms = [s for (s, fn) in symbols.items() if keep(fn)] |
462 raise error.UnknownIdentifier(a[1], syms) | 462 raise error.UnknownIdentifier(a[1], syms) |
463 | 463 |
464 # functions | 464 # functions |
465 | 465 |
466 def _mergedefaultdest(repo, subset, x): | |
467 # ``_mergedefaultdest()`` | |
468 | |
469 # default destination for merge. | |
470 # # XXX: Currently private because I expect the signature to change. | |
471 # # XXX: - taking rev as arguments, | |
472 # # XXX: - bailing out in case of ambiguity vs returning all data. | |
473 getargs(x, 0, 0, _("_mergedefaultdest takes no arguments")) | |
474 if repo._activebookmark: | |
475 bmheads = repo.bookmarkheads(repo._activebookmark) | |
476 curhead = repo[repo._activebookmark].node() | |
477 if len(bmheads) == 2: | |
478 if curhead == bmheads[0]: | |
479 node = bmheads[1] | |
480 else: | |
481 node = bmheads[0] | |
482 elif len(bmheads) > 2: | |
483 raise util.Abort(_("multiple matching bookmarks to merge - " | |
484 "please merge with an explicit rev or bookmark"), | |
485 hint=_("run 'hg heads' to see all heads")) | |
486 elif len(bmheads) <= 1: | |
487 raise util.Abort(_("no matching bookmark to merge - " | |
488 "please merge with an explicit rev or bookmark"), | |
489 hint=_("run 'hg heads' to see all heads")) | |
490 else: | |
491 branch = repo[None].branch() | |
492 bheads = repo.branchheads(branch) | |
493 nbhs = [bh for bh in bheads if not repo[bh].bookmarks()] | |
494 | |
495 if len(nbhs) > 2: | |
496 raise util.Abort(_("branch '%s' has %d heads - " | |
497 "please merge with an explicit rev") | |
498 % (branch, len(bheads)), | |
499 hint=_("run 'hg heads .' to see heads")) | |
500 | |
501 parent = repo.dirstate.p1() | |
502 if len(nbhs) <= 1: | |
503 if len(bheads) > 1: | |
504 raise util.Abort(_("heads are bookmarked - " | |
505 "please merge with an explicit rev"), | |
506 hint=_("run 'hg heads' to see all heads")) | |
507 if len(repo.heads()) > 1: | |
508 raise util.Abort(_("branch '%s' has one head - " | |
509 "please merge with an explicit rev") | |
510 % branch, | |
511 hint=_("run 'hg heads' to see all heads")) | |
512 msg, hint = _('nothing to merge'), None | |
513 if parent != repo.lookup(branch): | |
514 hint = _("use 'hg update' instead") | |
515 raise util.Abort(msg, hint=hint) | |
516 | |
517 if parent not in bheads: | |
518 raise util.Abort(_('working directory not at a head revision'), | |
519 hint=_("use 'hg update' or merge with an " | |
520 "explicit revision")) | |
521 if parent == nbhs[0]: | |
522 node = nbhs[-1] | |
523 else: | |
524 node = nbhs[0] | |
525 return subset & baseset([repo[node].rev()]) | |
526 | |
466 def adds(repo, subset, x): | 527 def adds(repo, subset, x): |
467 """``adds(pattern)`` | 528 """``adds(pattern)`` |
468 Changesets that add a file matching pattern. | 529 Changesets that add a file matching pattern. |
469 | 530 |
470 The pattern without explicit kind like ``glob:`` is expected to be | 531 The pattern without explicit kind like ``glob:`` is expected to be |
2098 ls = [cl.rev(node.bin(r)) for r in s.split('\0')] | 2159 ls = [cl.rev(node.bin(r)) for r in s.split('\0')] |
2099 s = subset | 2160 s = subset |
2100 return baseset([r for r in ls if r in s]) | 2161 return baseset([r for r in ls if r in s]) |
2101 | 2162 |
2102 symbols = { | 2163 symbols = { |
2164 "_mergedefaultdest": _mergedefaultdest, | |
2103 "adds": adds, | 2165 "adds": adds, |
2104 "all": getall, | 2166 "all": getall, |
2105 "ancestor": ancestor, | 2167 "ancestor": ancestor, |
2106 "ancestors": ancestors, | 2168 "ancestors": ancestors, |
2107 "_firstancestors": _firstancestors, | 2169 "_firstancestors": _firstancestors, |