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