15f9996aaSopenharmony_ci#!/usr/bin/env python
25f9996aaSopenharmony_ci# -*- coding: utf-8 -*-
35f9996aaSopenharmony_ci# Copyright (c) 2024 Huawei Device Co., Ltd.
45f9996aaSopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License");
55f9996aaSopenharmony_ci# you may not use this file except in compliance with the License.
65f9996aaSopenharmony_ci# You may obtain a copy of the License at
75f9996aaSopenharmony_ci#
85f9996aaSopenharmony_ci#     http://www.apache.org/licenses/LICENSE-2.0
95f9996aaSopenharmony_ci#
105f9996aaSopenharmony_ci# Unless required by applicable law or agreed to in writing, software
115f9996aaSopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS,
125f9996aaSopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135f9996aaSopenharmony_ci# See the License for the specific language governing permissions and
145f9996aaSopenharmony_ci# limitations under the License.
155f9996aaSopenharmony_ci
165f9996aaSopenharmony_ciimport argparse
175f9996aaSopenharmony_ciimport json
185f9996aaSopenharmony_ciimport os
195f9996aaSopenharmony_ciimport time
205f9996aaSopenharmony_ciimport stat
215f9996aaSopenharmony_ciimport utils
225f9996aaSopenharmony_ci
235f9996aaSopenharmony_ci
245f9996aaSopenharmony_cidef _get_args():
255f9996aaSopenharmony_ci    parser = argparse.ArgumentParser(add_help=True)
265f9996aaSopenharmony_ci    parser.add_argument(
275f9996aaSopenharmony_ci        "-p",
285f9996aaSopenharmony_ci        "--input_path",
295f9996aaSopenharmony_ci        default=r"./",
305f9996aaSopenharmony_ci        type=str,
315f9996aaSopenharmony_ci        help="Path of the folder where the collection of txt files to be processed is located.",
325f9996aaSopenharmony_ci    )
335f9996aaSopenharmony_ci    parser.add_argument(
345f9996aaSopenharmony_ci        "-o",
355f9996aaSopenharmony_ci        "--output_path",
365f9996aaSopenharmony_ci        default=r"./",
375f9996aaSopenharmony_ci        type=str,
385f9996aaSopenharmony_ci        help="path of output file. default: ./",
395f9996aaSopenharmony_ci    )
405f9996aaSopenharmony_ci    args = parser.parse_args()
415f9996aaSopenharmony_ci    return args
425f9996aaSopenharmony_ci
435f9996aaSopenharmony_ci
445f9996aaSopenharmony_cidef _scan_dir_to_get_info(bundle_path):
455f9996aaSopenharmony_ci    dirs_info = dict()
465f9996aaSopenharmony_ci    file_list = list()
475f9996aaSopenharmony_ci    for entry in os.scandir(bundle_path):
485f9996aaSopenharmony_ci        if entry.name == 'bundle.json':
495f9996aaSopenharmony_ci            pass
505f9996aaSopenharmony_ci        elif entry.is_dir():
515f9996aaSopenharmony_ci            dirs_info.update({entry.name: [f"{entry.name}/*"]})
525f9996aaSopenharmony_ci        elif entry.is_file():
535f9996aaSopenharmony_ci
545f9996aaSopenharmony_ci            file_list.append(entry.name)
555f9996aaSopenharmony_ci        else:
565f9996aaSopenharmony_ci            print(f'{entry.name} is not file or dir ')
575f9996aaSopenharmony_ci    dirs_info.update({"./": file_list})
585f9996aaSopenharmony_ci    return dirs_info
595f9996aaSopenharmony_ci
605f9996aaSopenharmony_ci
615f9996aaSopenharmony_cidef _out_bundle_json(bundle_json, file_name):
625f9996aaSopenharmony_ci    flags = os.O_WRONLY | os.O_CREAT
635f9996aaSopenharmony_ci    modes = stat.S_IWUSR | stat.S_IRUSR
645f9996aaSopenharmony_ci    with os.fdopen(os.open(file_name, flags, modes), 'w') as f:
655f9996aaSopenharmony_ci        json.dump(bundle_json, f, indent=2)
665f9996aaSopenharmony_ci
675f9996aaSopenharmony_ci
685f9996aaSopenharmony_cidef main():
695f9996aaSopenharmony_ci    args = _get_args()
705f9996aaSopenharmony_ci    hpmcache_path = args.input_path
715f9996aaSopenharmony_ci    dependences_file = os.path.join(hpmcache_path, 'dependences.json')
725f9996aaSopenharmony_ci    dependences_json = utils.get_json(dependences_file)
735f9996aaSopenharmony_ci    for part_name, part_info in dependences_json.items():
745f9996aaSopenharmony_ci        part_path = part_info['installPath']
755f9996aaSopenharmony_ci        bundle_path = os.path.join(hpmcache_path, part_path[1:], 'bundle.json')
765f9996aaSopenharmony_ci        bundle_json = utils.get_json(bundle_path)
775f9996aaSopenharmony_ci        dirs_info = _scan_dir_to_get_info(os.path.join(hpmcache_path, part_path[1:]))
785f9996aaSopenharmony_ci        bundle_json.update({"dirs": dirs_info})
795f9996aaSopenharmony_ci        _out_bundle_json(bundle_json, bundle_path)
805f9996aaSopenharmony_ci
815f9996aaSopenharmony_ci
825f9996aaSopenharmony_ciif __name__ == '__main__':
835f9996aaSopenharmony_ci    main()
84