Mercurial > hg
view tests/test-conflict.t @ 27633:37d7cf569cf3
wireproto: support disabling bundle1 only if repo is generaldelta
I recently implemented the server.bundle1* options to control whether
bundle1 exchange is allowed.
After thinking about Mozilla's strategy for handling generaldelta
rollout a bit more, I think server operators need an additional
lever: disable bundle1 if and only if the repo is generaldelta.
bundle1 exchange for non-generaldelta repos will not have the potential
for CPU explosion that generaldelta repos do. Therefore, it makes sense
for server operators to continue to allow bundle1 exchange for
non-generaldelta repos without having to set a per-repo hgrc option
to change the policy depending on whether the repo is generaldelta.
This patch introduces a new set of options to control bundle1 behavior
for generaldelta repos. These options enable server operators to limit
bundle1 restrictions to the class of repos that can be performance
issues. It also allows server operators to tie bundle1 access to store
format. In many server environments (including Mozilla's), legacy repos
will not be generaldelta and new repos will or might be. New repos often
aren't bound by legacy access requirements, so setting a global policy
that disallows access to new/generaldelta repos via bundle1 could be a
reasonable policy in many server environments. This patch makes this
policy very easy to implement (modify global hgrc, add options to
existing generaldelta repos to grandfather them in).
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Sun, 20 Dec 2015 11:56:24 -0800 |
parents | ef1eb6df7071 |
children | 72072cfc7e91 |
line wrap: on
line source
$ hg init $ cat << EOF > a > Small Mathematical Series. > One > Two > Three > Four > Five > Hop we are done. > EOF $ 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 $ 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 created new head $ hg merge 1 merging a warning: conflicts while merging a! (edit, 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] $ hg id 618808747361+c0c68e4fe667+ tip $ cat a Small Mathematical Series. <<<<<<< local: 618808747361 - test: branch2 1 2 3 6 8 ======= 1 2 3 4 5 >>>>>>> other: c0c68e4fe667 - test: branch1 Hop we are done. $ 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 while merging a! (edit, 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 while merging a! (edit, 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 while merging a! (edit, 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 while merging a! (edit, 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. internal:merge3 $ hg up -q --clean . $ hg merge 1 --tool internal:merge3 merging a warning: conflicts while merging a! (edit, 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. Add some unconflicting changes on each head, to make sure we really are merging, unlike :local and :other $ hg up -C 2 files updated, 0 files merged, 0 files removed, 0 files unresolved $ printf "\n\nEnd of file\n" >> a $ hg ci -m "Add some stuff at the end" $ hg up -r 1 1 files updated, 0 files merged, 1 files removed, 0 files unresolved $ printf "Start of file\n\n\n" > tmp $ cat a >> tmp $ mv tmp a $ hg ci -m "Add some stuff at the beginning" Now test :merge-other and :merge-local $ hg merge merging a warning: conflicts while merging a! (edit, then use 'hg resolve --mark') 1 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] $ hg resolve --tool :merge-other a merging a (no more unresolved files) $ cat a Start of file Small Mathematical Series. 1 2 3 6 8 Hop we are done. End of file $ hg up -C 1 files updated, 0 files merged, 1 files removed, 0 files unresolved $ hg merge --tool :merge-local merging a 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit) $ cat a Start of file Small Mathematical Series. 1 2 3 4 5 Hop we are done. End of file