Source code
Revision control
Copy as Markdown
Other Tools
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
from mozbuild.vendor.moz_yaml import load_moz_yaml
from mozlint import result
from mozlint.pathutils import expand_exclusions
class UpdatebotValidator:
def lint_file(self, path, **kwargs):
if not kwargs.get("testing", False) and not path.endswith("moz.yaml"):
# When testing, process all files provided
return None
if not kwargs.get("testing", False) and "test/files/updatebot" in path:
# When not testing, ignore the test files
return None
try:
yaml = load_moz_yaml(path)
if "vendoring" in yaml and yaml["vendoring"].get("flavor", None) == "rust":
yaml_revision = yaml["origin"]["revision"]
with open("Cargo.lock", "r") as f:
for line in f:
if yaml_revision in line:
return None
return f"Revision {yaml_revision} specified in {path} wasn't found in Cargo.lock"
return None
except Exception as e:
return f"Could not load {path} according to schema in moz_yaml.py: {e}"
def lint(paths, config, **lintargs):
# expand_exclusions expects a list, and will convert a string
# into it if it doesn't receive one
if not isinstance(paths, list):
paths = [paths]
errors = []
files = list(expand_exclusions(paths, config, lintargs["root"]))
m = UpdatebotValidator()
for f in files:
message = m.lint_file(f, **lintargs)
if message:
errors.append(result.from_config(config, path=f, message=message))
return errors