Patchwork scripts/cp-noerror: Copy the code from shutils.copytree, update not to error if the mkdir fails

login
register
mail settings
Submitter Richard Purdie
Date Oct. 5, 2012, 3:13 p.m.
Message ID <1349449982.15658.36.camel@ted>
Download mbox | patch
Permalink /patch/37821/
State Accepted
Commit 08542718504d2b53d140a9e6be73c84cc0e047e0
Headers show

Comments

Richard Purdie - Oct. 5, 2012, 3:13 p.m.
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
---

Patch

diff --git a/scripts/cp-noerror b/scripts/cp-noerror
index fdb3d2d..f0cd243 100755
--- a/scripts/cp-noerror
+++ b/scripts/cp-noerror
@@ -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