summaryrefslogtreecommitdiffstats
path: root/meta/lib
diff options
context:
space:
mode:
Diffstat (limited to 'meta/lib')
-rw-r--r--meta/lib/oe/path.py41
1 files changed, 41 insertions, 0 deletions
diff --git a/meta/lib/oe/path.py b/meta/lib/oe/path.py
index 183f205757..d671ce9216 100644
--- a/meta/lib/oe/path.py
+++ b/meta/lib/oe/path.py
@@ -1,3 +1,5 @@
1import shutil
2
1def join(*paths): 3def join(*paths):
2 """Like os.path.join but doesn't treat absolute RHS specially""" 4 """Like os.path.join but doesn't treat absolute RHS specially"""
3 import os.path 5 import os.path
@@ -43,6 +45,45 @@ def format_display(path, metadata):
43 else: 45 else:
44 return rel 46 return rel
45 47
48
49class Error(EnvironmentError):
50 pass
51
52# Based on shutil.copytree but with features removed and
53# No fatal error is dst already exists
54# Handle symlinks that already exist
55def copytree(src, dst):
56 names = os.listdir(src)
57
58 bb.mkdirhier(dst)
59
60 errors = []
61 for name in names:
62 srcname = os.path.join(src, name)
63 dstname = os.path.join(dst, name)
64 try:
65 if os.path.islink(srcname):
66 linkto = os.readlink(srcname)
67 if os.path.lexists(dstname):
68 os.unlink(dstname)
69 os.symlink(linkto, dstname)
70 elif os.path.isdir(srcname):
71 copytree(srcname, dstname)
72 else:
73 shutil.copy2(srcname, dstname)
74 except (IOError, os.error), why:
75 errors.append((srcname, dstname, str(why)))
76 # catch the Error from the recursive copytree so that we can
77 # continue with other files
78 except Error, err:
79 errors.extend(err.args[0])
80 try:
81 shutil.copystat(src, dst)
82 except OSError, why:
83 errors.extend((src, dst, str(why)))
84 if errors:
85 raise Error, errors
86
46def remove(path): 87def remove(path):
47 """Equivalent to rm -f or rm -rf""" 88 """Equivalent to rm -f or rm -rf"""
48 import os, errno, shutil, glob 89 import os, errno, shutil, glob