mirror of
https://git.yoctoproject.org/poky
synced 2026-04-20 00:32:13 +02:00
oe/copy_buildsystem.py: dereference symlink
When there is a relative symlink in the layer, for example: symA -> ../out/of/layer/file symA will be invalid fater copied, it would be invalid from build time if it points to a relative path, and would be invalid after extracted the sdk if it points to a absolute py. Dereference symlink when copy will fix the problem. Use tar rather than shutil.copytree() to copy is because: 1) shutil.copytree(symlinks=Fasle) has bugs when dereference symlinks: https://bugs.python.org/issue21697 And Ubunutu 1404 doesn't upgrade python3 to fix the problem. 2) shutil.copytree(symlinks=False) raises errors when there is a invalid symlink, and tar just prints a warning, tar is preferred here since the real world is unpredicatable 3) tar is faster than shutil.copytree() as said by oe.path.copytree() So use tar to copy. (From OE-Core rev: f4d70bb0882eec4fb46cd942f2796fad57c72982) (From OE-Core rev: 51d3cab8aab593481be16cadaca6fcddbb64bc52) Signed-off-by: Robert Yang <liezhi.yang@windriver.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> Signed-off-by: Armin Kuster <akuster808@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
25fa4e9e8f
commit
698bbcad68
@@ -4,11 +4,15 @@ import stat
|
||||
import shutil
|
||||
|
||||
def _smart_copy(src, dest):
|
||||
import subprocess
|
||||
# smart_copy will choose the correct function depending on whether the
|
||||
# source is a file or a directory.
|
||||
mode = os.stat(src).st_mode
|
||||
if stat.S_ISDIR(mode):
|
||||
shutil.copytree(src, dest, symlinks=True, ignore=shutil.ignore_patterns('.git'))
|
||||
bb.utils.mkdirhier(dest)
|
||||
cmd = "tar --exclude='.git' --xattrs --xattrs-include='*' -chf - -C %s -p . \
|
||||
| tar --xattrs --xattrs-include='*' -xf - -C %s" % (src, dest)
|
||||
subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)
|
||||
else:
|
||||
shutil.copyfile(src, dest)
|
||||
shutil.copymode(src, dest)
|
||||
|
||||
Reference in New Issue
Block a user