Show More
@@ -1345,14 +1345,26 Controls generic server settings. | |||
|
1345 | 1345 | Whether to allow clients to push and pull using the legacy bundle1 |
|
1346 | 1346 | exchange format. (default: True) |
|
1347 | 1347 | |
|
1348 | ``bundle1gd`` | |
|
1349 | Like ``bundle1` but only used if the repository is using the | |
|
1350 | *generaldelta* storage format. (default: True) | |
|
1351 | ||
|
1348 | 1352 | ``bundle1.push`` |
|
1349 | 1353 | Whether to allow clients to push using the legacy bundle1 exchange |
|
1350 | 1354 | format. (default: True) |
|
1351 | 1355 | |
|
1356 | ``bundle1gd.push`` | |
|
1357 | Like ``bundle1.push` but only used if the repository is using the | |
|
1358 | *generaldelta* storage format. (default: True) | |
|
1359 | ||
|
1352 | 1360 | ``bundle1.pull`` |
|
1353 | 1361 | Whether to allow clients to pull using the legacy bundle1 exchange |
|
1354 | 1362 | format. (default: True) |
|
1355 | 1363 | |
|
1364 | ``bundle1gd.pull`` | |
|
1365 | Like ``bundle1.pull` but only used if the repository is using the | |
|
1366 | *generaldelta* storage format. (default: True) | |
|
1367 | ||
|
1356 | 1368 | Large repositories using the *generaldelta* storage format should |
|
1357 | 1369 | consider setting this option because converting *generaldelta* |
|
1358 | 1370 | repositories to the exchange format required by the bundle1 data |
@@ -491,12 +491,33 def options(cmd, keys, others): | |||
|
491 | 491 | % (cmd, ",".join(others))) |
|
492 | 492 | return opts |
|
493 | 493 | |
|
494 |
def bundle1allowed( |
|
|
495 |
"""Whether a bundle1 operation is allowed from the server. |
|
|
494 | def bundle1allowed(repo, action): | |
|
495 | """Whether a bundle1 operation is allowed from the server. | |
|
496 | ||
|
497 | Priority is: | |
|
498 | ||
|
499 | 1. server.bundle1gd.<action> (if generaldelta active) | |
|
500 | 2. server.bundle1.<action> | |
|
501 | 3. server.bundle1gd (if generaldelta active) | |
|
502 | 4. server.bundle1 | |
|
503 | """ | |
|
504 | ui = repo.ui | |
|
505 | gd = 'generaldelta' in repo.requirements | |
|
506 | ||
|
507 | if gd: | |
|
508 | v = ui.configbool('server', 'bundle1gd.%s' % action, None) | |
|
509 | if v is not None: | |
|
510 | return v | |
|
511 | ||
|
496 | 512 | v = ui.configbool('server', 'bundle1.%s' % action, None) |
|
497 | 513 | if v is not None: |
|
498 | 514 | return v |
|
499 | 515 | |
|
516 | if gd: | |
|
517 | v = ui.configbool('server', 'bundle1gd', None) | |
|
518 | if v is not None: | |
|
519 | return v | |
|
520 | ||
|
500 | 521 | return ui.configbool('server', 'bundle1', True) |
|
501 | 522 | |
|
502 | 523 | # list of commands |
@@ -665,7 +686,7 def getbundle(repo, proto, others): | |||
|
665 | 686 | raise KeyError('unknown getbundle option type %s' |
|
666 | 687 | % keytype) |
|
667 | 688 | |
|
668 |
if not bundle1allowed(repo |
|
|
689 | if not bundle1allowed(repo, 'pull'): | |
|
669 | 690 | if not exchange.bundle2requested(opts.get('bundlecaps')): |
|
670 | 691 | return ooberror(bundle2required) |
|
671 | 692 | |
@@ -781,7 +802,7 def unbundle(repo, proto, heads): | |||
|
781 | 802 | fp.seek(0) |
|
782 | 803 | gen = exchange.readbundle(repo.ui, fp, None) |
|
783 | 804 | if (isinstance(gen, changegroupmod.cg1unpacker) |
|
784 |
and not bundle1allowed(repo |
|
|
805 | and not bundle1allowed(repo, 'push')): | |
|
785 | 806 | return ooberror(bundle2required) |
|
786 | 807 | |
|
787 | 808 | r = exchange.unbundle(repo, gen, their_heads, 'serve', |
@@ -977,6 +977,51 Servers can disable bundle1 for clone/pu | |||
|
977 | 977 | (see https://www.mercurial-scm.org/wiki/IncompatibleClient) |
|
978 | 978 | [255] |
|
979 | 979 | $ killdaemons.py |
|
980 | $ cd .. | |
|
981 | ||
|
982 | bundle1 can still pull non-generaldelta repos when generaldelta bundle1 disabled | |
|
983 | ||
|
984 | $ hg --config format.usegeneraldelta=false init notgdserver | |
|
985 | $ cd notgdserver | |
|
986 | $ cat > .hg/hgrc << EOF | |
|
987 | > [server] | |
|
988 | > bundle1gd.pull = false | |
|
989 | > EOF | |
|
990 | ||
|
991 | $ touch foo | |
|
992 | $ hg -q commit -A -m initial | |
|
993 | $ hg serve -p $HGPORT -d --pid-file=hg.pid | |
|
994 | $ cat hg.pid >> $DAEMON_PIDS | |
|
995 | ||
|
996 | $ hg --config experimental.bundle2-exp=false clone http://localhost:$HGPORT/ not-bundle2-1 | |
|
997 | requesting all changes | |
|
998 | adding changesets | |
|
999 | adding manifests | |
|
1000 | adding file changes | |
|
1001 | added 1 changesets with 1 changes to 1 files | |
|
1002 | updating to branch default | |
|
1003 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
|
1004 | ||
|
1005 | $ killdaemons.py | |
|
1006 | $ cd ../bundle2onlyserver | |
|
1007 | ||
|
1008 | bundle1 pull can be disabled for generaldelta repos only | |
|
1009 | ||
|
1010 | $ cat > .hg/hgrc << EOF | |
|
1011 | > [server] | |
|
1012 | > bundle1gd.pull = false | |
|
1013 | > EOF | |
|
1014 | ||
|
1015 | $ hg serve -p $HGPORT -d --pid-file=hg.pid | |
|
1016 | $ cat hg.pid >> $DAEMON_PIDS | |
|
1017 | $ hg --config experimental.bundle2-exp=false clone http://localhost:$HGPORT/ not-bundle2 | |
|
1018 | requesting all changes | |
|
1019 | abort: remote error: | |
|
1020 | incompatible Mercurial client; bundle2 required | |
|
1021 | (see https://www.mercurial-scm.org/wiki/IncompatibleClient) | |
|
1022 | [255] | |
|
1023 | ||
|
1024 | $ killdaemons.py | |
|
980 | 1025 | |
|
981 | 1026 | Verify the global server.bundle1 option works |
|
982 | 1027 | |
@@ -994,6 +1039,42 Verify the global server.bundle1 option | |||
|
994 | 1039 | [255] |
|
995 | 1040 | $ killdaemons.py |
|
996 | 1041 | |
|
1042 | $ cat > .hg/hgrc << EOF | |
|
1043 | > [server] | |
|
1044 | > bundle1gd = false | |
|
1045 | > EOF | |
|
1046 | $ hg serve -p $HGPORT -d --pid-file=hg.pid | |
|
1047 | $ cat hg.pid >> $DAEMON_PIDS | |
|
1048 | ||
|
1049 | $ hg --config experimental.bundle2-exp=false clone http://localhost:$HGPORT/ not-bundle2 | |
|
1050 | requesting all changes | |
|
1051 | abort: remote error: | |
|
1052 | incompatible Mercurial client; bundle2 required | |
|
1053 | (see https://www.mercurial-scm.org/wiki/IncompatibleClient) | |
|
1054 | [255] | |
|
1055 | ||
|
1056 | $ killdaemons.py | |
|
1057 | ||
|
1058 | $ cd ../notgdserver | |
|
1059 | $ cat > .hg/hgrc << EOF | |
|
1060 | > [server] | |
|
1061 | > bundle1gd = false | |
|
1062 | > EOF | |
|
1063 | $ hg serve -p $HGPORT -d --pid-file=hg.pid | |
|
1064 | $ cat hg.pid >> $DAEMON_PIDS | |
|
1065 | ||
|
1066 | $ hg --config experimental.bundle2-exp=false clone http://localhost:$HGPORT/ not-bundle2-2 | |
|
1067 | requesting all changes | |
|
1068 | adding changesets | |
|
1069 | adding manifests | |
|
1070 | adding file changes | |
|
1071 | added 1 changesets with 1 changes to 1 files | |
|
1072 | updating to branch default | |
|
1073 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
|
1074 | ||
|
1075 | $ killdaemons.py | |
|
1076 | $ cd ../bundle2onlyserver | |
|
1077 | ||
|
997 | 1078 | Verify bundle1 pushes can be disabled |
|
998 | 1079 | |
|
999 | 1080 | $ cat > .hg/hgrc << EOF |
General Comments 0
You need to be logged in to leave comments.
Login now