You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.8 KiB
68 lines
1.8 KiB
#!/usr/bin/env python
|
|
#
|
|
# Copyright 2019 Google LLC
|
|
#
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
|
|
"""Check the DEPS file for correctness."""
|
|
|
|
|
|
import os
|
|
import re
|
|
import subprocess
|
|
import sys
|
|
|
|
import utils
|
|
|
|
|
|
INFRA_BOTS_DIR = os.path.dirname(os.path.realpath(__file__))
|
|
SKIA_DIR = os.path.abspath(os.path.join(INFRA_BOTS_DIR, os.pardir, os.pardir))
|
|
|
|
|
|
def main():
|
|
"""Load the DEPS file and verify that all entries are valid."""
|
|
# Find gclient.py and run that instead of simply "gclient", which calls into
|
|
# update_depot_tools.
|
|
gclient = subprocess.check_output([utils.WHICH, utils.GCLIENT])
|
|
gclient_py = os.path.join(os.path.dirname(gclient), 'gclient.py')
|
|
python = sys.executable or 'python'
|
|
|
|
# Obtain the DEPS mapping.
|
|
output = subprocess.check_output(
|
|
[python, gclient_py, 'revinfo'], cwd=SKIA_DIR)
|
|
|
|
# Check each entry.
|
|
errs = []
|
|
for e in output.rstrip().splitlines():
|
|
split = e.split(': ')
|
|
if len(split) != 2:
|
|
errs.append(
|
|
'Failed to parse `gclient revinfo` output; invalid format: %s' % e)
|
|
if split[0] == 'skia':
|
|
continue
|
|
split = split[1].split('@')
|
|
if len(split) != 2:
|
|
errs.append(
|
|
'Failed to parse `gclient revinfo` output; invalid format: %s' % e)
|
|
repo = split[0]
|
|
rev = split[1]
|
|
if 'chrome-infra-packages' in repo:
|
|
continue
|
|
if not 'googlesource.com' in repo:
|
|
errs.append(
|
|
'DEPS must be hosted on googlesource.com; %s is not allowed. '
|
|
'See http://go/new-skia-git-mirror' % repo)
|
|
if not re.match(r'^[a-z0-9]{40}$', rev):
|
|
errs.append('%s: "%s" does not look like a commit hash.' % (repo, rev))
|
|
if errs:
|
|
print >> sys.stderr, 'Found problems in DEPS:'
|
|
for err in errs:
|
|
print >> sys.stderr, err
|
|
sys.exit(1)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|