Mercurial > hg
annotate tests/test-check-py3-compat.t @ 35884:197d10e157ce
httppeer: remove support for connecting to <0.9.1 servers (BC)
Previously, HTTP wire protocol clients would attempt a
"capabilities" wire protocol command. If that failed, they would
fall back to issuing a "between" command.
The "capabilities" command was added in Mercurial 0.9.1 (released
July 2006). The "between" command has been present for as long as
the wire protocol has existed. So if the "between" command failed,
it was safe to assume that the remote could not speak any version
of the Mercurial wire protocol.
The "between" fallback was added in 395a84f78736 in 2011. Before that
changeset, Mercurial would *always* issue the "between" command and
would issue "capabilities" if capabilities were requested. At that time,
many connections would issue "capabilities" eventually, so it was
decided to issue "capabilities" by default and fall back to "between"
if that failed. This saved a round trip when connecting to modern
servers while still preserving compatibility with legacy servers.
Fast forward ~7 years. Mercurial servers supporting "capabilities"
have been around for over a decade. If modern clients are
connecting to <0.9.1 servers, they are getting a bad experience.
They may even be getting bad data (an old server is vulnerable to
numerous security issues and could have been p0wned, leading to a
Mercurial repository serving backdoors or other badness).
In addition, the fallback can harm experience for modern servers.
If a client experiences an intermittent HTTP request failure (due to
bad network, etc) and falls back to a "between" that works, it would
assume an empty capability set and would attempt to communicate with
the repository using a very ancient wire protocol. Auditing HTTP logs
for hg.mozilla.org, I did find a handful of requests for the
null range of the "between" command. However, requests can be days
apart. And when I do see requests, they come in batches. Those
batches seem to correlate to spikes of HTTP 500 or other
server/network events. So I think these requests are fallbacks from
failed "capabilities" requests and not from old clients.
If you need even more evidence to discontinue support, apparently
we have no test coverage for communicating with servers not
supporting "capabilities." I know this because all tests pass
with the "between" fallback removed.
Finally, server-side support for <0.9.1 pushing (the "addchangegroup"
wire protocol command along with locking-related commands) was dropped
from the HTTP client in fda0867cfe03 in 2017 and the SSH client in
9f6e0e7ef828 in 2015.
I think this all adds up to enough justification for removing client
support for communicating with servers not supporting "capabilities."
So this commit removes that fallback.
Differential Revision: https://phab.mercurial-scm.org/D2001
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Fri, 02 Feb 2018 13:13:46 -0800 |
parents | eddca62d9e64 |
children | 0e06d8086295 |
rev | line source |
---|---|
27279
40eb385f798f
tests: add test for Python 3 compatibility
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1 #require test-repo |
40eb385f798f
tests: add test for Python 3 compatibility
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
2 |
29219
3c9066ed557c
tests: silence test-repo obsolete warning
timeless <timeless@mozdev.org>
parents:
29195
diff
changeset
|
3 $ . "$TESTDIR/helpers-testrepo.sh" |
27279
40eb385f798f
tests: add test for Python 3 compatibility
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
4 $ cd "$TESTDIR"/.. |
40eb385f798f
tests: add test for Python 3 compatibility
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
5 |
33530
05e3fa254b6b
demandimport: drop Py3 workarounds from Py2 implementation
Yuya Nishihara <yuya@tcha.org>
parents:
33204
diff
changeset
|
6 $ testrepohg files 'set:(**.py)' \ |
05e3fa254b6b
demandimport: drop Py3 workarounds from Py2 implementation
Yuya Nishihara <yuya@tcha.org>
parents:
33204
diff
changeset
|
7 > -X hgdemandimport/demandimportpy2.py \ |
05e3fa254b6b
demandimport: drop Py3 workarounds from Py2 implementation
Yuya Nishihara <yuya@tcha.org>
parents:
33204
diff
changeset
|
8 > | sed 's|\\|/|g' | xargs $PYTHON contrib/check-py3-compat.py |
30435
b86a448a2965
zstd: vendor python-zstandard 0.5.0
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30333
diff
changeset
|
9 contrib/python-zstandard/setup.py not using absolute_import |
b86a448a2965
zstd: vendor python-zstandard 0.5.0
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30333
diff
changeset
|
10 contrib/python-zstandard/setup_zstd.py not using absolute_import |
b86a448a2965
zstd: vendor python-zstandard 0.5.0
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30333
diff
changeset
|
11 contrib/python-zstandard/tests/common.py not using absolute_import |
31796
e0dc40530c5a
zstd: vendor python-zstandard 0.8.0
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31480
diff
changeset
|
12 contrib/python-zstandard/tests/test_buffer_util.py not using absolute_import |
30435
b86a448a2965
zstd: vendor python-zstandard 0.5.0
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30333
diff
changeset
|
13 contrib/python-zstandard/tests/test_compressor.py not using absolute_import |
31796
e0dc40530c5a
zstd: vendor python-zstandard 0.8.0
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31480
diff
changeset
|
14 contrib/python-zstandard/tests/test_compressor_fuzzing.py not using absolute_import |
30435
b86a448a2965
zstd: vendor python-zstandard 0.5.0
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30333
diff
changeset
|
15 contrib/python-zstandard/tests/test_data_structures.py not using absolute_import |
31796
e0dc40530c5a
zstd: vendor python-zstandard 0.8.0
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31480
diff
changeset
|
16 contrib/python-zstandard/tests/test_data_structures_fuzzing.py not using absolute_import |
30435
b86a448a2965
zstd: vendor python-zstandard 0.5.0
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30333
diff
changeset
|
17 contrib/python-zstandard/tests/test_decompressor.py not using absolute_import |
31796
e0dc40530c5a
zstd: vendor python-zstandard 0.8.0
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31480
diff
changeset
|
18 contrib/python-zstandard/tests/test_decompressor_fuzzing.py not using absolute_import |
30435
b86a448a2965
zstd: vendor python-zstandard 0.5.0
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30333
diff
changeset
|
19 contrib/python-zstandard/tests/test_estimate_sizes.py not using absolute_import |
b86a448a2965
zstd: vendor python-zstandard 0.5.0
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30333
diff
changeset
|
20 contrib/python-zstandard/tests/test_module_attributes.py not using absolute_import |
b86a448a2965
zstd: vendor python-zstandard 0.5.0
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30333
diff
changeset
|
21 contrib/python-zstandard/tests/test_train_dictionary.py not using absolute_import |
27279
40eb385f798f
tests: add test for Python 3 compatibility
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
22 setup.py not using absolute_import |
28583
260ce2eed951
tests: perform an ast parse with Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28564
diff
changeset
|
23 |
260ce2eed951
tests: perform an ast parse with Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28564
diff
changeset
|
24 #if py3exe |
33204
ddd65b4f3ae6
tests: alias syshg and syshgenv so they can be switched conditionally
Yuya Nishihara <yuya@tcha.org>
parents:
33116
diff
changeset
|
25 $ testrepohg files 'set:(**.py) - grep(pygments)' \ |
33530
05e3fa254b6b
demandimport: drop Py3 workarounds from Py2 implementation
Yuya Nishihara <yuya@tcha.org>
parents:
33204
diff
changeset
|
26 > -X hgdemandimport/demandimportpy2.py \ |
33204
ddd65b4f3ae6
tests: alias syshg and syshgenv so they can be switched conditionally
Yuya Nishihara <yuya@tcha.org>
parents:
33116
diff
changeset
|
27 > -X hgext/fsmonitor/pywatchman \ |
30673
81bf1a686b99
py3: exclude pywatchman from test-check-py3-compat.t
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30672
diff
changeset
|
28 > | sed 's|\\|/|g' | xargs $PYTHON3 contrib/check-py3-compat.py \ |
29810
ceff91dea404
py3: automatically glob out line numbers from check-py3-compat output
Yuya Nishihara <yuya@tcha.org>
parents:
29809
diff
changeset
|
29 > | sed 's/[0-9][0-9]*)$/*)/' |
31480
07fe520280d2
tests: allow ModuleNotFoundError in addition to ImportError
Martin von Zweigbergk <martinvonz@google.com>
parents:
30895
diff
changeset
|
30 hgext/convert/transport.py: error importing: <*Error> No module named 'svn.client' (error at transport.py:*) (glob) |
32522
9ed70525fd6e
py3: update test-check-py3-compat.t
Pulkit Goyal <7895pulkit@gmail.com>
parents:
31846
diff
changeset
|
31 mercurial/cffi/bdiff.py: error importing: <ImportError> cannot import name '_bdiff' (error at bdiff.py:*) |
9ed70525fd6e
py3: update test-check-py3-compat.t
Pulkit Goyal <7895pulkit@gmail.com>
parents:
31846
diff
changeset
|
32 mercurial/cffi/bdiffbuild.py: error importing: <ImportError> No module named 'cffi' (error at bdiffbuild.py:*) |
9ed70525fd6e
py3: update test-check-py3-compat.t
Pulkit Goyal <7895pulkit@gmail.com>
parents:
31846
diff
changeset
|
33 mercurial/cffi/mpatch.py: error importing: <ImportError> cannot import name '_mpatch' (error at mpatch.py:*) |
9ed70525fd6e
py3: update test-check-py3-compat.t
Pulkit Goyal <7895pulkit@gmail.com>
parents:
31846
diff
changeset
|
34 mercurial/cffi/mpatchbuild.py: error importing: <ImportError> No module named 'cffi' (error at mpatchbuild.py:*) |
9ed70525fd6e
py3: update test-check-py3-compat.t
Pulkit Goyal <7895pulkit@gmail.com>
parents:
31846
diff
changeset
|
35 mercurial/cffi/osutilbuild.py: error importing: <ImportError> No module named 'cffi' (error at osutilbuild.py:*) |
31480
07fe520280d2
tests: allow ModuleNotFoundError in addition to ImportError
Martin von Zweigbergk <martinvonz@google.com>
parents:
30895
diff
changeset
|
36 mercurial/scmwindows.py: error importing: <*Error> No module named 'msvcrt' (error at win32.py:*) (glob) |
07fe520280d2
tests: allow ModuleNotFoundError in addition to ImportError
Martin von Zweigbergk <martinvonz@google.com>
parents:
30895
diff
changeset
|
37 mercurial/win32.py: error importing: <*Error> No module named 'msvcrt' (error at win32.py:*) (glob) |
07fe520280d2
tests: allow ModuleNotFoundError in addition to ImportError
Martin von Zweigbergk <martinvonz@google.com>
parents:
30895
diff
changeset
|
38 mercurial/windows.py: error importing: <*Error> No module named 'msvcrt' (error at windows.py:*) (glob) |
28583
260ce2eed951
tests: perform an ast parse with Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28564
diff
changeset
|
39 |
260ce2eed951
tests: perform an ast parse with Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28564
diff
changeset
|
40 #endif |
29886
e2c086f147ef
py3: split check of pygments-using files from the rest of the tree
Augie Fackler <augie@google.com>
parents:
29810
diff
changeset
|
41 |
e2c086f147ef
py3: split check of pygments-using files from the rest of the tree
Augie Fackler <augie@google.com>
parents:
29810
diff
changeset
|
42 #if py3exe py3pygments |
33204
ddd65b4f3ae6
tests: alias syshg and syshgenv so they can be switched conditionally
Yuya Nishihara <yuya@tcha.org>
parents:
33116
diff
changeset
|
43 $ testrepohg files 'set:(**.py) and grep(pygments)' | sed 's|\\|/|g' \ |
29886
e2c086f147ef
py3: split check of pygments-using files from the rest of the tree
Augie Fackler <augie@google.com>
parents:
29810
diff
changeset
|
44 > | xargs $PYTHON3 contrib/check-py3-compat.py \ |
e2c086f147ef
py3: split check of pygments-using files from the rest of the tree
Augie Fackler <augie@google.com>
parents:
29810
diff
changeset
|
45 > | sed 's/[0-9][0-9]*)$/*)/' |
e2c086f147ef
py3: split check of pygments-using files from the rest of the tree
Augie Fackler <augie@google.com>
parents:
29810
diff
changeset
|
46 #endif |