| #!/usr/bin/env python3 | |
| # | |
| # Copyright 2019, The Android Open Source Project | |
| # | |
| # Licensed under the Apache License, Version 2.0 (the "License"); | |
| # you may not use this file except in compliance with the License. | |
| # You may obtain a copy of the License at | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, software | |
| # distributed under the License is distributed on an "AS IS" BASIS, | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| # See the License for the specific language governing permissions and | |
| # limitations under the License. | |
| # | |
| """Script that will remind developers to run updateApi.""" | |
| import argparse | |
| import os.path | |
| import sys | |
| WARNING_COLOR = '\033[33m' | |
| END_COLOR = '\033[0m' | |
| WARNING_NO_API_FILES = """ | |
| {}********************************************************************** | |
| You changed library classes, but you have no current.txt changes. | |
| Did you forget to run ./gradlew updateApi? | |
| **********************************************************************{} | |
| """.format(WARNING_COLOR, END_COLOR) | |
| WARNING_OLD_API_FILES = """ | |
| {}********************************************************************** | |
| Your current.txt is older than your current changes in library classes. | |
| Did you forget to re-run ./gradlew updateApi? | |
| **********************************************************************{} | |
| """.format(WARNING_COLOR, END_COLOR) | |
| def main(args=None): | |
| if not ('ENABLE_UPDATEAPI_WARNING' in os.environ): | |
| sys.exit(0) | |
| parser = argparse.ArgumentParser() | |
| parser.add_argument('--file', '-f', nargs='*') | |
| parser.set_defaults(format=False) | |
| args = parser.parse_args() | |
| api_files = [f for f in args.file | |
| if f.endswith('.txt') and '/api/' in f] | |
| source_files = [f for f in args.file | |
| if (not "buildSrc/" in f and | |
| "/src/main/" in f or | |
| "/src/commonMain/" in f or | |
| "/src/androidMain/" in f)] | |
| if len(source_files) == 0: | |
| sys.exit(0) | |
| if len(api_files) == 0: | |
| print(WARNING_NO_API_FILES) | |
| sys.exit(77) # 77 is a warning code in repohooks | |
| last_source_timestamp = max([os.path.getmtime(f) for f in source_files]) | |
| last_api_timestamp = max([os.path.getmtime(f) for f in api_files]) | |
| if last_source_timestamp > last_api_timestamp: | |
| print(WARNING_OLD_API_FILES) | |
| sys.exit(77) # 77 is a warning code in repohooks | |
| sys.exit(0) | |
| if __name__ == '__main__': | |
| main() |