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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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