1*6777b538SAndroid Build Coastguard Worker# Copyright 2018 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker# found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker"""Presubmit script for metrics_proto. 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard WorkerSee http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts 8*6777b538SAndroid Build Coastguard Workerfor more details on the presubmit API built into gcl. 9*6777b538SAndroid Build Coastguard Worker""" 10*6777b538SAndroid Build Coastguard Worker 11*6777b538SAndroid Build Coastguard Worker 12*6777b538SAndroid Build Coastguard WorkerDIR_METADATA = 'DIR_METADATA' 13*6777b538SAndroid Build Coastguard WorkerREADME = 'README.chromium' 14*6777b538SAndroid Build Coastguard WorkerPRESUBMIT = 'PRESUBMIT.py' 15*6777b538SAndroid Build Coastguard WorkerPRESUBMIT_TEST = 'PRESUBMIT_test.py' 16*6777b538SAndroid Build Coastguard WorkerOWNERS = 'OWNERS' 17*6777b538SAndroid Build Coastguard Worker 18*6777b538SAndroid Build Coastguard Worker 19*6777b538SAndroid Build Coastguard Workerdef IsMetricsProtoPath(input_api, path): 20*6777b538SAndroid Build Coastguard Worker return input_api.os_path.dirname(path) == input_api.PresubmitLocalPath() 21*6777b538SAndroid Build Coastguard Worker 22*6777b538SAndroid Build Coastguard Worker 23*6777b538SAndroid Build Coastguard Workerdef IsReadmeFile(input_api, path): 24*6777b538SAndroid Build Coastguard Worker return (input_api.os_path.basename(path) == README and 25*6777b538SAndroid Build Coastguard Worker IsMetricsProtoPath(input_api, path)) 26*6777b538SAndroid Build Coastguard Worker 27*6777b538SAndroid Build Coastguard Worker 28*6777b538SAndroid Build Coastguard Workerdef IsImportedFile(input_api, path): 29*6777b538SAndroid Build Coastguard Worker return (not input_api.os_path.basename(path) in (PRESUBMIT, PRESUBMIT_TEST, 30*6777b538SAndroid Build Coastguard Worker OWNERS, DIR_METADATA) and 31*6777b538SAndroid Build Coastguard Worker IsMetricsProtoPath(input_api, path)) 32*6777b538SAndroid Build Coastguard Worker 33*6777b538SAndroid Build Coastguard Worker 34*6777b538SAndroid Build Coastguard Workerdef CheckChange(input_api, output_api): 35*6777b538SAndroid Build Coastguard Worker """Checks that all changes include a README update.""" 36*6777b538SAndroid Build Coastguard Worker paths = [af.AbsoluteLocalPath() for af in input_api.AffectedFiles()] 37*6777b538SAndroid Build Coastguard Worker if (any(IsImportedFile(input_api, p) for p in paths) and not 38*6777b538SAndroid Build Coastguard Worker any(IsReadmeFile(input_api, p) for p in paths)): 39*6777b538SAndroid Build Coastguard Worker return [output_api.PresubmitError( 40*6777b538SAndroid Build Coastguard Worker 'Modifies %s without updating %s. ' 41*6777b538SAndroid Build Coastguard Worker 'Changes to these files should originate upstream.' % 42*6777b538SAndroid Build Coastguard Worker (input_api.PresubmitLocalPath(), README))] 43*6777b538SAndroid Build Coastguard Worker return [] 44*6777b538SAndroid Build Coastguard Worker 45*6777b538SAndroid Build Coastguard Worker 46*6777b538SAndroid Build Coastguard Workerdef CheckChangeOnUpload(input_api, output_api): 47*6777b538SAndroid Build Coastguard Worker return CheckChange(input_api, output_api) 48*6777b538SAndroid Build Coastguard Worker 49*6777b538SAndroid Build Coastguard Worker 50*6777b538SAndroid Build Coastguard Workerdef CheckChangeOnCommit(input_api, output_api): 51*6777b538SAndroid Build Coastguard Worker return CheckChange(input_api, output_api) 52