Index: build/toolchain/mac/copy_bundle_data.py |
diff --git a/build/toolchain/mac/copy_bundle_data.py b/build/toolchain/mac/copy_bundle_data.py |
index 976591c08ee309a1df86d71d3bd6ce66d3865edc..b31883b20b3951c83dc6c614d7b14279c606f790 100644 |
--- a/build/toolchain/mac/copy_bundle_data.py |
+++ b/build/toolchain/mac/copy_bundle_data.py |
@@ -3,9 +3,11 @@ |
# found in the LICENSE file. |
import argparse |
+import errno |
import os |
import shutil |
import sys |
+import subprocess |
def detect_encoding(data, default_encoding='UTF-8'): |
@@ -64,25 +66,27 @@ def copy_file(source, dest): |
source: string, path to the source file |
dest: string, path to the destination file |
""" |
- if os.path.isdir(source): |
- if os.path.exists(dest): |
- shutil.rmtree(dest) |
- # Copy tree. |
- # TODO(thakis): This copies file attributes like mtime, while the |
- # single-file branch below doesn't. This should probably be changed to |
- # be consistent with the single-file branch. |
- shutil.copytree(source, dest, symlinks=True) |
- return |
- |
- if os.path.exists(dest): |
- os.unlink(dest) |
+ try: |
+ shutil.rmtree(dest) |
+ except OSError as e: |
+ if e.errno == errno.ENOENT: |
+ pass |
+ elif e.errno == errno.ENOTDIR: |
+ os.unlink(dest) |
+ else: |
+ raise |
_, extension = os.path.splitext(source) |
if extension == '.strings': |
copy_strings_file(source, dest) |
return |
- shutil.copy(source, dest) |
+ # Strip trailing slashes on the source so rsync copies the source as a |
+ # directory. |
+ source = source.rstrip('/') |
+ |
+ subprocess.check_call( |
+ ['rsync', '--recursive', '--perms', '--links', source, dest]) |
def main(): |