sapling/tests/test-conflict.t

235 lines
4.1 KiB
Perl
Raw Normal View History

2010-08-12 15:02:59 +04:00
$ hg init
$ cat << EOF > a
> Small Mathematical Series.
> One
> Two
> Three
> Four
> Five
> Hop we are done.
> EOF
2010-08-12 15:02:59 +04:00
$ hg add a
$ hg commit -m ancestor
$ cat << EOF > a
> Small Mathematical Series.
> 1
> 2
> 3
> 4
> 5
> Hop we are done.
> EOF
$ hg commit -m branch1
2010-08-12 15:02:59 +04:00
$ hg co 0
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cat << EOF > a
> Small Mathematical Series.
> 1
> 2
> 3
> 6
> 8
> Hop we are done.
> EOF
$ hg commit -m branch2
2010-08-12 15:02:59 +04:00
created new head
$ hg merge 1
merging a
warning: conflicts during merge.
merging a incomplete! (edit conflicts, then use 'hg resolve --mark')
2010-08-12 15:02:59 +04:00
0 files updated, 0 files merged, 0 files removed, 1 files unresolved
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
2010-09-17 02:51:32 +04:00
[1]
2010-08-12 15:02:59 +04:00
$ hg id
618808747361+c0c68e4fe667+ tip
2010-08-12 15:02:59 +04:00
$ cat a
Small Mathematical Series.
<<<<<<< local: 618808747361 - test: branch2
1
2
3
6
8
2010-08-12 15:02:59 +04:00
=======
1
2
3
4
5
>>>>>>> other: c0c68e4fe667 - test: branch1
Hop we are done.
2010-08-12 15:02:59 +04:00
$ hg status
M a
? a.orig
Verify custom conflict markers
$ hg up -q --clean .
$ printf "\n[ui]\nmergemarkertemplate={author} {rev}\n" >> .hg/hgrc
$ hg merge 1
merging a
warning: conflicts during merge.
merging a incomplete! (edit conflicts, then use 'hg resolve --mark')
0 files updated, 0 files merged, 0 files removed, 1 files unresolved
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
[1]
$ cat a
Small Mathematical Series.
<<<<<<< local: test 2
1
2
3
6
8
=======
1
2
3
4
5
>>>>>>> other: test 1
Hop we are done.
Verify line splitting of custom conflict marker which causes multiple lines
$ hg up -q --clean .
$ cat >> .hg/hgrc <<EOF
> [ui]
> mergemarkertemplate={author} {rev}\nfoo\nbar\nbaz
> EOF
$ hg -q merge 1
warning: conflicts during merge.
merging a incomplete! (edit conflicts, then use 'hg resolve --mark')
[1]
$ cat a
Small Mathematical Series.
<<<<<<< local: test 2
1
2
3
6
8
=======
1
2
3
4
5
>>>>>>> other: test 1
Hop we are done.
Verify line trimming of custom conflict marker using multi-byte characters
$ hg up -q --clean .
$ python <<EOF
> fp = open('logfile', 'w')
> fp.write('12345678901234567890123456789012345678901234567890' +
> '1234567890') # there are 5 more columns for 80 columns
>
> # 2 x 4 = 8 columns, but 3 x 4 = 12 bytes
> fp.write(u'\u3042\u3044\u3046\u3048'.encode('utf-8'))
>
> fp.close()
> EOF
$ hg add logfile
$ hg --encoding utf-8 commit --logfile logfile
$ cat >> .hg/hgrc <<EOF
> [ui]
> mergemarkertemplate={desc|firstline}
> EOF
$ hg -q --encoding utf-8 merge 1
warning: conflicts during merge.
merging a incomplete! (edit conflicts, then use 'hg resolve --mark')
[1]
$ cat a
Small Mathematical Series.
<<<<<<< local: 123456789012345678901234567890123456789012345678901234567890\xe3\x81\x82... (esc)
1
2
3
6
8
=======
1
2
3
4
5
>>>>>>> other: branch1
Hop we are done.
Verify basic conflict markers
$ hg up -q --clean 2
$ printf "\n[ui]\nmergemarkers=basic\n" >> .hg/hgrc
$ hg merge 1
merging a
warning: conflicts during merge.
merging a incomplete! (edit conflicts, then use 'hg resolve --mark')
0 files updated, 0 files merged, 0 files removed, 1 files unresolved
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
[1]
$ cat a
Small Mathematical Series.
<<<<<<< local
1
2
3
6
8
=======
1
2
3
4
5
>>>>>>> other
Hop we are done.
merge: add an internal:merge3 tool This variant gives access to a feature already present in ``internal:merge``: displaying merge base content. In the basic merge (calling ``hg merge``) case, including more context to the merge markers is an interesting addition. But this extra information is the only viable option in case conflict from grafting (, rebase, etc…). When grafting ``source`` on ``destination``, the parent of ``source`` is used as the ``base``. When all three changesets add content in the same location, the marker for ``source`` will contains both ``base`` and ``source`` content. Without the content of base exposed, there is no way for the user to discriminate content coming from ``base`` and content commit from ``source``. Practical example (all addition are in the same place): * ``destination`` adds ``Dest-Content`` * ``base`` adds ``Base-Content`` * ``source`` adds ``Src-Content`` Grafting ``source`` on ``destination`` will produce the following conflict: <<<<<<< destination Dest-Content ======= Base-Content Src-Content >>>>>>> source This that case there is no way to distinct ``base`` from ``source``. As a result content from ``base`` are likely to slip in the resolution result. However, adding the base make the situation very clear: <<<<<<< destination Dest-Content ||||||| base Base-Content ======= base Base-Content Src-Content >>>>>>> source Once the base is added, the addition from the grafted changeset is made clear. User can compare the content from ``base`` and ``source`` to make an enlightened decision during merge resolution.
2014-08-06 01:58:45 +04:00
internal:merge3
$ hg up -q --clean .
$ hg merge 1 --tool internal:merge3
merging a
warning: conflicts during merge.
merging a incomplete! (edit conflicts, then use 'hg resolve --mark')
0 files updated, 0 files merged, 0 files removed, 1 files unresolved
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
[1]
$ cat a
Small Mathematical Series.
<<<<<<< local
1
2
3
6
8
||||||| base
One
Two
Three
Four
Five
=======
1
2
3
4
5
>>>>>>> other
Hop we are done.