#!/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 not 'googlesource.com' in repo: errs.append( 'DEPS must be hosted on googlesource.com; %s is not allowed.' % 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()