| | |
| | import sys |
| | import os.path |
| | import logging |
| | import tempfile |
| | import shutil |
| |
|
| | import setuptools.archive_util |
| |
|
| |
|
| | logger = logging.getLogger(__name__) |
| |
|
| |
|
| | def main(): |
| | logging.basicConfig() |
| | logger.setLevel(logging.DEBUG) |
| |
|
| | src = sys.argv[1] |
| | dst = sys.argv[2] |
| |
|
| | strip_toplevel_dir = True |
| |
|
| | if not os.path.exists(dst): |
| | os.makedirs(dst) |
| |
|
| | if not os.path.isdir(dst): |
| | logger.error('%s: not a directory', dst) |
| |
|
| | if strip_toplevel_dir: |
| | tempdir = tempfile.mkdtemp() |
| | try: |
| | setuptools.archive_util.unpack_archive(src, tempdir) |
| | toplevel_items = os.listdir(tempdir) |
| | if len(toplevel_items) > 1: |
| | logger.error('%s has no single top-level directory', src) |
| | raise SystemExit(1) |
| | root = os.path.join(tempdir, toplevel_items[0]) |
| | for item in os.listdir(root): |
| | src_item = os.path.join(root, item) |
| | dst_item = os.path.join(dst, item) |
| | if os.path.exists(dst_item): |
| | if os.path.isdir(dst_item): |
| | shutil.rmtree(dst_item) |
| | else: |
| | os.unlink(dst_item) |
| | shutil.move(src_item, dst) |
| | finally: |
| | shutil.rmtree(tempdir) |
| | else: |
| | setuptools.archive_util.unpack_archive(src, dst) |
| |
|