scripts/cp-noerror: Copy the code from shutils.copytree, update not to error if the...
authorRichard Purdie <richard.purdie@linuxfoundation.org>
Fri, 5 Oct 2012 15:09:02 +0000 (15:09 +0000)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Thu, 18 Oct 2012 11:13:46 +0000 (12:13 +0100)
(From OE-Core rev: 08542718504d2b53d140a9e6be73c84cc0e047e0)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
scripts/cp-noerror

index fdb3d2d..f0cd243 100755 (executable)
@@ -5,10 +5,38 @@
 #
 
 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:
+            shutil.copy2(srcname, dstname)
+        # catch the Error from the recursive copytree so that we can
+        # continue with other files
+        except shutil.Error, err:
+            errors.extend(err.args[0])
+        except EnvironmentError, why:
+            errors.append((srcname, dstname, str(why)))
+    try:
+        shutil.copystat(src, dst)
+    except OSError, why:
+        errors.extend((src, dst, str(why)))
+    if errors:
+        raise shutil.Error, errors
+
 try:
-    shutil.copytree(sys.argv[1], sys.argv[2])
+    copytree(sys.argv[1], sys.argv[2])
 except shutil.Error:
    pass