Merge pull request #15355 from brave/issues/25517

Add chromium PRESUBMIT configuration support.
This commit is contained in:
Aleksey Khoroshilov
2022-10-28 21:41:50 +07:00
committed by GitHub
5 changed files with 502 additions and 218 deletions
+299
View File
@@ -0,0 +1,299 @@
{
"disabled_checks": {
// Checks defined in the PRESUBMIT.py global scope.
"global": [
// We don't use OWNERS files.
"CheckSecurityOwners",
// This validates added strings with screenshot tests which we don't use.
"CheckStrings",
// We don't update upstream pydeps.
"CheckPydepsNeedsUpdating",
// Disable check for .*google.* images being added to the repository.
"CheckNoProductIconsAddedToPublicRepo",
// Disable check for Google support URLs.
"CheckGoogleSupportAnswerUrlOnUpload",
// Disable check for hardcoded Google API urls.
"CheckHardcodedGoogleHostsInLowerLayers",
],
// Checks defined in depot_tools/presubmit_canned_checks.py.
"canned": [
// Disable Chromium license check. We use our own checker.
"CheckLicense",
// We don't use OWNERS files.
"CheckOwnersFormat",
"CheckOwners",
// We don't use AUTHORS file.
"CheckAuthorizedAuthor",
// We don't upload change to Chromium version control.
"CheckChangeWasUploaded",
"CheckChangeHasBugField",
"CheckTreeIsOpen",
],
},
// Checks that should trigger presubmit errors instead of warnings.
"checks_to_force_presubmit_errors": {
"global": [
"CheckBuildConfigMacrosWithoutInclude",
"CheckForSuperfluousStlIncludesInHeaders",
"CheckForIncludeGuards",
"CheckGnGlobForward",
"CheckNewHeaderWithoutGnChangeOnUpload",
],
"canned": [
"CheckChangeLintsClean",
"GetPylint",
"CheckPatchFormatted",
],
},
// Files to skip in all checks.
"default_files_to_skip": [
"\\.storybook/",
"ios/browser/api/ledger/legacy_database/core_data_models/",
"win_build_output/",
],
// Regex to match function names in the current presubmit stack trace. Matched
// functions are used in `per_check_files_to_skip` filter.
"check_function_regex": "_?Check",
// Files to skip per check.
"per_check_files_to_skip": {
// Permanent ignores.
"CheckNewHeaderWithoutGnChangeOnUpload": ["chromium_src/"],
"CheckForCcIncludes": ["chromium_src/"],
"CheckForRelativeIncludes": ["chromium_src/"],
"CheckParseErrors": [
".*tsconfig\\.json",
"vendor/bat-native-ads/data/test/invalid\\.json",
],
// Checks to be fixed.
"CheckJavaStyle": [".*\\.java"],
"CheckUnwantedDependencies": [".*\\.java"],
"CheckNoBannedFunctions": [
"base/mac/conversions\\.h",
"browser/brave_ads/notification_helper/notification_helper_impl_win\\.cc",
"browser/mac/sparkle_glue\\.mm",
"browser/net/brave_ad_block_csp_network_delegate_helper\\.cc",
"browser/net/brave_ad_block_csp_network_delegate_helper\\.h",
"browser/net/brave_ad_block_tp_network_delegate_helper\\.cc",
"browser/net/brave_ad_block_tp_network_delegate_helper\\.h",
"browser/net/brave_ad_block_tp_network_delegate_helper_unittest\\.cc",
"browser/net/brave_common_static_redirect_network_delegate_helper\\.cc",
"browser/net/brave_common_static_redirect_network_delegate_helper\\.h",
"browser/net/brave_httpse_network_delegate_helper\\.cc",
"browser/net/brave_httpse_network_delegate_helper\\.h",
"browser/net/brave_httpse_network_delegate_helper_unittest\\.cc",
"browser/net/brave_proxying_url_loader_factory\\.h",
"browser/net/brave_proxying_web_socket\\.h",
"browser/net/brave_reduce_language_network_delegate_helper\\.cc",
"browser/net/brave_reduce_language_network_delegate_helper\\.h",
"browser/net/brave_referrals_network_delegate_helper\\.cc",
"browser/net/brave_referrals_network_delegate_helper\\.h",
"browser/net/brave_request_handler\\.cc",
"browser/net/brave_request_handler\\.h",
"browser/net/brave_service_key_network_delegate_helper\\.cc",
"browser/net/brave_service_key_network_delegate_helper\\.h",
"browser/net/brave_site_hacks_network_delegate_helper\\.cc",
"browser/net/brave_site_hacks_network_delegate_helper\\.h",
"browser/net/brave_static_redirect_network_delegate_helper\\.cc",
"browser/net/brave_static_redirect_network_delegate_helper\\.h",
"browser/net/brave_torrent_redirect_network_delegate_helper\\.cc",
"browser/net/brave_torrent_redirect_network_delegate_helper\\.h",
"browser/net/decentralized_dns_network_delegate_helper\\.cc",
"browser/net/decentralized_dns_network_delegate_helper\\.h",
"browser/net/global_privacy_control_network_delegate_helper\\.cc",
"browser/net/global_privacy_control_network_delegate_helper\\.h",
"browser/net/ipfs_redirect_network_delegate_helper\\.cc",
"browser/net/ipfs_redirect_network_delegate_helper\\.h",
"browser/net/url_context\\.cc",
"browser/net/url_context\\.h",
"browser/ui/webui/brave_rewards_page_ui\\.cc",
"browser/ui/webui/new_tab_page/brave_new_tab_ui_browsertest\\.cc",
"browser/ui/webui/private_new_tab_page/brave_private_new_tab_page_browsertest\\.cc",
"chromium_src/chrome/install_static/brave_install_util_unittest\\.cc",
"chromium_src/components/search_engines/brave_template_url_prepopulate_data_unittest\\.cc",
"components/brave_rewards/browser/net/network_delegate_helper\\.cc",
"components/brave_rewards/browser/net/network_delegate_helper\\.h",
"components/brave_rewards/browser/test/rewards_state_browsertest\\.cc",
"components/brave_shields/browser/ad_block_engine\\.cc",
"components/brave_shields/browser/https_everywhere_service\\.cc",
"components/brave_wallet/browser/rlp_encode_unittest\\.cc",
"components/brave_wallet/common/eth_address\\.cc",
"components/ipfs/ipfs_json_parser\\.cc",
"components/safe_builtins/renderer/safe_builtins\\.cc",
"components/services/bat_ads/bat_ads_impl\\.cc",
"components/services/bat_ledger/bat_ledger_impl\\.cc",
"components/services/bat_ledger/public/cpp/ledger_client_mojo_bridge\\.cc",
"ios/browser/api/ads/brave_ads\\.mm",
"utility/importer/chrome_importer\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/bitflyer/bitflyer\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/bitflyer/bitflyer_transfer\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/contribution/contribution\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/contribution/contribution\\.h",
"vendor/bat-native-ledger/src/bat/ledger/internal/contribution/contribution_ac\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/contribution/contribution_external_wallet\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/contribution/contribution_monthly\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/contribution/contribution_sku\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/contribution/contribution_sku\\.h",
"vendor/bat-native-ledger/src/bat/ledger/internal/contribution/contribution_tip\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/contribution/contribution_unblinded\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/contribution/contribution_unblinded\\.h",
"vendor/bat-native-ledger/src/bat/ledger/internal/contribution/unverified\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/credentials/credentials_promotion\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/credentials/credentials_sku\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/database/database\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/database/database_activity_info\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/database/database_balance_report\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/database/database_contribution_info\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/database/database_contribution_info\\.h",
"vendor/bat-native-ledger/src/bat/ledger/internal/database/database_contribution_info_publishers\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/database/database_contribution_queue\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/database/database_contribution_queue\\.h",
"vendor/bat-native-ledger/src/bat/ledger/internal/database/database_contribution_queue_publishers\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/database/database_creds_batch\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/database/database_event_log\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/database/database_initialize\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/database/database_media_publisher_info\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/database/database_multi_tables\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/database/database_pending_contribution\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/database/database_processed_publisher\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/database/database_promotion\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/database/database_publisher_info\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/database/database_recurring_tip\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/database/database_server_publisher_banner\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/database/database_server_publisher_info\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/database/database_server_publisher_links\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/database/database_sku_order\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/database/database_sku_order\\.h",
"vendor/bat-native-ledger/src/bat/ledger/internal/database/database_sku_order_items\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/database/database_sku_transaction\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/database/database_unblinded_token\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/bitflyer/post_transaction/post_transaction_bitflyer\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/gemini/get_transaction/get_transaction_gemini\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/gemini/post_cancel_transaction/post_cancel_transaction_gemini\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/gemini/post_transaction/post_transaction_gemini\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/payment/post_order/post_order\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/payment/post_transaction_gemini/post_transaction_sku_gemini\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/payment/post_transaction_uphold/post_transaction_uphold\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/payment/post_votes/post_votes\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/private_cdn/get_publisher/get_publisher\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/promotion/delete_claim/delete_claim\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/promotion/get_drain/get_drain\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/promotion/get_recover_wallet/get_recover_wallet\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/promotion/get_wallet/get_wallet\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/promotion/post_bat_loss/post_bat_loss\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/promotion/post_clobbered_claims/post_clobbered_claims\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/promotion/post_suggestions/post_suggestions\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/rewards/get_prefix_list/get_prefix_list\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/uphold/post_oauth/post_oauth\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/uphold/post_transaction/post_transaction\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/uphold/post_transaction_commit/post_transaction_commit\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/gemini/gemini\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/gemini/gemini_transfer\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/legacy/bat_state\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/legacy/bat_util\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/legacy/media/github\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/legacy/media/reddit\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/legacy/media/twitch\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/legacy/media/twitter\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/legacy/media/vimeo\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/legacy/media/youtube\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/legacy/publisher_state\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/promotion/promotion\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/promotion/promotion\\.h",
"vendor/bat-native-ledger/src/bat/ledger/internal/publisher/publisher\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/publisher/publisher_prefix_list_updater\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/publisher/publisher_status_helper\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/publisher/server_publisher_fetcher\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/recovery/recovery_empty_balance\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/report/report\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/report/report\\.h",
"vendor/bat-native-ledger/src/bat/ledger/internal/sku/sku_brave\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/sku/sku_common\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/sku/sku_merchant\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/sku/sku_merchant\\.h",
"vendor/bat-native-ledger/src/bat/ledger/internal/sku/sku_order\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/sku/sku_transaction\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/state/state_migration\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/state/state_migration_v1\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/state/state_migration_v10\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/state/state_migration_v2\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/uphold/uphold\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/uphold/uphold_authorization\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/uphold/uphold_transfer\\.cc",
"vendor/bat-native-ledger/src/bat/ledger/internal/wallet/wallet_recover\\.cc",
],
"CheckSpamLogging": [
"browser/brave_ads/notification_helper/notification_helper_impl_mac\\.mm",
"browser/brave_ads/notification_helper/notification_helper_impl_win\\.cc",
"browser/browsing_data/brave_clear_browsing_data\\.cc",
"chromium_src/chrome/browser/ui/startup/startup_browser_creator\\.cc",
"components/brave_ads/browser/ads_service_impl\\.cc",
"components/brave_vpn/winvpntool\\.cc",
"components/greaselion/browser/greaselion_download_service\\.cc",
"components/permissions/permission_lifetime_utils\\.cc",
"components/tor/tor_launcher_factory\\.cc",
"components/webcompat_reporter/browser/webcompat_report_uploader\\.cc",
"ios/browser/api/ledger/legacy_database/legacy_ledger_database\\.mm",
"ios/browser/api/ledger/promotion_solution\\.mm",
],
"CheckUniquePtrOnUpload": [
"components/brave_sync/qr_code_data\\.cc",
"components/brave_today/browser/direct_feed_controller\\.cc",
"components/brave_wallet/browser/tx_service\\.cc",
"components/brave_wallet/common/eth_sign_typed_data_helper\\.cc",
"components/tor/tor_profile_service_impl\\.cc",
],
"_CheckAndroidCrLogUsage": [
"android/java/org/chromium/base/BraveCommandLineInitUtil\\.java",
"android/java/org/chromium/chrome/browser/BraveAdaptiveCaptchaUtils\\.java",
"android/java/org/chromium/chrome/browser/crypto_wallet/fragments/EditVisibleAssetsBottomSheetDialogFragment\\.java",
"android/java/org/chromium/chrome/browser/help/BraveHelpAndFeedbackLauncher\\.java",
"android/java/org/chromium/chrome/browser/search_engines/settings/BraveSearchEngineAdapter\\.java",
"android/java/org/chromium/chrome/browser/settings/BravePreferenceDialogFragment\\.java",
"android/java/org/chromium/chrome/browser/upgrade/BraveUpgradeJobIntentServiceImpl\\.java",
],
"_CheckAndroidToastUsage": [
"android/java/org/chromium/chrome/browser/brave_news/BraveNewsBottomSheetDialogFragment\\.java",
"android/java/org/chromium/chrome/browser/crypto_wallet/activities/AccountPrivateKeyActivity\\.java",
"android/java/org/chromium/chrome/browser/crypto_wallet/activities/NetworkSelectorActivity\\.java",
"android/java/org/chromium/chrome/browser/crypto_wallet/fragments/PortfolioFragment\\.java",
"android/java/org/chromium/chrome/browser/crypto_wallet/fragments/onboarding_fragments/BackupWalletFragment\\.java",
"android/java/org/chromium/chrome/browser/crypto_wallet/fragments/onboarding_fragments/SecurePasswordFragment\\.java",
"android/java/org/chromium/chrome/browser/crypto_wallet/fragments/onboarding_fragments/UnlockWalletFragment\\.java",
"android/java/org/chromium/chrome/browser/crypto_wallet/modal/BraveWalletPanel\\.java",
"android/java/org/chromium/chrome/browser/rate/RateDialogFragment\\.java",
"android/java/org/chromium/chrome/browser/settings/BraveStatsPreferences\\.java",
"android/java/org/chromium/chrome/browser/settings/BraveSyncScreensPreference\\.java",
"android/java/org/chromium/chrome/browser/settings/developer/BraveQAPreferences\\.java",
"android/java/org/chromium/chrome/browser/util/BraveDbUtil\\.java",
],
"_CheckAndroidNoBannedImports": [
"android/java/org/chromium/chrome/browser/notifications/BraveNotificationSettingsBridge\\.java",
"android/java/org/chromium/chrome/browser/qrreader/CameraSource\\.java",
"browser/notifications/android/java/src/org/chromium/chrome/browser/notifications/BraveNotificationManagerProxyImpl\\.java",
],
"CheckForDeprecatedOSMacros": [
"browser/ntp_background/custom_background_file_manager\\.h",
"browser/ntp_background/ntp_custom_background_images_service_delegate\\.cc",
"browser/ui/webui/new_tab_page/brave_new_tab_page_handler\\.cc",
"components/brave_sync/network_time_helper\\.cc",
],
"CheckConsistentGrdChanges": [
"browser/ui/android/strings/android_brave_strings\\.grd",
],
"CheckRawPtrUsage": [
"components/brave_search/renderer/brave_search_default_js_handler\\.h",
"components/brave_search/renderer/brave_search_fallback_js_handler\\.h",
"components/brave_search/renderer/brave_search_service_worker_holder\\.h",
"components/brave_wallet/renderer/js_ethereum_provider\\.h",
"components/content_settings/renderer/brave_content_settings_agent_impl_autoplay_browsertest\\.cc",
"components/cosmetic_filters/renderer/cosmetic_filters_js_handler\\.h",
"components/speedreader/renderer/speedreader_js_handler\\.h",
],
},
}
+2 -2
View File
@@ -1,9 +1,9 @@
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index 6ad8be3d1364859899c9a7eafc1a28b62a800cd4..a168b0e763feed9d60d6825a8801714732fe69da 100644
index 6ad8be3d1364859899c9a7eafc1a28b62a800cd4..3387bb646508707da3d6f40599a9deee590e13d9 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -6168,3 +6168,4 @@ Robolectric tests do not need a @Batch or @DoNotBatch annotations.
""", extra_annotation_errors))
return results
+from import_inline import inline_module; inline_module('chromium_presubmit_overrides', globals(), locals())
+import chromium_presubmit_overrides; chromium_presubmit_overrides.Apply(globals())
+189 -168
View File
@@ -3,75 +3,136 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at http://mozilla.org/MPL/2.0/. */
# This file is executed (not imported) in the context of src/PRESUBMIT.py, it
# uses existing functions from a global scope to change them. This allows us to
# alter root Chromium presubmit checks without introducing too much conflict.
# This file is imported in the context of src/PRESUBMIT.py, it uses existing
# functions from a global scope to change them. This allows us to alter root
# Chromium presubmit checks without introducing too much conflict.
import copy
import inspect
import re
import sys
import lib.chromium_presubmit_utils as chromium_presubmit_utils
import override_utils
import import_inline
_BRAVE_DEFAULT_FILES_TO_SKIP = (r'win_build_output[\\/].*', )
# pylint: disable=line-too-long,protected-access,unused-variable
GLOBAL_CHECKS_KEY = 'global'
CANNED_CHECKS_KEY = 'canned'
# Modify depot_tools-bundled checks (Chromium calls them canned checks).
# These modification will stay active across all PRESUBMIT.py files, i.e.
# src/PRESUBMIT.py, src/brave/PRESUBMIT.py.
def _modify_canned_checks(canned_checks):
# pylint: disable=unused-variable
# Helper to load json5 presubmit config.
def load_presubmit_config():
try:
json5_path = import_inline.join_src_dir('third_party', 'pyjson5',
'src')
sys.path.append(json5_path)
# pylint: disable=import-outside-toplevel,import-error
import json5
return json5.load(
open(
import_inline.join_src_dir('brave',
'chromium_presubmit_config.json5')))
finally:
# Restore sys.path to what it was before.
sys.path.remove(json5_path)
# Disable upstream-specific license check.
@chromium_presubmit_utils.override_check(canned_checks)
def CheckLicense(*_, **__):
return []
# We don't use OWNERS files.
@chromium_presubmit_utils.override_check(canned_checks)
def CheckOwnersFormat(*_, **__):
return []
config = load_presubmit_config()
# We don't use OWNERS files.
@chromium_presubmit_utils.override_check(canned_checks)
def CheckOwners(*_, **__):
return []
# We don't use AUTHORS file.
@chromium_presubmit_utils.override_check(canned_checks)
def CheckAuthorizedAuthor(*_, **__):
return []
# Empty check stub that does nothing and returns empty presubmit result.
def noop_check(*_, **__):
return []
# We don't upload change to Chromium git.
@chromium_presubmit_utils.override_check(canned_checks)
def CheckChangeWasUploaded(*_, **__):
return []
# We don't upload change to Chromium git.
@chromium_presubmit_utils.override_check(canned_checks)
def CheckChangeHasBugField(*_, **__):
return []
# Replaces existing PRESUBMIT check. Can be used with globals() scope or a class
# scope (such as input_api.canned_checks). Doesn't fail if the Check is not
# found, only prints a warning message."""
def override_check(scope, name=None):
def decorator(new_func):
is_dict_scope = isinstance(scope, dict)
check_name = name or new_func.__name__
if is_dict_scope:
original_check = scope.get(check_name, None)
else:
original_check = getattr(scope, check_name, None)
# We don't upload change to Chromium git.
@chromium_presubmit_utils.override_check(canned_checks)
def CheckTreeIsOpen(*_, **__):
return []
if not callable(original_check):
print(f'WARNING: {check_name} check to override not found.\n'
'Please update chromium_presubmit_overrides.py!')
return noop_check
return override_utils.override_function(scope, name=name)(new_func)
return decorator
# Returns first Check* method from the scope.
def get_first_check_name(scope):
assert isinstance(scope, dict)
for key, value in scope.items():
if key.startswith('Check') and callable(value):
return key
raise LookupError('Check* method not found in scope')
# Override src/PRESUBMIT.py checks.
def override_global_checks(global_checks):
apply_generic_check_overrides(global_checks, GLOBAL_CHECKS_KEY)
# Changes from upstream:
# 1. Generate PresubmitError instead of Warning on format issue.
# 2. Replace suggested command from upstream-specific to 'npm run format'.
@chromium_presubmit_utils.override_check(canned_checks)
def CheckPatchFormatted(original_check, input_api, output_api, *args,
**kwargs):
# 1. Add 'brave/' prefix for header guard checks to properly validate
# guards.
@override_check(global_checks)
def CheckForIncludeGuards(original_check, input_api, output_api, **kwargs):
def AffectedSourceFiles(self, original_method, source_file):
def PrependBrave(affected_file):
affected_file = copy.copy(affected_file)
affected_file._path = f'brave/{affected_file._path}'
return affected_file
return [
PrependBrave(f) for f in filter(self.FilterSourceFile,
original_method(source_file))
]
with override_utils.override_scope_function(input_api,
AffectedSourceFiles):
return original_check(input_api, output_api, **kwargs)
# Changes from upstream:
# 1. Remove ^(chrome|components|content|extensions) filter to cover all
# files in the repository, because brave/ structure is slightly
# different.
@override_check(global_checks)
def CheckMPArchApiUsage(original_check, input_api, output_api, **kwargs):
def AffectedFiles(self, original_method, *args, **kwargs):
kwargs['file_filter'] = self.FilterSourceFile
return original_method(*args, **kwargs)
with override_utils.override_scope_function(input_api, AffectedFiles):
return original_check(input_api, output_api, **kwargs)
# Override canned checks (depot_tools/presubmit_canned_checks.py).
def override_canned_checks(canned_checks):
apply_generic_check_overrides(canned_checks, CANNED_CHECKS_KEY)
# Changes from upstream:
# 1. Replace suggested command from upstream-specific to 'npm run format'.
@override_check(canned_checks)
def CheckPatchFormatted(original_check, input_api, output_api, **kwargs):
kwargs = {
**kwargs,
'bypass_warnings': False,
'check_python': True,
'result_factory': output_api.PresubmitError,
}
result = original_check(input_api, output_api, *args, **kwargs)
result = original_check(input_api, output_api, **kwargs)
# If presubmit generates "Please run git cl format --js" message, we
# should replace the command with "npm run format -- --js". The order of
# these replacements ensure we do this properly.
# should replace the command with "npm run format -- --js". The
# order of these replacements ensure we do this properly.
replacements = [
(' format --', ' format -- --'),
('git cl format', 'npm run format'),
@@ -81,19 +142,18 @@ def _modify_canned_checks(canned_checks):
]
for item in result:
for replacement in replacements:
# pylint: disable=protected-access
item._message = item._message.replace(replacement[0],
replacement[1])
return result
# Changes from upstream:
# 1. Run lint only on *changed* files instead of getting *all* files from
# the directory. Upstream does it to catch breakages in unmodified files,
# but it's very resource intensive, moreover for our setup it covers all
# files from vendor and other directories which we should ignore.
# 2. Set is_committing=True to force PresubmitErrors instead of Warnings.
@chromium_presubmit_utils.override_check(canned_checks)
def GetPylint(original_check, input_api, *args, **kwargs):
# 1. Run pylint only on *changed* files instead of getting *all* files
# from the directory. Upstream does it to catch breakages in
# unmodified files, but it's very resource intensive, moreover for
# our setup it covers all files from vendor and other directories
# which we should ignore.
@override_check(canned_checks)
def GetPylint(original_check, input_api, output_api, **kwargs):
def _FetchAllFiles(_, input_api, files_to_check, files_to_skip):
src_filter = lambda f: input_api.FilterSourceFile(
f, files_to_check=files_to_check, files_to_skip=files_to_skip)
@@ -104,125 +164,86 @@ def _modify_canned_checks(canned_checks):
with override_utils.override_scope_function(input_api.canned_checks,
_FetchAllFiles):
with override_utils.override_scope_variable(
input_api, 'is_committing', True):
return original_check(input_api, *args, **kwargs)
return original_check(input_api, output_api, **kwargs)
# Override the first ever check defined in PRESUBMIT.py to make changes to
# input_api before any real check is run.
@chromium_presubmit_utils.override_check(
globals(), chromium_presubmit_utils.get_first_check_name(globals()))
def OverriddenFirstCheck(original_check, input_api, output_api):
_modify_canned_checks(input_api.canned_checks)
input_api.DEFAULT_FILES_TO_SKIP += _BRAVE_DEFAULT_FILES_TO_SKIP
return original_check(input_api, output_api)
# Overrides canned checks and installs per-check file filter.
def modify_input_api(input_api):
override_canned_checks(input_api.canned_checks)
setup_per_check_file_filter(input_api)
input_api.DEFAULT_FILES_TO_SKIP += (*config['default_files_to_skip'], )
# We don't use OWNERS files.
@chromium_presubmit_utils.override_check(globals())
def CheckSecurityOwners(*_, **__):
return []
# Disables checks or forces presubmit errors for checks listed in the config.
def apply_generic_check_overrides(scope, config_key):
for disabled_check in config['disabled_checks'][config_key]:
override_check(scope, name=disabled_check)(noop_check)
def force_presubmit_error_wrapper(original_check, input_api, output_api,
**kwargs):
with override_utils.override_scope_variable(output_api,
'PresubmitPromptWarning',
output_api.PresubmitError):
return original_check(input_api, output_api, **kwargs)
for force_error_check in config['checks_to_force_presubmit_errors'][
config_key]:
override_check(scope,
name=force_error_check)(force_presubmit_error_wrapper)
# This validates added strings with screenshot tests which we don't use.
@chromium_presubmit_utils.override_check(globals())
def CheckStrings(*_, **__):
return []
# Wraps input_api.change.AffectedFiles method to manually filter files available
# for a current check. The current check is found using the Python stack trace.
def setup_per_check_file_filter(input_api):
check_function_re = re.compile(config['check_function_regex'])
def get_check_names(frame):
check_names = set()
while frame:
co_name = frame.f_code.co_name
if co_name == '_run_check_function':
break
if check_function_re.match(co_name):
check_names.add(co_name)
frame = frame.f_back
return check_names
per_check_files_to_skip = config['per_check_files_to_skip']
def get_files_to_skip(check_names):
files_to_skip = []
for check_name in check_names:
files_to_skip.extend(per_check_files_to_skip.get(check_name, []))
return files_to_skip
@override_utils.override_method(input_api.change)
def AffectedFiles(_self, original_method, *args, **kwargs):
files_to_skip = get_files_to_skip(
get_check_names(inspect.currentframe().f_back))
affected_files = input_api.change._affected_files
if files_to_skip:
def file_filter(affected_file):
local_path = affected_file.LocalPath().replace('\\', '/')
for file_to_skip in files_to_skip:
if re.match(file_to_skip, local_path):
return False
return True
affected_files = [*filter(file_filter, affected_files)]
with override_utils.override_scope_variable(input_api.change,
'_affected_files',
affected_files):
return original_method(*args, **kwargs)
# Don't check upstream pydeps.
@chromium_presubmit_utils.override_check(globals())
def CheckPydepsNeedsUpdating(*_, **__):
return []
def Apply(_globals):
override_global_checks(_globals)
# Changes from upstream:
# 1. Add 'brave/' prefix for header guard checks to properly validate guards.
@chromium_presubmit_utils.override_check(globals())
def CheckForIncludeGuards(original_check, input_api, output_api):
def AffectedSourceFiles(self, original_method, source_file):
def PrependBrave(affected_file):
# pylint: disable=protected-access
affected_file = copy.copy(affected_file)
affected_file._path = f'brave/{affected_file._path}'
return affected_file
return [
PrependBrave(f) for f in filter(self.FilterSourceFile,
original_method(source_file))
]
with override_utils.override_scope_function(input_api,
AffectedSourceFiles):
return original_check(input_api, output_api)
# Changes from upstream:
# 1. Extend _KNOWN_TEST_DATA_AND_INVALID_JSON_FILE_PATTERNS with files to
# ignore.
@chromium_presubmit_utils.override_check(globals())
def CheckParseErrors(original_check, input_api, output_api):
# pylint: disable=undefined-variable
_KNOWN_TEST_DATA_AND_INVALID_JSON_FILE_PATTERNS.append(r'tsconfig\.json$')
return original_check(input_api, output_api)
# Changes from upstream:
# 1. Remove ^(chrome|components|content|extensions) filter to cover all files
# in the repository, because brave/ structure is slightly different.
@chromium_presubmit_utils.override_check(globals())
def CheckMPArchApiUsage(original_check, input_api, output_api):
def AffectedFiles(self, original_method, *args, **kwargs):
kwargs['file_filter'] = self.FilterSourceFile
return original_method(*args, **kwargs)
with override_utils.override_scope_function(input_api, AffectedFiles):
return original_check(input_api, output_api)
# Changes from upstream:
# 1. Skip chromium_src/ files.
@chromium_presubmit_utils.override_check(globals())
def CheckForRelativeIncludes(original_check, input_api, output_api):
def AffectedFiles(self, original_method, *args, **kwargs):
files_to_skip = input_api.DEFAULT_FILES_TO_SKIP + (
r'^chromium_src[\\/]', )
file_filter = lambda x: self.FilterSourceFile(
x, files_to_skip=files_to_skip)
kwargs['file_filter'] = file_filter
return original_method(*args, **kwargs)
with override_utils.override_scope_function(input_api, AffectedFiles):
return original_check(input_api, output_api)
# Changes from upstream:
# 1. Skip chromium_src/ files.
@chromium_presubmit_utils.override_check(globals())
def CheckForCcIncludes(original_check, input_api, output_api):
def AffectedFiles(self, original_method, *args, **kwargs):
files_to_skip = input_api.DEFAULT_FILES_TO_SKIP + (
r'^chromium_src[\\/]', )
file_filter = lambda x: self.FilterSourceFile(
x, files_to_skip=files_to_skip)
kwargs['file_filter'] = file_filter
return original_method(*args, **kwargs)
with override_utils.override_scope_function(input_api, AffectedFiles):
return original_check(input_api, output_api)
# Changes from upstream:
# 1. Ignore java files, currently a lot of DEPS issues.
@chromium_presubmit_utils.override_check(globals())
def CheckUnwantedDependencies(original_check, input_api, output_api):
def AffectedFiles(self, original_method, *args, **kwargs):
files_to_skip = input_api.DEFAULT_FILES_TO_SKIP + (r'.*\.java$', )
file_filter = lambda x: self.FilterSourceFile(
x, files_to_skip=files_to_skip)
kwargs['file_filter'] = file_filter
return original_method(*args, **kwargs)
with override_utils.override_scope_function(input_api, AffectedFiles):
return original_check(input_api, output_api)
# Override the first global check to modify input_api before any check is
# run.
@override_check(_globals, get_first_check_name(_globals))
def OverriddenFirstCheck(original_check, input_api, output_api, **kwargs):
modify_input_api(input_api)
return original_check(input_api, output_api, **kwargs)
-42
View File
@@ -1,42 +0,0 @@
# Copyright (c) 2022 The Brave Authors. All rights reserved.
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at http://mozilla.org/MPL/2.0/. */
import override_utils
def override_check(scope, name=None):
"""Replaces existing PRESUBMIT check. Can be used with globals() scope or a
class scope (such as input_api.canned_checks). Doesn't fail if the Check is
not found, only prints a warning message."""
def decorator(new_func):
is_dict_scope = isinstance(scope, dict)
check_name = name or new_func.__name__
if is_dict_scope:
original_check = scope.get(check_name, None)
else:
original_check = getattr(scope, check_name, None)
if not callable(original_check):
print(f'WARNING: {check_name} check to override not found.\n'
'Please update chromium_presubmit_overrides.py!')
def noop_check(*_, **__):
return []
return noop_check
return override_utils.override_function(scope, name=name)(new_func)
return decorator
def get_first_check_name(scope):
"""Returns first Check* method from the scope."""
assert isinstance(scope, dict)
for key, value in scope.items():
if key.startswith('Check') and callable(value):
return key
raise LookupError('Check* method not found in scope')
+12 -6
View File
@@ -40,22 +40,28 @@ def override_function(scope, name=None, condition=True):
return decorator
def override_method(scope, name=None, condition=True):
"""Replaces an existing method in the class scope."""
def decorator(new_method):
assert(not isinstance(scope, dict))
assert not isinstance(scope, dict)
method_name = name or new_method.__name__
original_method = getattr(scope, method_name, None)
assert(inspect.isfunction(original_method))
def wrapped_method(self, *args, **kwargs):
return new_method(self, original_method, *args, **kwargs)
if not condition:
wrapped_method = original_method
else:
setattr(scope, method_name, wrapped_method)
def wrapped_method(self, *args, **kwargs):
return new_method(self, original_method, *args, **kwargs)
if inspect.ismethod(original_method):
setattr(scope, method_name,
types.MethodType(wrapped_method, scope))
else:
assert inspect.isfunction(original_method)
setattr(scope, method_name, wrapped_method)
return wrapped_method