94 lines
3.7 KiB
Python
94 lines
3.7 KiB
Python
|
|
#!/usr/bin/env python3
|
||
|
|
# -*- coding: utf-8 -*-
|
||
|
|
# Copyright (c) 2021 Huawei Device Co., Ltd.
|
||
|
|
# 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.
|
||
|
|
|
||
|
|
import os
|
||
|
|
import re
|
||
|
|
import glob
|
||
|
|
|
||
|
|
from file_utils import read_json_file
|
||
|
|
|
||
|
|
|
||
|
|
def _get_external_deps_file_list(search_path):
|
||
|
|
search_str = "{}/**/*{}".format(search_path, "_external_deps_temp.json")
|
||
|
|
external_deps_file_list = glob.glob(search_str, recursive=True)
|
||
|
|
return external_deps_file_list
|
||
|
|
|
||
|
|
|
||
|
|
def _read_external_deps_info(build_out_dir):
|
||
|
|
ext_deps_file_list = _get_external_deps_file_list(
|
||
|
|
os.path.join(build_out_dir, 'gen'))
|
||
|
|
ext_deps_file_dict = {}
|
||
|
|
for _external_deps_file in ext_deps_file_list:
|
||
|
|
if not os.path.exists(_external_deps_file):
|
||
|
|
raise Exception(
|
||
|
|
"file '{}' doesn't exist.".format(_external_deps_file))
|
||
|
|
module_ext_deps_info = read_json_file(_external_deps_file)
|
||
|
|
if module_ext_deps_info is None:
|
||
|
|
raise Exception(
|
||
|
|
"read file '{}' failed.".format(_external_deps_file))
|
||
|
|
_filename = os.path.basename(_external_deps_file)
|
||
|
|
_filename_snippet = re.search(r'(.*)_external_deps_temp.json',
|
||
|
|
_filename).group(1)
|
||
|
|
part_name, module_name = _parse_module_name(_filename_snippet)
|
||
|
|
module_alias = '{}:{}'.format(part_name, module_name)
|
||
|
|
ext_deps_file_dict[module_alias] = module_ext_deps_info
|
||
|
|
return ext_deps_file_dict
|
||
|
|
|
||
|
|
|
||
|
|
def _parse_module_name(name_str):
|
||
|
|
split_result = name_str.split('__')
|
||
|
|
part_name = split_result[0]
|
||
|
|
module_name = split_result[1]
|
||
|
|
return part_name, module_name
|
||
|
|
|
||
|
|
|
||
|
|
def _read_module_deps_info(module_deps_files_path):
|
||
|
|
deps_files = os.listdir(module_deps_files_path)
|
||
|
|
deps_data = {}
|
||
|
|
for _filename in deps_files:
|
||
|
|
_deps_file = os.path.join(module_deps_files_path, _filename)
|
||
|
|
if not os.path.exists(_deps_file):
|
||
|
|
raise Exception("file '{}' doesn't exist.".format(_deps_file))
|
||
|
|
module_deps_info = read_json_file(_deps_file)
|
||
|
|
if module_deps_info is None:
|
||
|
|
raise Exception("read file '{}' failed.".format(_deps_file))
|
||
|
|
_filename_snippet = re.search(r'(.*).json', _filename).group(1)
|
||
|
|
part_name, module_name = _parse_module_name(_filename_snippet)
|
||
|
|
module_alias = '{}:{}'.format(part_name, module_name)
|
||
|
|
deps_data[module_alias] = module_deps_info
|
||
|
|
return deps_data
|
||
|
|
|
||
|
|
|
||
|
|
def _merge_external_deps_label(deps_data, external_deps_data):
|
||
|
|
for _module_alias, _info in deps_data.items():
|
||
|
|
external_deps = _info.get('external_deps')
|
||
|
|
if not external_deps:
|
||
|
|
continue
|
||
|
|
ext_deps_label_info = external_deps_data.get(_module_alias)
|
||
|
|
if not ext_deps_label_info:
|
||
|
|
raise Exception(
|
||
|
|
"module '{}' external deps info is incorrect.".format(
|
||
|
|
_module_alias))
|
||
|
|
_info['external_deps_label'] = ext_deps_label_info.get('deps')
|
||
|
|
return deps_data
|
||
|
|
|
||
|
|
|
||
|
|
def get_all_deps_data(module_deps_files_path):
|
||
|
|
deps_data = _read_module_deps_info(module_deps_files_path)
|
||
|
|
build_out_dir = os.path.dirname(module_deps_files_path)
|
||
|
|
external_deps_data = _read_external_deps_info(build_out_dir)
|
||
|
|
all_deps_data = _merge_external_deps_label(deps_data, external_deps_data)
|
||
|
|
return all_deps_data
|