mirror of
https://github.com/facebook/sapling.git
synced 2024-10-09 08:18:15 +03:00
9638df605c
The goal is to reduce the amount of hand tuning of new/changed tests that is required on Windows. Since the OS prints the proper paths everywhere else, this is limited to Windows. These are based on the check-code rules that were dropped in 217bd5cb0914. There are some minor tweaks, because those were trying to detect '/' paths without a '(glob)' at the end, whereas these detect '\' paths. Also, it looks like the 'no changes made to subrepo' one was broke, because the path to the subrepo has been getting output but was not in the pattern. End anchors are dropped because '(glob)' is no longer required, but '(feature !)' annotations are a possibility. The 'saved backup bundle' pattern dropped from run-tests.py was simply carrying over the first capture group. The replace() method runs prior to evaluating '\1', but it wasn't doing anything because of the 'r' prefix on '\\'. The 'not recording move' entry is new, because I stumbled upon it searching for some of these patterns. There are probably others.
133 lines
4.1 KiB
Python
133 lines
4.1 KiB
Python
# common patterns in test at can safely be replaced
|
|
from __future__ import absolute_import
|
|
|
|
import os
|
|
|
|
substitutions = [
|
|
# list of possible compressions
|
|
(br'(zstd,)?zlib,none,bzip2',
|
|
br'$USUAL_COMPRESSIONS$'
|
|
),
|
|
# capabilities sent through http
|
|
(br'bundlecaps=HG20%2Cbundle2%3DHG20%250A'
|
|
br'bookmarks%250A'
|
|
br'changegroup%253D01%252C02%250A'
|
|
br'digests%253Dmd5%252Csha1%252Csha512%250A'
|
|
br'error%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250A'
|
|
br'hgtagsfnodes%250A'
|
|
br'listkeys%250A'
|
|
br'phases%253Dheads%250A'
|
|
br'pushkey%250A'
|
|
br'remote-changegroup%253Dhttp%252Chttps',
|
|
# (the replacement patterns)
|
|
br'$USUAL_BUNDLE_CAPS$'
|
|
),
|
|
# bundle2 capabilities sent through ssh
|
|
(br'bundle2=HG20%0A'
|
|
br'bookmarks%0A'
|
|
br'changegroup%3D01%2C02%0A'
|
|
br'digests%3Dmd5%2Csha1%2Csha512%0A'
|
|
br'error%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0A'
|
|
br'hgtagsfnodes%0A'
|
|
br'listkeys%0A'
|
|
br'phases%3Dheads%0A'
|
|
br'pushkey%0A'
|
|
br'remote-changegroup%3Dhttp%2Chttps',
|
|
# (replacement patterns)
|
|
br'$USUAL_BUNDLE2_CAPS$'
|
|
),
|
|
# HTTP log dates
|
|
(br' - - \[\d\d/.../2\d\d\d \d\d:\d\d:\d\d] "GET',
|
|
br' - - [$LOGDATE$] "GET'
|
|
),
|
|
# Windows has an extra '/' in the following lines that get globbed away:
|
|
# pushing to file:/*/$TESTTMP/r2 (glob)
|
|
# comparing with file:/*/$TESTTMP/r2 (glob)
|
|
# sub/maybelarge.dat: largefile 34..9c not available from
|
|
# file:/*/$TESTTMP/largefiles-repo (glob)
|
|
(br'(.*file:/)/?(/\$TESTTMP.*)',
|
|
lambda m: m.group(1) + b'*' + m.group(2) + b' (glob)'
|
|
),
|
|
]
|
|
|
|
# Various platform error strings, keyed on a common replacement string
|
|
_errors = {
|
|
br'$ENOENT$': (
|
|
# strerror()
|
|
br'No such file or directory',
|
|
|
|
# FormatMessage(ERROR_FILE_NOT_FOUND)
|
|
br'The system cannot find the file specified',
|
|
),
|
|
br'$ENOTDIR$': (
|
|
# strerror()
|
|
br'Not a directory',
|
|
|
|
# FormatMessage(ERROR_PATH_NOT_FOUND)
|
|
br'The system cannot find the path specified',
|
|
),
|
|
br'$ECONNRESET$': (
|
|
# strerror()
|
|
br'Connection reset by peer',
|
|
|
|
# FormatMessage(WSAECONNRESET)
|
|
br'An existing connection was forcibly closed by the remote host',
|
|
),
|
|
br'$EADDRINUSE$': (
|
|
# strerror()
|
|
br'Address already in use',
|
|
|
|
# FormatMessage(WSAEADDRINUSE)
|
|
br'Only one usage of each socket address'
|
|
br' \(protocol/network address/port\) is normally permitted',
|
|
),
|
|
}
|
|
|
|
for replace, msgs in _errors.items():
|
|
substitutions.extend((m, replace) for m in msgs)
|
|
|
|
# Output lines on Windows that can be autocorrected for '\' vs '/' path
|
|
# differences.
|
|
_winpathfixes = [
|
|
# cloning subrepo s\ss from $TESTTMP/t/s/ss
|
|
# cloning subrepo foo\bar from http://localhost:$HGPORT/foo/bar
|
|
br'(?m)^cloning subrepo \S+\\.*',
|
|
|
|
# pulling from $TESTTMP\issue1852a
|
|
br'(?m)^pulling from \$TESTTMP\\.*',
|
|
|
|
# pushing to $TESTTMP\a
|
|
br'(?m)^pushing to \$TESTTMP\\.*',
|
|
|
|
# pushing subrepo s\ss to $TESTTMP/t/s/ss
|
|
br'(?m)^pushing subrepo \S+\\\S+ to.*',
|
|
|
|
# moving d1\d11\a1 to d3/d11/a1
|
|
br'(?m)^moving \S+\\.*',
|
|
|
|
# d1\a: not recording move - dummy does not exist
|
|
br'\S+\\\S+: not recording move .+',
|
|
|
|
# reverting s\a
|
|
br'(?m)^reverting (?!subrepo ).*\\.*',
|
|
|
|
# saved backup bundle to
|
|
# $TESTTMP\test\.hg\strip-backup/443431ffac4f-2fc5398a-backup.hg
|
|
br'(?m)^saved backup bundle to \$TESTTMP.*\.hg',
|
|
|
|
# no changes made to subrepo s\ss since last push to ../tcc/s/ss
|
|
br'(?m)^no changes made to subrepo \S+\\\S+ since.*',
|
|
|
|
# changeset 5:9cc5aa7204f0: stuff/maybelarge.dat references missing
|
|
# $TESTTMP\largefiles-repo-hg\.hg\largefiles\76..38
|
|
br'(?m)^changeset .* references (corrupted|missing) \$TESTTMP\\.*',
|
|
|
|
# stuff/maybelarge.dat: largefile 76..38 not available from
|
|
# file:/*/$TESTTMP\largefiles-repo (glob)
|
|
br'.*: largefile \S+ not available from file:/\*/.+',
|
|
]
|
|
|
|
if os.name == 'nt':
|
|
substitutions.extend([(s, lambda match: match.group().replace(b'\\', b'/'))
|
|
for s in _winpathfixes])
|