servo: Merge #19929 - Verify that all values in include.ini represent real directories (from terracotaPie:master); r=jdm
<!-- Please describe your changes on the following line: --> wpt manifest(include.ini) contains directories as headers. With this test in **test-tidy** we check if they are present in respective wtp test folders. --- - [X] `./mach build -d` does not report any errors - [x] `./mach test-tidy` does not report any errors - [X] These changes fix #19703 Source-Repo: https://github.com/servo/servo Source-Revision: f84e9236aee15348dc9bb3555500117fef922e12
This commit is contained in:
@@ -22,10 +22,19 @@ import colorama
|
||||
import toml
|
||||
import voluptuous
|
||||
import yaml
|
||||
|
||||
from licenseck import MPL, APACHE, COPYRIGHT, licenses_toml, licenses_dep_toml
|
||||
topdir = os.path.abspath(os.path.dirname(sys.argv[0]))
|
||||
wpt = os.path.join(topdir, "tests", "wpt")
|
||||
|
||||
|
||||
def wpt_path(*args):
|
||||
return os.path.join(wpt, *args)
|
||||
|
||||
sys.path.append(wpt_path("web-platform-tests", "tools", "wptrunner", "wptrunner"))
|
||||
from wptmanifest import parser, node
|
||||
|
||||
CONFIG_FILE_PATH = os.path.join(".", "servo-tidy.toml")
|
||||
WPT_MANIFEST_PATH = wpt_path("include.ini")
|
||||
|
||||
# Default configs
|
||||
config = {
|
||||
@@ -440,6 +449,38 @@ def check_shell(file_name, lines):
|
||||
yield(idx + 1, "variable substitutions should use the full \"${VAR}\" form")
|
||||
|
||||
|
||||
def rec_parse(current_path, root_node):
|
||||
dirs = []
|
||||
for item in root_node.children:
|
||||
if isinstance(item, node.DataNode):
|
||||
next_depth = os.path.join(current_path, item.data)
|
||||
dirs.append(next_depth)
|
||||
dirs += rec_parse(next_depth, item)
|
||||
return dirs
|
||||
|
||||
|
||||
def check_manifest_dirs(config_file, print_text=True):
|
||||
if not os.path.exists(config_file):
|
||||
yield(config_file, 0, "%s manifest file is required but was not found" % config_file)
|
||||
return
|
||||
|
||||
# Load configs from include.ini
|
||||
with open(config_file) as content:
|
||||
conf_file = content.read()
|
||||
lines = conf_file.splitlines(True)
|
||||
|
||||
if print_text:
|
||||
print '\rChecking the wpt manifest file...'
|
||||
|
||||
p = parser.parse(lines)
|
||||
paths = rec_parse(wpt_path("web-platform-tests"), p)
|
||||
for idx, path in enumerate(paths):
|
||||
if path.endswith("_mozilla"):
|
||||
continue
|
||||
if not os.path.isdir(path):
|
||||
yield(config_file, idx + 1, "Path in manifest was not found: {}".format(path))
|
||||
|
||||
|
||||
def check_rust(file_name, lines):
|
||||
if not file_name.endswith(".rs") or \
|
||||
file_name.endswith(".mako.rs") or \
|
||||
@@ -1122,6 +1163,8 @@ def run_lint_scripts(only_changed_files=False, progress=True, stylo=False):
|
||||
def scan(only_changed_files=False, progress=True, stylo=False):
|
||||
# check config file for errors
|
||||
config_errors = check_config_file(CONFIG_FILE_PATH)
|
||||
# check ini directories exist
|
||||
manifest_errors = check_manifest_dirs(WPT_MANIFEST_PATH)
|
||||
# check directories contain expected files
|
||||
directory_errors = check_directory_files(config['check_ext'])
|
||||
# standard checks
|
||||
@@ -1135,7 +1178,7 @@ def scan(only_changed_files=False, progress=True, stylo=False):
|
||||
# other lint checks
|
||||
lint_errors = run_lint_scripts(only_changed_files, progress, stylo=stylo)
|
||||
# chain all the iterators
|
||||
errors = itertools.chain(config_errors, directory_errors, lint_errors,
|
||||
errors = itertools.chain(config_errors, manifest_errors, directory_errors, lint_errors,
|
||||
file_errors, dep_license_errors)
|
||||
|
||||
error = None
|
||||
|
||||
Reference in New Issue
Block a user