Note: file is "hidden" if it's name starts with dot (.)

sstate.bbclass uses "copyhardlinktree" function to install sstate cache
content. Function "copyhardlinktree" uses "cp" command line which fail on copy
directories with hidden files only.  As a result folder containing only hidden 
files
cannot be installed from sstate cache.

"cp" source file glob argument has been changed from
  ./.??* ./*
to
  <source>/./

Steps for reproduce:

* Add next lines into some recipe ...

    inherit deploy
    do_deploy() {
        touch ${DEPLOYDIR}/.hidden
    }
    addtask deploy
* ... and try to build it

Error like next will occur:

    Exception: subprocess.CalledProcessError: Command 'cp -afl --preserve=xattr 
./.??* ./* /path/to/deploy/images/machine' returned non-zero exit status 1.

    Subprocess output:
    cp: cannot stat './*': No such file or directory

Signed-off-by: Ivan Efimov <i.efi...@inango-systems.com>
---
 meta/lib/oe/path.py | 12 +++---------
 1 file changed, 3 insertions(+), 9 deletions(-)

diff --git a/meta/lib/oe/path.py b/meta/lib/oe/path.py
index fa209b9795..49e13225d0 100644
--- a/meta/lib/oe/path.py
+++ b/meta/lib/oe/path.py
@@ -104,17 +104,11 @@ def copyhardlinktree(src, dst):
         # writers try and create a directory at the same time
         cmd = "cd %s; find . -type d -print | tar --xattrs 
--xattrs-include='*' -cf - -S -C %s -p --no-recursion --files-from - | tar 
--xattrs --xattrs-include='*' -xhf - -C %s" % (src, src, dst)
         subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)
-        source = ''
+        source = src
         if os.path.isdir(src):
-            if len(glob.glob('%s/.??*' % src)) > 0:
-                source = './.??* '
-            source += './*'
-            s_dir = src
-        else:
-            source = src
-            s_dir = os.getcwd()
+            source += '/./'
         cmd = 'cp -afl --preserve=xattr %s %s' % (source, 
os.path.realpath(dst))
-        subprocess.check_output(cmd, shell=True, cwd=s_dir, 
stderr=subprocess.STDOUT)
+        subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)
     else:
         copytree(src, dst)
 
-- 
2.17.1

-- 
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Reply via email to