| #!/usr/bin/env python3 | |
| # | |
| # Copyright OpenEmbedded Contributors | |
| # | |
| # SPDX-License-Identifier: GPL-2.0-only | |
| # | |
| # Allow copying of $1 to $2 but if files in $1 disappear during the copy operation, | |
| # don't error. | |
| # Also don't error if $1 disappears. | |
| # | |
| import sys | |
| import os | |
| import shutil | |
| def copytree(src, dst, symlinks=False, ignore=None): | |
| """Based on shutil.copytree""" | |
| names = os.listdir(src) | |
| try: | |
| os.makedirs(dst) | |
| except OSError: | |
| # Already exists | |
| pass | |
| errors = [] | |
| for name in names: | |
| srcname = os.path.join(src, name) | |
| dstname = os.path.join(dst, name) | |
| try: | |
| d = dstname | |
| if os.path.isdir(dstname): | |
| d = os.path.join(dstname, os.path.basename(srcname)) | |
| if os.path.exists(d): | |
| continue | |
| try: | |
| os.link(srcname, dstname) | |
| except OSError: | |
| shutil.copy2(srcname, dstname) | |
| # catch the Error from the recursive copytree so that we can | |
| # continue with other files | |
| except shutil.Error as err: | |
| errors.extend(err.args[0]) | |
| except EnvironmentError as why: | |
| errors.append((srcname, dstname, str(why))) | |
| try: | |
| shutil.copystat(src, dst) | |
| except OSError as why: | |
| errors.extend((src, dst, str(why))) | |
| if errors: | |
| raise shutil.Error(errors) | |
| try: | |
| copytree(sys.argv[1], sys.argv[2]) | |
| except shutil.Error: | |
| pass | |
| except OSError: | |
| pass |