diff mbox series

[v12,1/7] path.py: add support for ACLs and all additional attributes

Message ID 20230804084315.55768-1-p.lobacz@welotec.com
State New
Headers show
Series [v12,1/7] path.py: add support for ACLs and all additional attributes | expand

Commit Message

Piotr Łobacz Aug. 4, 2023, 8:43 a.m. UTC
Extend `tar` command inside copytree() and copyhardlinktree() functions,
with additional parameters, in order to support ACLs and xattr. The posix
format doesn't need to be set in here, as GNU tar switches to it whenewer
is uses --acls and/or --xattrs parameters.

Additionaly change preservation of additional attributes for `cp` command
to all (meaning mode, ownership, timestamps etc.) not only xattrs, which
were previously.

Signed-off-by: Piotr Łobacz <p.lobacz@welotec.com>
---
 meta/lib/oe/path.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

Comments

Alexandre Belloni Aug. 12, 2023, 1:03 p.m. UTC | #1
Hello,

This went through the autobuilder fine until yesterday:

https://autobuilder.yoctoproject.org/typhoon/#/builders/117/builds/3349/steps/12/logs/stdio

https://autobuilder.yocto.io/pub/repro-fail/oe-reproducible-20230811-vwiija9k/packages/diff-html/

On 04/08/2023 10:43:09+0200, Piotr Łobacz wrote:
> Extend `tar` command inside copytree() and copyhardlinktree() functions,
> with additional parameters, in order to support ACLs and xattr. The posix
> format doesn't need to be set in here, as GNU tar switches to it whenewer
> is uses --acls and/or --xattrs parameters.
> 
> Additionaly change preservation of additional attributes for `cp` command
> to all (meaning mode, ownership, timestamps etc.) not only xattrs, which
> were previously.
> 
> Signed-off-by: Piotr Łobacz <p.lobacz@welotec.com>
> ---
>  meta/lib/oe/path.py | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/meta/lib/oe/path.py b/meta/lib/oe/path.py
> index 0dc8f172d5..56e8e214ac 100644
> --- a/meta/lib/oe/path.py
> +++ b/meta/lib/oe/path.py
> @@ -92,7 +92,7 @@ def copytree(src, dst):
>      # This way we also preserve hardlinks between files in the tree.
>  
>      bb.utils.mkdirhier(dst)
> -    cmd = "tar --xattrs --xattrs-include='*' -cf - -S -C %s -p . | tar --xattrs --xattrs-include='*' -xf - -C %s" % (src, dst)
> +    cmd = "tar --acls --xattrs --xattrs-include='*' -cf - -S -C %s -p . | tar --acls --xattrs --xattrs-include='*' -xf - -C %s" % (src, dst)
>      subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)
>  
>  def copyhardlinktree(src, dst):
> @@ -119,7 +119,7 @@ def copyhardlinktree(src, dst):
>      if (canhard):
>          # 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 --xattrs --xattrs-include='*' -cf - -S -C %s -p --no-recursion --files-from - | tar --xattrs --xattrs-include='*' -xhf - -C %s" % (src, src, dst)
> +        cmd = "cd %s; find . -type d -print | tar --acls --xattrs --xattrs-include='*' -cf - -S -C %s -p --no-recursion --files-from - | tar --acls --xattrs --xattrs-include='*' -xhf - -C %s" % (src, src, dst)
>          subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)
>          source = ''
>          if os.path.isdir(src):
> @@ -130,7 +130,7 @@ def copyhardlinktree(src, dst):
>          else:
>              source = src
>              s_dir = os.getcwd()
> -        cmd = 'cp -afl --preserve=xattr %s %s' % (source, os.path.realpath(dst))
> +        cmd = 'cp -afl --preserve=all %s %s' % (source, os.path.realpath(dst))
>          subprocess.check_output(cmd, shell=True, cwd=s_dir, stderr=subprocess.STDOUT)
>      else:
>          copytree(src, dst)
> -- 
> 2.34.1
> 

> 
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#185512): https://lists.openembedded.org/g/openembedded-core/message/185512
> Mute This Topic: https://lists.openembedded.org/mt/100542715/3617179
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [alexandre.belloni@bootlin.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
Piotr Łobacz Aug. 12, 2023, 1:39 p.m. UTC | #2
Hi Alexandre,
Again some stupid difference between gnu and posix...

Can you leave me this revision so i will test it?

BR
Piotr

Wysyłane z aplikacji Outlook dla systemu iOS<https://aka.ms/o0ukef>
diff mbox series

Patch

diff --git a/meta/lib/oe/path.py b/meta/lib/oe/path.py
index 0dc8f172d5..56e8e214ac 100644
--- a/meta/lib/oe/path.py
+++ b/meta/lib/oe/path.py
@@ -92,7 +92,7 @@  def copytree(src, dst):
     # This way we also preserve hardlinks between files in the tree.
 
     bb.utils.mkdirhier(dst)
-    cmd = "tar --xattrs --xattrs-include='*' -cf - -S -C %s -p . | tar --xattrs --xattrs-include='*' -xf - -C %s" % (src, dst)
+    cmd = "tar --acls --xattrs --xattrs-include='*' -cf - -S -C %s -p . | tar --acls --xattrs --xattrs-include='*' -xf - -C %s" % (src, dst)
     subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)
 
 def copyhardlinktree(src, dst):
@@ -119,7 +119,7 @@  def copyhardlinktree(src, dst):
     if (canhard):
         # 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 --xattrs --xattrs-include='*' -cf - -S -C %s -p --no-recursion --files-from - | tar --xattrs --xattrs-include='*' -xhf - -C %s" % (src, src, dst)
+        cmd = "cd %s; find . -type d -print | tar --acls --xattrs --xattrs-include='*' -cf - -S -C %s -p --no-recursion --files-from - | tar --acls --xattrs --xattrs-include='*' -xhf - -C %s" % (src, src, dst)
         subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)
         source = ''
         if os.path.isdir(src):
@@ -130,7 +130,7 @@  def copyhardlinktree(src, dst):
         else:
             source = src
             s_dir = os.getcwd()
-        cmd = 'cp -afl --preserve=xattr %s %s' % (source, os.path.realpath(dst))
+        cmd = 'cp -afl --preserve=all %s %s' % (source, os.path.realpath(dst))
         subprocess.check_output(cmd, shell=True, cwd=s_dir, stderr=subprocess.STDOUT)
     else:
         copytree(src, dst)