Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(654)

Side by Side Diff: components/sync/PRESUBMIT.py

Issue 2455203002: [Sync] Updating all sync components to use similar presubmit linting logic. (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « components/browser_sync/PRESUBMIT.py ('k') | components/sync/driver/PRESUBMIT.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2016 The Chromium Authors. All rights reserved. 1 # Copyright 2016 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """Presubmit script for sync 5 """Presubmit script for sync component.
6 This checks that ModelTypeInfo entries in model_type.cc follow conventions. 6
7 See CheckModelTypeInfoMap or model_type.cc for more detail on the rules. 7 See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
8 for more details about the presubmit API built into depot_tools.
8 """ 9 """
9 10
10 import os 11 import os
12 import re
11 13
12 # Some definitions don't follow all the conventions we want to enforce. 14 # Some definitions don't follow all the conventions we want to enforce.
13 # It's either difficult or impossible to fix this, so we ignore the problem(s). 15 # It's either difficult or impossible to fix this, so we ignore the problem(s).
14 GRANDFATHERED_MODEL_TYPES = [ 16 GRANDFATHERED_MODEL_TYPES = [
15 'UNSPECIFIED', # Doesn't have a root tag or notification type. 17 'UNSPECIFIED', # Doesn't have a root tag or notification type.
16 'TOP_LEVEL_FOLDER', # Doesn't have a root tag or notification type. 18 'TOP_LEVEL_FOLDER', # Doesn't have a root tag or notification type.
17 'AUTOFILL_WALLET_DATA', # Root tag and model type string lack DATA suffix. 19 'AUTOFILL_WALLET_DATA', # Root tag and model type string lack DATA suffix.
18 'APP_SETTINGS', # Model type string has inconsistent capitalization. 20 'APP_SETTINGS', # Model type string has inconsistent capitalization.
19 'EXTENSION_SETTINGS', # Model type string has inconsistent capitalization. 21 'EXTENSION_SETTINGS', # Model type string has inconsistent capitalization.
20 'SUPERVISED_USER_SETTINGS', # Root tag and model type string replace 22 'SUPERVISED_USER_SETTINGS', # Root tag and model type string replace
(...skipping 29 matching lines...) Expand all
50 # in model_type.cc. 52 # in model_type.cc.
51 MODEL_TYPE_START_PATTERN = '^const ModelTypeInfo kModelTypeInfoMap' 53 MODEL_TYPE_START_PATTERN = '^const ModelTypeInfo kModelTypeInfoMap'
52 MODEL_TYPE_END_PATTERN = '^\};' 54 MODEL_TYPE_END_PATTERN = '^\};'
53 55
54 # Strings relating to files we'll need to read. 56 # Strings relating to files we'll need to read.
55 # model_type.cc is where the ModelTypeInfoMap is 57 # model_type.cc is where the ModelTypeInfoMap is
56 # sync.proto is where the proto definitions for ModelTypes are. 58 # sync.proto is where the proto definitions for ModelTypes are.
57 PROTO_FILE_PATH = './protocol/sync.proto' 59 PROTO_FILE_PATH = './protocol/sync.proto'
58 MODEL_TYPE_FILE_NAME = 'model_type.cc' 60 MODEL_TYPE_FILE_NAME = 'model_type.cc'
59 61
60 62 SYNC_SOURCE_FILES = (r'^components[\\/]sync[\\/].*\.(cc|h)$',)
61 def CheckChangeOnUpload(input_api, output_api):
62 """Preupload check function required by presubmit convention.
63 See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
64 """
65 for f in input_api.AffectedFiles():
66 if(f.LocalPath().endswith(MODEL_TYPE_FILE_NAME)):
67 return CheckModelTypeInfoMap(input_api, output_api, f)
68 return []
69
70
71 def CheckChangeOnCommit(input_api, output_api):
72 """Precommit check function required by presubmit convention.
73 See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
74 """
75 for f in input_api.AffectedFiles():
76 if f.LocalPath().endswith(MODEL_TYPE_FILE_NAME):
77 return CheckModelTypeInfoMap(input_api, output_api, f)
78 return []
79
80 63
81 def CheckModelTypeInfoMap(input_api, output_api, model_type_file): 64 def CheckModelTypeInfoMap(input_api, output_api, model_type_file):
82 """Checks the kModelTypeInfoMap in model_type.cc follows conventions. 65 """Checks the kModelTypeInfoMap in model_type.cc follows conventions.
83 Checks that the kModelTypeInfoMap follows the below rules: 66 Checks that the kModelTypeInfoMap follows the below rules:
84 1) The model type string should match the model type name, but with 67 1) The model type string should match the model type name, but with
85 only the first letter capitalized and spaces instead of underscores. 68 only the first letter capitalized and spaces instead of underscores.
86 2) The root tag should be the same as the model type but all lowercase. 69 2) The root tag should be the same as the model type but all lowercase.
87 3) The notification type should match the proto message name. 70 3) The notification type should match the proto message name.
88 4) No duplicate data across model types. 71 4) No duplicate data across model types.
89 Args: 72 Args:
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 Args: 355 Args:
373 field_number: string representation of a field number enum reference 356 field_number: string representation of a field number enum reference
374 Returns: 357 Returns:
375 A string that is the corresponding proto field data type. e.g. 358 A string that is the corresponding proto field data type. e.g.
376 FieldNumberToPrototypeString('EntitySpecifics::kAppFieldNumber') 359 FieldNumberToPrototypeString('EntitySpecifics::kAppFieldNumber')
377 => 'AppSpecifics' 360 => 'AppSpecifics'
378 """ 361 """
379 return field_number.replace(FIELD_NUMBER_PREFIX, '').replace( 362 return field_number.replace(FIELD_NUMBER_PREFIX, '').replace(
380 'FieldNumber', 'Specifics').replace( 363 'FieldNumber', 'Specifics').replace(
381 'AppNotificationSpecifics', 'AppNotification') 364 'AppNotificationSpecifics', 'AppNotification')
365
366 def CheckChangeLintsClean(input_api, output_api):
367 source_filter = lambda x: input_api.FilterSourceFile(
368 x, white_list=SYNC_SOURCE_FILES, black_list=None)
369
370 return input_api.canned_checks.CheckChangeLintsClean(
371 input_api, output_api, source_filter, lint_filters=[], verbose_level=1)
372
373 def CheckChanges(input_api, output_api):
374 results = []
375 results += CheckChangeLintsClean(input_api, output_api)
376 results += input_api.canned_checks.CheckPatchFormatted(input_api, output_api)
377 for f in input_api.AffectedFiles():
378 if f.LocalPath().endswith(MODEL_TYPE_FILE_NAME):
379 return CheckModelTypeInfoMap(input_api, output_api, f)
380 return results
381
382 def CheckChangeOnUpload(input_api, output_api):
383 return CheckChanges(input_api, output_api)
384
385 def CheckChangeOnCommit(input_api, output_api):
386 return CheckChanges(input_api, output_api)
OLDNEW
« no previous file with comments | « components/browser_sync/PRESUBMIT.py ('k') | components/sync/driver/PRESUBMIT.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698