eng/scripts/sync_repo.py (56 lines of code) (raw):
#!/usr/bin/python3
"""
sync_repo.py
Script to copy code from mono-repo to read-only clone.
"""
import errno
import glob
import json
import logging
import os
import shutil
import sys
def _log_error_and_quit(msg, out = None, err = None, code = 1):
""" Log an error message and exit. """
warning_color = '\033[91m'
end_color = '\033[0m'
if err:
logging.error(f'{err}')
elif out:
logging.error(f'{out}')
logging.error(f'{warning_color}{msg} ({code}){end_color}')
sys.exit(code)
def _copy(src, dest):
try:
shutil.copytree(src, dest, dirs_exist_ok=True)
except OSError as err:
if err.errno == errno.ENOTDIR:
shutil.copy2(src, dest)
else:
_log_error_and_quit(f'Error copying folder: {err}')
"""
Copies code from a relative path in the mono-repo to the read-only repo.
"""
def main(argv):
usage = f'usage: {__file__} TARGET_SDK'
if len(argv) != 1:
_log_error_and_quit(f'usage: {__file__} TARGET_SDK')
target = argv[0]
try:
source_path = os.path.abspath(os.path.join(glob.glob(f'sdk/**/{target}.podspec.json', recursive=True)[0], ".."))
if not os.path.exists(source_path):
_log_error_and_quit(f'Source path does not exist: {source_path}')
except IndexError:
_log_error_and_quit(f'Could not find {target}.podspec.json')
dest_path = os.path.abspath(os.path.join(ROOT, '..', f'SwiftPM-{target}'))
if not os.path.exists(dest_path):
_log_error_and_quit(f'Destination path does not exist: {dest_path}')
# clear the files to ensure renames are correctly picked up.
for obj in os.listdir(dest_path):
# skip deleting .git
if obj in [".git"]:
continue
obj_path = os.path.join(dest_path, obj)
if os.path.isfile(obj_path):
os.unlink(obj_path)
else:
shutil.rmtree(obj_path)
# copy the subfolder to the root of the SwiftPM repo
_copy(source_path, dest_path)
# copy the LICENSE, CCONTRIBUTING.md, and .gitignore files
for fname in ["LICENSE", "CONTRIBUTING.md", ".gitignore"]:
_copy(os.path.join(ROOT, fname), os.path.join(dest_path, fname))
print(f'Successfully copied {target}:')
print(f' source: {source_path}')
print(f' dest: {dest_path}')
sys.exit(0)
ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))
if __name__ == '__main__':
main(sys.argv[1:])