##// END OF EJS Templates
revsets: add commonancestors revset...
Sean Farley -
r38643:54609263 default
parent child Browse files
Show More
@@ -608,6 +608,22 b' def closed(repo, subset, x):'
608 608 return subset.filter(lambda r: repo[r].closesbranch(),
609 609 condrepr='<branch closed>')
610 610
611 @predicate('commonancestors(set)', safe=True)
612 def commonancestors(repo, subset, x):
613 """Returns all common ancestors of the set.
614
615 This method is for calculating "::x and ::y" (i.e. all the ancestors that
616 are common to both x and y) in an easy and optimized way. We can't quite
617 use "::head()" because that revset returns "::x + ::y + ..." for each head
618 in the repo (whereas we want "::x *and* ::y").
619
620 """
621 # only wants the heads of the set passed in
622 for r in heads(repo, fullreposet(repo), x, defineorder):
623 subset &= dagop.revancestors(repo, baseset([r]))
624
625 return subset
626
611 627 @predicate('contains(pattern)', weight=100)
612 628 def contains(repo, subset, x):
613 629 """The revision's manifest contains a file matching pattern (but might not
@@ -1041,6 +1041,28 b' test ancestors'
1041 1041 2
1042 1042 3
1043 1043
1044 test common ancestors
1045
1046 $ hg log -T '{rev}\n' -r 'commonancestors(7 + 9)'
1047 0
1048 1
1049 2
1050 4
1051
1052 $ hg log -T '{rev}\n' -r 'commonancestors(head())'
1053 0
1054 1
1055 2
1056 4
1057
1058 $ hg log -T '{rev}\n' -r 'commonancestors(9)'
1059 0
1060 1
1061 2
1062 4
1063 8
1064 9
1065
1044 1066 test ancestors with depth limit
1045 1067
1046 1068 (depth=0 selects the node itself)
General Comments 0
You need to be logged in to leave comments. Login now