Show More
@@ -616,30 +616,22 b' def _commonancestorheads(repo, subset, x' | |||||
616 | # This is an internal method is for quickly calculating "heads(::x and |
|
616 | # This is an internal method is for quickly calculating "heads(::x and | |
617 | # ::y)" |
|
617 | # ::y)" | |
618 |
|
618 | |||
619 | # These greatest common ancestors are the same ones that the consesus bid |
|
619 | # These greatest common ancestors are the same ones that the consensus bid | |
620 | # merge will find. |
|
620 | # merge will find. | |
621 |
|
|
621 | startrevs = getset(repo, fullreposet(repo), x, order=anyorder) | |
622 |
|
622 | |||
623 |
ancs = repo.changelog._commonancestorsheads(*list( |
|
623 | ancs = repo.changelog._commonancestorsheads(*list(startrevs)) | |
624 | return subset & baseset(ancs) |
|
624 | return subset & baseset(ancs) | |
625 |
|
625 | |||
626 | @predicate('commonancestors(set)', safe=True) |
|
626 | @predicate('commonancestors(set)', safe=True) | |
627 | def commonancestors(repo, subset, x): |
|
627 | def commonancestors(repo, subset, x): | |
628 |
""" |
|
628 | """Changesets that are ancestors of every changeset in set. | |
629 |
|
||||
630 | This method is for calculating "::x and ::y" (i.e. all the ancestors that |
|
|||
631 | are common to both x and y) in an easy and optimized way. We can't quite |
|
|||
632 | use "::head()" because that revset returns "::x + ::y + ..." for each head |
|
|||
633 | in the repo (whereas we want "::x *and* ::y"). |
|
|||
634 |
|
||||
635 | """ |
|
629 | """ | |
636 | # only wants the heads of the set passed in |
|
630 | startrevs = getset(repo, fullreposet(repo), x, order=anyorder) | |
637 | h = heads(repo, fullreposet(repo), x, anyorder) |
|
631 | if not startrevs: | |
638 | if not h: |
|
|||
639 | return baseset() |
|
632 | return baseset() | |
640 |
for r in |
|
633 | for r in startrevs: | |
641 | subset &= dagop.revancestors(repo, baseset([r])) |
|
634 | subset &= dagop.revancestors(repo, baseset([r])) | |
642 |
|
||||
643 | return subset |
|
635 | return subset | |
644 |
|
636 | |||
645 | @predicate('contains(pattern)', weight=100) |
|
637 | @predicate('contains(pattern)', weight=100) |
@@ -1049,7 +1049,7 b' test common ancestors' | |||||
1049 | 2 |
|
1049 | 2 | |
1050 | 4 |
|
1050 | 4 | |
1051 |
|
1051 | |||
1052 | $ hg log -T '{rev}\n' -r 'commonancestors(head())' |
|
1052 | $ hg log -T '{rev}\n' -r 'commonancestors(heads(all()))' | |
1053 | 0 |
|
1053 | 0 | |
1054 | 1 |
|
1054 | 1 | |
1055 | 2 |
|
1055 | 2 | |
@@ -1063,11 +1063,31 b' test common ancestors' | |||||
1063 | 8 |
|
1063 | 8 | |
1064 | 9 |
|
1064 | 9 | |
1065 |
|
1065 | |||
|
1066 | $ hg log -T '{rev}\n' -r 'commonancestors(8 + 9)' | |||
|
1067 | 0 | |||
|
1068 | 1 | |||
|
1069 | 2 | |||
|
1070 | 4 | |||
|
1071 | 8 | |||
|
1072 | ||||
|
1073 | test the specialized implementation of heads(commonancestors(..)) | |||
|
1074 | (2 gcas is tested in test-merge-criss-cross.t) | |||
|
1075 | ||||
|
1076 | $ hg log -T '{rev}\n' -r 'heads(commonancestors(7 + 9))' | |||
|
1077 | 4 | |||
|
1078 | $ hg log -T '{rev}\n' -r 'heads(commonancestors(heads(all())))' | |||
|
1079 | 4 | |||
|
1080 | $ hg log -T '{rev}\n' -r 'heads(commonancestors(9))' | |||
|
1081 | 9 | |||
|
1082 | $ hg log -T '{rev}\n' -r 'heads(commonancestors(8 + 9))' | |||
|
1083 | 8 | |||
|
1084 | ||||
1066 | test ancestor variants of empty revision |
|
1085 | test ancestor variants of empty revision | |
1067 |
|
1086 | |||
1068 | $ log 'ancestor(none())' |
|
1087 | $ log 'ancestor(none())' | |
1069 | $ log 'ancestors(none())' |
|
1088 | $ log 'ancestors(none())' | |
1070 | $ log 'commonancestors(none())' |
|
1089 | $ log 'commonancestors(none())' | |
|
1090 | $ log 'heads(commonancestors(none()))' | |||
1071 |
|
1091 | |||
1072 | test ancestors with depth limit |
|
1092 | test ancestors with depth limit | |
1073 |
|
1093 |
General Comments 0
You need to be logged in to leave comments.
Login now