sapling/tests/test-amend-restack-multidest.t
Phil Cohen 3e592b81ae filemerge: add number of textual conflicts in each file to error message
Summary:
When you get an error, let's print the number of conflicts in each file. This will give the user some sense of how much work they have to do.

The code change is entirely in `filemerge.py`, and `tests/test-merge-conflict-count.t` adds a new test.

Reviewed By: quark-zju

Differential Revision: D9815243

fbshipit-source-id: 1b73a1db293902ac7242997a7d6ae09478344068
2018-10-22 12:47:41 -07:00

208 lines
3.8 KiB
Perl

$ . helpers-usechg.sh
$ enable amend rebase
$ setconfig experimental.evolution.allowdivergence=True
$ setconfig experimental.evolution="createmarkers, allowunstable"
$ mkcommit() {
> echo "$1" > "$1"
> hg add "$1"
> hg ci -m "add $1"
> }
Restack does topological sort and only rebases "D" once:
$ newrepo
$ hg debugdrawdag<<'EOS'
> D
> |
> C
> |
> B
> |
> A
> EOS
$ hg update B -q
$ hg commit --amend -m B2 -q --no-rebase 2>/dev/null
$ hg tag --local B2
$ hg rebase -r C -d B2 -q
$ hg commit --amend -m B3 -q --no-rebase 2>/dev/null
$ hg tag --local B3
$ showgraph
@ 6 da1d4fe88e84 B3
|
| o 5 ca53c8ceb284 C
| |
| x 4 fdcbd16a7d51 B2
|/
| o 3 f585351a92f8 D
| |
| x 2 26805aba1e60 C
| |
| x 1 112478962961 B
|/
o 0 426bada5c675 A
$ hg rebase --restack
rebasing 5:ca53c8ceb284 "C"
rebasing 3:f585351a92f8 "D" (D)
$ showgraph
o 8 981f3734c126 D
|
o 7 bab9c1b0a249 C
|
@ 6 da1d4fe88e84 B3
|
| x 4 fdcbd16a7d51 B2
|/
| x 3 f585351a92f8 D
| |
| x 2 26805aba1e60 C
| |
| x 1 112478962961 B
|/
o 0 426bada5c675 A
Restack will only restack the "current" stack and leave other stacks untouched.
$ newrepo
$ hg debugdrawdag<<'EOS'
> D H K
> | | |
> B C F G J L # amend: B -> C
> |/ |/ |/ # amend: F -> G
> A E I Z # amend: J -> L
> EOS
$ hg phase --public -r Z+I+A+E
$ hg update -q Z
$ hg rebase --restack
nothing to restack
[1]
$ hg update -q D
$ hg rebase --restack
rebasing 10:be0ef73c17ad "D" (D)
$ hg update -q G
$ hg rebase --restack
rebasing 11:cc209258a732 "H" (H)
$ hg update -q I
$ hg rebase --restack
rebasing 12:59760668f0e1 "K" (K)
$ rm .hg/localtags
$ showgraph
o 15 c97827ce80f6 K
|
| o 14 47528c67632b H
| |
| | o 13 5cb8c357af9e D
| | |
o | | 9 a975bfef72d2 L
| | |
| o | 7 889f49cd29f6 G
| | |
| | o 5 dc0947a82db8 C
| | |
| | | o 3 48b9aae0607f Z
| | |
@ | | 2 02a9ac6a13a6 I
/ /
o / 1 e8e0a81d950f E
/
o 0 426bada5c675 A
The "prune" cases.
$ newrepo
$ hg debugdrawdag<<'EOS'
> D E
> |/
> C
> | # amend: F -> F2
> B G H # prune: A, C, F2
> | |/
> A F F2
> EOS
$ hg update -q B
$ hg rebase --restack
rebasing 3:112478962961 "B" (B)
rebasing 7:f585351a92f8 "D" (D)
rebasing 8:78d2dca436b2 "E" (E tip)
$ hg update -q H
$ hg rebase --restack
rebasing 4:8fdb2c1feb20 "G" (G)
rebasing 5:02ac06fe83b9 "H" (H)
$ rm .hg/localtags
$ showgraph
@ 13 3e1fefc3c8db H
o 12 0706cfb95b41 G
o 11 8c0ccd1582b3 E
|
| o 10 f88ac1d7b477 D
|/
o 9 653ee58caf75 B
Restack could resume after resolving merge conflicts.
$ newrepo
$ hg debugdrawdag<<'EOS'
> F G # F/C = F # cause conflict
> | | # G/E = G # cause conflict
> B C D E # amend: B -> C
> |/ |/ # amend: D -> E
> | /
> | /
> | /
> |/
> A
> EOS
$ hg update -q F
$ hg rebase --restack
rebasing 5:ed8545a5c22a "F" (F)
merging C
warning: 1 conflicts while merging C! (edit, then use 'hg resolve --mark')
unresolved conflicts (see hg resolve, then hg rebase --continue)
[1]
$ rm .hg/localtags
$ echo R > C
$ hg resolve --mark -q
continue: hg rebase --continue
$ hg rebase --continue
rebasing 5:ed8545a5c22a "F"
rebasing 6:4d1ef7d890c5 "G" (tip)
merging E
warning: 1 conflicts while merging E! (edit, then use 'hg resolve --mark')
unresolved conflicts (see hg resolve, then hg rebase --continue)
[1]
$ echo R > E
$ hg resolve --mark -q
continue: hg rebase --continue
$ hg rebase --continue
already rebased 5:ed8545a5c22a "F" as 2282fe522d5c
rebasing 6:4d1ef7d890c5 "G"
$ showgraph
o 8 3b00517bf275 G
|
| @ 7 2282fe522d5c F
| |
o | 4 7fb047a69f22 E
| |
| o 2 dc0947a82db8 C
|/
o 0 426bada5c675 A