Show More
@@ -769,6 +769,38 b' def commonancestors(repo, subset, x):' | |||
|
769 | 769 | return subset |
|
770 | 770 | |
|
771 | 771 | |
|
772 | @predicate(b'conflictlocal()', safe=True) | |
|
773 | def conflictlocal(repo, subset, x): | |
|
774 | """The local side of the merge, if currently in an unresolved merge. | |
|
775 | ||
|
776 | "merge" here includes merge conflicts from e.g. 'hg rebase' or 'hg graft'. | |
|
777 | """ | |
|
778 | getargs(x, 0, 0, _(b"conflictlocal takes no arguments")) | |
|
779 | from . import merge | |
|
780 | ||
|
781 | mergestate = merge.mergestate.read(repo) | |
|
782 | if mergestate.active() and repo.changelog.hasnode(mergestate.local): | |
|
783 | return subset & {repo.changelog.rev(mergestate.local)} | |
|
784 | ||
|
785 | return baseset() | |
|
786 | ||
|
787 | ||
|
788 | @predicate(b'conflictother()', safe=True) | |
|
789 | def conflictother(repo, subset, x): | |
|
790 | """The other side of the merge, if currently in an unresolved merge. | |
|
791 | ||
|
792 | "merge" here includes merge conflicts from e.g. 'hg rebase' or 'hg graft'. | |
|
793 | """ | |
|
794 | getargs(x, 0, 0, _(b"conflictother takes no arguments")) | |
|
795 | from . import merge | |
|
796 | ||
|
797 | mergestate = merge.mergestate.read(repo) | |
|
798 | if mergestate.active() and repo.changelog.hasnode(mergestate.other): | |
|
799 | return subset & {repo.changelog.rev(mergestate.other)} | |
|
800 | ||
|
801 | return baseset() | |
|
802 | ||
|
803 | ||
|
772 | 804 | @predicate(b'contains(pattern)', weight=100) |
|
773 | 805 | def contains(repo, subset, x): |
|
774 | 806 | """The revision's manifest contains a file matching pattern (but might not |
@@ -3,6 +3,11 b'' | |||
|
3 | 3 | * `hg purge`/`hg clean` can now delete ignored files instead of |
|
4 | 4 | untracked files, with the new -i flag. |
|
5 | 5 | |
|
6 | * New `conflictlocal()` and `conflictother()` revsets returns the | |
|
7 | commits that are being merged, when there are conflicts. Also works | |
|
8 | for conflicts caused by e.g. `hg graft`. | |
|
9 | ||
|
10 | ||
|
6 | 11 | == New Experimental Features == |
|
7 | 12 | |
|
8 | 13 |
@@ -23,3 +23,37 b' Test hg behaves when committing with a m' | |||
|
23 | 23 | abort: cannot commit merge with missing files |
|
24 | 24 | [255] |
|
25 | 25 | |
|
26 | ||
|
27 | Test conflict*() revsets | |
|
28 | ||
|
29 | # Bad usage | |
|
30 | $ hg log -r 'conflictlocal(foo)' | |
|
31 | hg: parse error: conflictlocal takes no arguments | |
|
32 | [255] | |
|
33 | $ hg log -r 'conflictother(foo)' | |
|
34 | hg: parse error: conflictother takes no arguments | |
|
35 | [255] | |
|
36 | $ hg co -C . | |
|
37 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
|
38 | # No merge parents when not merging | |
|
39 | $ hg log -r 'conflictlocal() + conflictother()' | |
|
40 | # No merge parents when there is no conflict | |
|
41 | $ hg merge 1 | |
|
42 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
|
43 | (branch merge, don't forget to commit) | |
|
44 | $ hg log -r 'conflictlocal() + conflictother()' | |
|
45 | $ hg co -C . | |
|
46 | 0 files updated, 0 files merged, 1 files removed, 0 files unresolved | |
|
47 | $ echo conflict > b | |
|
48 | $ hg ci -Aqm 'conflicting change to b' | |
|
49 | $ hg merge 1 | |
|
50 | merging b | |
|
51 | warning: conflicts while merging b! (edit, then use 'hg resolve --mark') | |
|
52 | 0 files updated, 0 files merged, 0 files removed, 1 files unresolved | |
|
53 | use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon | |
|
54 | [1] | |
|
55 | # Shows merge parents when there is a conflict | |
|
56 | $ hg log -r 'conflictlocal()' -T '{rev} {desc}\n' | |
|
57 | 3 conflicting change to b | |
|
58 | $ hg log -r 'conflictother()' -T '{rev} {desc}\n' | |
|
59 | 1 commit #1 |
General Comments 0
You need to be logged in to leave comments.
Login now