1cb93a386Sopenharmony_ci#!/usr/bin/env python 2cb93a386Sopenharmony_ci# 3cb93a386Sopenharmony_ci# Copyright 2019 Google LLC 4cb93a386Sopenharmony_ci# 5cb93a386Sopenharmony_ci# Use of this source code is governed by a BSD-style license that can be 6cb93a386Sopenharmony_ci# found in the LICENSE file. 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci 9cb93a386Sopenharmony_ci"""Check the DEPS file for correctness.""" 10cb93a386Sopenharmony_ci 11cb93a386Sopenharmony_ci 12cb93a386Sopenharmony_cifrom __future__ import print_function 13cb93a386Sopenharmony_ciimport os 14cb93a386Sopenharmony_ciimport re 15cb93a386Sopenharmony_ciimport subprocess 16cb93a386Sopenharmony_ciimport sys 17cb93a386Sopenharmony_ci 18cb93a386Sopenharmony_ciimport utils 19cb93a386Sopenharmony_ci 20cb93a386Sopenharmony_ci 21cb93a386Sopenharmony_ciINFRA_BOTS_DIR = os.path.dirname(os.path.realpath(__file__)) 22cb93a386Sopenharmony_ciSKIA_DIR = os.path.abspath(os.path.join(INFRA_BOTS_DIR, os.pardir, os.pardir)) 23cb93a386Sopenharmony_ci 24cb93a386Sopenharmony_ci 25cb93a386Sopenharmony_cidef main(): 26cb93a386Sopenharmony_ci """Load the DEPS file and verify that all entries are valid.""" 27cb93a386Sopenharmony_ci # Find gclient.py and run that instead of simply "gclient", which calls into 28cb93a386Sopenharmony_ci # update_depot_tools. 29cb93a386Sopenharmony_ci gclient = subprocess.check_output([ 30cb93a386Sopenharmony_ci utils.WHICH, utils.GCLIENT]).decode('utf-8') 31cb93a386Sopenharmony_ci gclient_py = os.path.join(os.path.dirname(gclient), 'gclient.py') 32cb93a386Sopenharmony_ci python = sys.executable or 'python' 33cb93a386Sopenharmony_ci 34cb93a386Sopenharmony_ci # Obtain the DEPS mapping. 35cb93a386Sopenharmony_ci output = subprocess.check_output( 36cb93a386Sopenharmony_ci [python, gclient_py, 'revinfo'], cwd=SKIA_DIR).decode('utf-8') 37cb93a386Sopenharmony_ci 38cb93a386Sopenharmony_ci # Check each entry. 39cb93a386Sopenharmony_ci errs = [] 40cb93a386Sopenharmony_ci for e in output.rstrip().splitlines(): 41cb93a386Sopenharmony_ci split = e.split(': ') 42cb93a386Sopenharmony_ci if len(split) != 2: 43cb93a386Sopenharmony_ci errs.append( 44cb93a386Sopenharmony_ci 'Failed to parse `gclient revinfo` output; invalid format: %s' % e) 45cb93a386Sopenharmony_ci continue 46cb93a386Sopenharmony_ci if split[0] == 'skia': 47cb93a386Sopenharmony_ci continue 48cb93a386Sopenharmony_ci split = split[1].split('@') 49cb93a386Sopenharmony_ci if len(split) != 2: 50cb93a386Sopenharmony_ci errs.append( 51cb93a386Sopenharmony_ci 'Failed to parse `gclient revinfo` output; invalid format: %s' % e) 52cb93a386Sopenharmony_ci continue 53cb93a386Sopenharmony_ci repo = split[0] 54cb93a386Sopenharmony_ci rev = split[1] 55cb93a386Sopenharmony_ci if 'chrome-infra-packages' in repo: 56cb93a386Sopenharmony_ci continue 57cb93a386Sopenharmony_ci if not 'googlesource.com' in repo: 58cb93a386Sopenharmony_ci errs.append( 59cb93a386Sopenharmony_ci 'DEPS must be hosted on googlesource.com; %s is not allowed. ' 60cb93a386Sopenharmony_ci 'See http://go/new-skia-git-mirror' % repo) 61cb93a386Sopenharmony_ci if not re.match(r'^[a-z0-9]{40}$', rev): 62cb93a386Sopenharmony_ci errs.append('%s: "%s" does not look like a commit hash.' % (repo, rev)) 63cb93a386Sopenharmony_ci if errs: 64cb93a386Sopenharmony_ci print('Found problems in DEPS:', file=sys.stderr) 65cb93a386Sopenharmony_ci for err in errs: 66cb93a386Sopenharmony_ci print(err, file=sys.stderr) 67cb93a386Sopenharmony_ci sys.exit(1) 68cb93a386Sopenharmony_ci 69cb93a386Sopenharmony_ci 70cb93a386Sopenharmony_ciif __name__ == '__main__': 71cb93a386Sopenharmony_ci main() 72