summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoshua Lock <joshua.g.lock@intel.com>2016-07-27 12:04:42 +0100
committerJoshua Lock <joshua.g.lock@intel.com>2016-08-30 13:59:22 +0100
commit5e6cdf1c7dc3acf0c262a6c34318e4bb103a2129 (patch)
tree3fcd521c64f20e026aab91383f61a3028c8c1a94
parenta84389110546445be1bd190706cf54cc318207aa (diff)
downloadopenembedded-core-contrib-5e6cdf1c7dc3acf0c262a6c34318e4bb103a2129.tar.gz
openembedded-core-contrib-5e6cdf1c7dc3acf0c262a6c34318e4bb103a2129.tar.bz2
openembedded-core-contrib-5e6cdf1c7dc3acf0c262a6c34318e4bb103a2129.zip
oe.path: preserve xattr in copytree() and copyhardlinktree()
Pass appropriate options to tar invocations in copytree() and copyhardlinktree() to ensure that any extended attributes on the files are preserved during the copy. We have to drop the use cpio in "Copy-pass" mode in copyhardlinktree() because cpio doesn't support extended attributes on files. Instead we revert back to using cp with different patterns depending on whether or not the directory contains dot files. Signed-off-by: Joshua Lock <joshua.g.lock@intel.com>
-rw-r--r--meta/lib/oe/path.py11
1 files changed, 8 insertions, 3 deletions
diff --git a/meta/lib/oe/path.py b/meta/lib/oe/path.py
index 3c07df33d4..631c3b430c 100644
--- a/meta/lib/oe/path.py
+++ b/meta/lib/oe/path.py
@@ -65,7 +65,7 @@ def copytree(src, dst):
# This way we also preserve hardlinks between files in the tree.
bb.utils.mkdirhier(dst)
- cmd = 'tar -cf - -C %s -p . | tar -xf - -C %s' % (src, dst)
+ cmd = "tar --xattrs --xattrs-include='*' -cf - -C %s -p . | tar --xattrs --xattrs-include='*' -xf - -C %s" % (src, dst)
subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)
def copyhardlinktree(src, dst):
@@ -77,9 +77,14 @@ def copyhardlinktree(src, dst):
if (os.stat(src).st_dev == os.stat(dst).st_dev):
# Need to copy directories only with tar first since cp will error if two
# writers try and create a directory at the same time
- cmd = 'cd %s; find . -type d -print | tar -cf - -C %s -p --no-recursion --files-from - | tar -xf - -C %s' % (src, src, dst)
+ cmd = "cd %s; find . -type d -print | tar --xattrs --xattrs-include='*' -cf - -C %s -p --no-recursion --files-from - | tar --xattrs --xattrs-include='*' -xf - -C %s" % (src, src, dst)
subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)
- cmd = 'cd %s; find . -print0 | cpio --null -pdlu %s' % (src, dst)
+ if os.path.isdir(src):
+ import glob
+ if len(glob.glob('%s/.??*' % src)) > 0:
+ src = src + '/.??* '
+ src = src + '/*'
+ cmd = 'cp -afl --preserve=xattr %s %s' % (src, dst)
subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)
else:
copytree(src, dst)