| #!/usr/bin/env python3 | |
| # | |
| # Copyright 2013 The Flutter Authors. All rights reserved. | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| """ Gather all the fuchsia artifacts to a destination directory. | |
| """ | |
| import argparse | |
| import errno | |
| import json | |
| import os | |
| import platform | |
| import shutil | |
| import subprocess | |
| import sys | |
| _ARTIFACT_PATH_TO_DST = { | |
| 'flutter_jit_runner': 'flutter_jit_runner', 'icudtl.dat': 'data/icudtl.dat', | |
| 'dart_runner': 'dart_runner', 'flutter_patched_sdk': 'flutter_patched_sdk' | |
| } | |
| def EnsureParentExists(path): | |
| dir_name, _ = os.path.split(path) | |
| if not os.path.exists(dir_name): | |
| os.makedirs(dir_name) | |
| def CopyPath(src, dst): | |
| try: | |
| EnsureParentExists(dst) | |
| shutil.copytree(src, dst) | |
| except OSError as exc: | |
| if exc.errno == errno.ENOTDIR: | |
| shutil.copy(src, dst) | |
| else: | |
| raise | |
| def CreateMetaPackage(dst_root, far_name): | |
| meta = os.path.join(dst_root, 'meta') | |
| if not os.path.isdir(meta): | |
| os.makedirs(meta) | |
| content = {} | |
| content['name'] = far_name | |
| content['version'] = '0' | |
| package = os.path.join(meta, 'package') | |
| with open(package, 'w') as out_file: | |
| json.dump(content, out_file) | |
| def GatherArtifacts(src_root, dst_root, create_meta_package=True): | |
| if not os.path.exists(dst_root): | |
| os.makedirs(dst_root) | |
| else: | |
| shutil.rmtree(dst_root) | |
| for src_rel, dst_rel in _ARTIFACT_PATH_TO_DST.items(): | |
| src_full = os.path.join(src_root, src_rel) | |
| dst_full = os.path.join(dst_root, dst_rel) | |
| if not os.path.exists(src_full): | |
| print('Unable to find artifact: ', str(src_full)) | |
| sys.exit(1) | |
| CopyPath(src_full, dst_full) | |
| if create_meta_package: | |
| CreateMetaPackage(dst_root, 'flutter_runner') | |
| def main(): | |
| parser = argparse.ArgumentParser() | |
| parser.add_argument('--artifacts-root', dest='artifacts_root', action='store', required=True) | |
| parser.add_argument('--dest-dir', dest='dst_dir', action='store', required=True) | |
| args = parser.parse_args() | |
| assert os.path.exists(args.artifacts_root) | |
| dst_parent = os.path.abspath(os.path.join(args.dst_dir, os.pardir)) | |
| assert os.path.exists(dst_parent) | |
| GatherArtifacts(args.artifacts_root, args.dst_dir) | |
| return 0 | |
| if __name__ == '__main__': | |
| sys.exit(main()) |