1f6603c60Sopenharmony_ci#!/usr/bin/env python 2f6603c60Sopenharmony_ci# -*- coding: utf-8 -*- 3f6603c60Sopenharmony_ci""" 4f6603c60Sopenharmony_ciCopyright (c) 2020-2021 Huawei Device Co., Ltd. 5f6603c60Sopenharmony_ciLicensed under the Apache License, Version 2.0 (the "License"); 6f6603c60Sopenharmony_ciyou may not use this file except in compliance with the License. 7f6603c60Sopenharmony_ciYou may obtain a copy of the License at 8f6603c60Sopenharmony_ci 9f6603c60Sopenharmony_ci http://www.apache.org/licenses/LICENSE-2.0 10f6603c60Sopenharmony_ci 11f6603c60Sopenharmony_ciUnless required by applicable law or agreed to in writing, software 12f6603c60Sopenharmony_cidistributed under the License is distributed on an "AS IS" BASIS, 13f6603c60Sopenharmony_ciWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14f6603c60Sopenharmony_ciSee the License for the specific language governing permissions and 15f6603c60Sopenharmony_cilimitations under the License. 16f6603c60Sopenharmony_ci""" 17f6603c60Sopenharmony_ci 18f6603c60Sopenharmony_ciimport os 19f6603c60Sopenharmony_ciimport sys 20f6603c60Sopenharmony_ciimport subprocess 21f6603c60Sopenharmony_ciimport hashlib 22f6603c60Sopenharmony_ciimport json5 23f6603c60Sopenharmony_ci 24f6603c60Sopenharmony_ci 25f6603c60Sopenharmony_cidef get_file_md5(file_path): 26f6603c60Sopenharmony_ci hash_md5 = hashlib.md5() 27f6603c60Sopenharmony_ci with open(file_path, "rb") as f: 28f6603c60Sopenharmony_ci for chunk in iter(lambda: f.read(4096), b""): 29f6603c60Sopenharmony_ci hash_md5.update(chunk) 30f6603c60Sopenharmony_ci return hash_md5.hexdigest() 31f6603c60Sopenharmony_ci 32f6603c60Sopenharmony_ci 33f6603c60Sopenharmony_cidef get_hvigor_version(json_file): 34f6603c60Sopenharmony_ci with open(json_file, 'r') as f: 35f6603c60Sopenharmony_ci data = json5.load(f) 36f6603c60Sopenharmony_ci return data.get('hvigorVersion') 37f6603c60Sopenharmony_ci return "0.0.0" 38f6603c60Sopenharmony_ci 39f6603c60Sopenharmony_ci 40f6603c60Sopenharmony_cidef output_unmatched_project(prject_list, filename): 41f6603c60Sopenharmony_ci print("") 42f6603c60Sopenharmony_ci print( 43f6603c60Sopenharmony_ci "Error: The {} in the following directory does not meet the requirements:" 44f6603c60Sopenharmony_ci .format(filename)) 45f6603c60Sopenharmony_ci for prj in prject_list: 46f6603c60Sopenharmony_ci print(prj[0], prj[1]) 47f6603c60Sopenharmony_ci print("") 48f6603c60Sopenharmony_ci 49f6603c60Sopenharmony_ci 50f6603c60Sopenharmony_cidef check_hvigor_wrapper_js(acts_root_dir, hvigor_prj_list): 51f6603c60Sopenharmony_ci unmatch_info = [] 52f6603c60Sopenharmony_ci baseline_file = os.path.join(acts_root_dir, 'arkcompiler/ecmanewfeatures/hvigor/hvigor-wrapper.js') 53f6603c60Sopenharmony_ci baseline_md5 = get_file_md5(os.path.join(baseline_file)) 54f6603c60Sopenharmony_ci for dir in hvigor_prj_list: 55f6603c60Sopenharmony_ci filename = os.path.join(dir, 'hvigor', 'hvigor-wrapper.js') 56f6603c60Sopenharmony_ci md5 = get_file_md5(filename) 57f6603c60Sopenharmony_ci if md5 != baseline_md5: 58f6603c60Sopenharmony_ci unmatch_info.append((md5, filename)) 59f6603c60Sopenharmony_ci 60f6603c60Sopenharmony_ci if len(unmatch_info): 61f6603c60Sopenharmony_ci output_unmatched_project(unmatch_info, 'hvigor-wrapper.js') 62f6603c60Sopenharmony_ci print('Please copy from {}'.format(baseline_file)) 63f6603c60Sopenharmony_ci return False 64f6603c60Sopenharmony_ci return True 65f6603c60Sopenharmony_ci 66f6603c60Sopenharmony_cidef check_hvigor_version(hvigor_prj_list): 67f6603c60Sopenharmony_ci unmatch_prj_list = [] 68f6603c60Sopenharmony_ci baseline_version = '4.0.5' 69f6603c60Sopenharmony_ci for dir in hvigor_prj_list: 70f6603c60Sopenharmony_ci filename = os.path.join(dir, 'hvigor', 'hvigor-config.json5') 71f6603c60Sopenharmony_ci version = get_hvigor_version(filename) 72f6603c60Sopenharmony_ci if version != baseline_version: 73f6603c60Sopenharmony_ci unmatch_prj_list.append((version, filename)) 74f6603c60Sopenharmony_ci 75f6603c60Sopenharmony_ci if len(unmatch_prj_list): 76f6603c60Sopenharmony_ci output_unmatched_project(unmatch_prj_list, 'hvigor-config.json5') 77f6603c60Sopenharmony_ci print("Plesse use {}".format(baseline_version)) 78f6603c60Sopenharmony_ci return False 79f6603c60Sopenharmony_ci return True 80f6603c60Sopenharmony_ci 81f6603c60Sopenharmony_cidef check_hvigorw_bat(acts_root_dir, hvigor_prj_list): 82f6603c60Sopenharmony_ci unmatch_info = [] 83f6603c60Sopenharmony_ci baseline_file = os.path.join(acts_root_dir, 'arkcompiler/ecmanewfeatures/hvigorw.bat') 84f6603c60Sopenharmony_ci baseline_md5 = get_file_md5(os.path.join(baseline_file)) 85f6603c60Sopenharmony_ci for dir in hvigor_prj_list: 86f6603c60Sopenharmony_ci filename = os.path.join(dir, 'hvigorw.bat') 87f6603c60Sopenharmony_ci md5 = get_file_md5(filename) 88f6603c60Sopenharmony_ci if md5 != baseline_md5: 89f6603c60Sopenharmony_ci unmatch_info.append((md5, filename)) 90f6603c60Sopenharmony_ci 91f6603c60Sopenharmony_ci if len(unmatch_info): 92f6603c60Sopenharmony_ci output_unmatched_project(unmatch_info, 'hvigorw.bat') 93f6603c60Sopenharmony_ci print('Please copy from {}'.format(baseline_file)) 94f6603c60Sopenharmony_ci return False 95f6603c60Sopenharmony_ci return True 96f6603c60Sopenharmony_ci 97f6603c60Sopenharmony_ci 98f6603c60Sopenharmony_cidef get_hvigor_prject_list(directory): 99f6603c60Sopenharmony_ci hvigor_prj_list = [] 100f6603c60Sopenharmony_ci for root, dirs, files in os.walk(directory): 101f6603c60Sopenharmony_ci for dir in dirs: 102f6603c60Sopenharmony_ci if dir == 'hvigor': 103f6603c60Sopenharmony_ci hvigor_prj_list.append(root) 104f6603c60Sopenharmony_ci return hvigor_prj_list 105f6603c60Sopenharmony_ci 106f6603c60Sopenharmony_ci 107f6603c60Sopenharmony_ciif __name__ == "__main__": 108f6603c60Sopenharmony_ci this_file = os.path.realpath(__file__) 109f6603c60Sopenharmony_ci acts_root_dir = os.path.dirname(this_file) 110f6603c60Sopenharmony_ci hvigor_prj_list = get_hvigor_prject_list(acts_root_dir) 111f6603c60Sopenharmony_ci 112f6603c60Sopenharmony_ci js_valid = check_hvigor_wrapper_js(acts_root_dir, hvigor_prj_list) 113f6603c60Sopenharmony_ci json_valid = check_hvigor_version(hvigor_prj_list) 114f6603c60Sopenharmony_ci bat_valid = check_hvigorw_bat(acts_root_dir, hvigor_prj_list) 115f6603c60Sopenharmony_ci 116f6603c60Sopenharmony_ci if not js_valid or not json_valid or not bat_valid: 117f6603c60Sopenharmony_ci sys.exit(1) 118f6603c60Sopenharmony_ci 119f6603c60Sopenharmony_ci sys.exit(0)