19762338dSopenharmony_ci#!/usr/bin/env python 29762338dSopenharmony_ci# -*- coding: utf-8 -*- 39762338dSopenharmony_ci""" 49762338dSopenharmony_ciCopyright (c) 2020-2021 Huawei Device Co., Ltd. 59762338dSopenharmony_ciLicensed under the Apache License, Version 2.0 (the "License"); 69762338dSopenharmony_ciyou may not use this file except in compliance with the License. 79762338dSopenharmony_ciYou may obtain a copy of the License at 89762338dSopenharmony_ci 99762338dSopenharmony_ci http://www.apache.org/licenses/LICENSE-2.0 109762338dSopenharmony_ci 119762338dSopenharmony_ciUnless required by applicable law or agreed to in writing, software 129762338dSopenharmony_cidistributed under the License is distributed on an "AS IS" BASIS, 139762338dSopenharmony_ciWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 149762338dSopenharmony_ciSee the License for the specific language governing permissions and 159762338dSopenharmony_cilimitations under the License. 169762338dSopenharmony_ci""" 179762338dSopenharmony_ci 189762338dSopenharmony_ciimport os 199762338dSopenharmony_ciimport sys 209762338dSopenharmony_ciimport subprocess 219762338dSopenharmony_ciimport hashlib 229762338dSopenharmony_ciimport json5 239762338dSopenharmony_ci 249762338dSopenharmony_ci 259762338dSopenharmony_cidef get_file_md5(file_path): 269762338dSopenharmony_ci hash_md5 = hashlib.md5() 279762338dSopenharmony_ci with open(file_path, "rb") as f: 289762338dSopenharmony_ci for chunk in iter(lambda: f.read(4096), b""): 299762338dSopenharmony_ci hash_md5.update(chunk) 309762338dSopenharmony_ci return hash_md5.hexdigest() 319762338dSopenharmony_ci 329762338dSopenharmony_ci 339762338dSopenharmony_cidef get_hvigor_version(json_file): 349762338dSopenharmony_ci with open(json_file, 'r') as f: 359762338dSopenharmony_ci data = json5.load(f) 369762338dSopenharmony_ci return data.get('hvigorVersion') 379762338dSopenharmony_ci return "0.0.0" 389762338dSopenharmony_ci 399762338dSopenharmony_ci 409762338dSopenharmony_cidef output_unmatched_project(prject_list, filename): 419762338dSopenharmony_ci print("") 429762338dSopenharmony_ci print( 439762338dSopenharmony_ci "Error: The {} in the following directory does not meet the requirements:" 449762338dSopenharmony_ci .format(filename)) 459762338dSopenharmony_ci for prj in prject_list: 469762338dSopenharmony_ci print(prj[0], prj[1]) 479762338dSopenharmony_ci print("") 489762338dSopenharmony_ci 499762338dSopenharmony_ci 509762338dSopenharmony_cidef check_hvigor_wrapper_js(hvigor_prj_list): 519762338dSopenharmony_ci unmatch_info = [] 529762338dSopenharmony_ci baseline_md5 = "558a3eec8ee9e753b63f99abe79c0ec3" 539762338dSopenharmony_ci for dir in hvigor_prj_list: 549762338dSopenharmony_ci filename = os.path.join(dir, 'hvigor', 'hvigor-wrapper.js') 559762338dSopenharmony_ci md5 = get_file_md5(filename) 569762338dSopenharmony_ci if md5 != baseline_md5: 579762338dSopenharmony_ci unmatch_info.append((md5, filename)) 589762338dSopenharmony_ci 599762338dSopenharmony_ci if len(unmatch_info): 609762338dSopenharmony_ci output_unmatched_project(unmatch_info, 'hvigor-wrapper.js') 619762338dSopenharmony_ci print('Please copy from {}'.format('test/xts/acts/arkcompiler/ecmanewfeatures/hvigor/hvigor-wrapper.js')) 629762338dSopenharmony_ci return False 639762338dSopenharmony_ci return True 649762338dSopenharmony_ci 659762338dSopenharmony_ci 669762338dSopenharmony_cidef check_hvigor_version(hvigor_prj_list): 679762338dSopenharmony_ci unmatch_prj_list = [] 689762338dSopenharmony_ci baseline_version = '4.0.2' 699762338dSopenharmony_ci for dir in hvigor_prj_list: 709762338dSopenharmony_ci filename = os.path.join(dir, 'hvigor', 'hvigor-config.json5') 719762338dSopenharmony_ci version = get_hvigor_version(filename) 729762338dSopenharmony_ci if version != baseline_version: 739762338dSopenharmony_ci unmatch_prj_list.append((version, filename)) 749762338dSopenharmony_ci 759762338dSopenharmony_ci if len(unmatch_prj_list): 769762338dSopenharmony_ci output_unmatched_project(unmatch_prj_list, 'hvigor-config.json5') 779762338dSopenharmony_ci print("Plesse use {}".format(baseline_version)) 789762338dSopenharmony_ci return False 799762338dSopenharmony_ci return True 809762338dSopenharmony_ci 819762338dSopenharmony_ci 829762338dSopenharmony_cidef get_hvigor_prject_list(directory): 839762338dSopenharmony_ci hvigor_prj_list = [] 849762338dSopenharmony_ci for root, dirs, files in os.walk(directory): 859762338dSopenharmony_ci for dir in dirs: 869762338dSopenharmony_ci if dir == 'hvigor': 879762338dSopenharmony_ci hvigor_prj_list.append(root) 889762338dSopenharmony_ci return hvigor_prj_list 899762338dSopenharmony_ci 909762338dSopenharmony_ci 919762338dSopenharmony_ciif __name__ == "__main__": 929762338dSopenharmony_ci this_file = os.path.realpath(__file__) 939762338dSopenharmony_ci curr_dir = os.path.dirname(this_file) 949762338dSopenharmony_ci hvigor_prj_list = get_hvigor_prject_list(curr_dir) 959762338dSopenharmony_ci 969762338dSopenharmony_ci js_valid = check_hvigor_wrapper_js(hvigor_prj_list) 979762338dSopenharmony_ci json_valid = check_hvigor_version(hvigor_prj_list) 989762338dSopenharmony_ci 999762338dSopenharmony_ci if not js_valid or not json_valid: 1009762338dSopenharmony_ci sys.exit(1) 1019762338dSopenharmony_ci 1029762338dSopenharmony_ci sys.exit(0)