diff mbox series

BootLinuxConsoleTest: Let extract_from_deb handle various compressions

Message ID 20190302215454.6189-1-philmd@redhat.com (mailing list archive)
State New, archived
Headers show
Series BootLinuxConsoleTest: Let extract_from_deb handle various compressions | expand

Commit Message

Philippe Mathieu-Daudé March 2, 2019, 9:54 p.m. UTC
Debian binary package format supports various compressions.

Per man deb(5):

  NAME
    deb - Debian binary package format

  FORMAT
    ...
    The third, last required member is named data.tar.  It contains the
    filesystem as a tar archive, either not compressed (supported since
    dpkg 1.10.24), or compressed with gzip (with .gz extension),
    xz (with .xz extension, supported since dpkg 1.15.6),
    bzip2 (with .bz2 extension, supported since dpkg 1.10.24) or
    lzma (with .lzma extension, supported since dpkg 1.13.25).

List the archive files to have the 3rd name with the correct extension.

The method avocado.utils.archive.extract() will handle the different
compression format for us.

Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
Based-on: 20190221005753.27955-15-crosa@redhat.com

 tests/acceptance/boot_linux_console.py | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

Comments

Cleber Rosa March 12, 2019, 6:51 p.m. UTC | #1
On Sat, Mar 02, 2019 at 10:54:54PM +0100, Philippe Mathieu-Daudé wrote:
> Debian binary package format supports various compressions.
> 
> Per man deb(5):
> 
>   NAME
>     deb - Debian binary package format
> 
>   FORMAT
>     ...
>     The third, last required member is named data.tar.  It contains the
>     filesystem as a tar archive, either not compressed (supported since
>     dpkg 1.10.24), or compressed with gzip (with .gz extension),
>     xz (with .xz extension, supported since dpkg 1.15.6),
>     bzip2 (with .bz2 extension, supported since dpkg 1.10.24) or
>     lzma (with .lzma extension, supported since dpkg 1.13.25).
>

The man page does seem to indicate that ordering is respected (and not
that it just happens to be three of them).  I'm asking myself if it's
worth it to be extra paranoid an look for a "data.*" pattern anyway...

> List the archive files to have the 3rd name with the correct extension.
> 
> The method avocado.utils.archive.extract() will handle the different
> compression format for us.
>

Technically it's a function and not a method in Python lingo.

> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> ---
> Based-on: 20190221005753.27955-15-crosa@redhat.com
> 
>  tests/acceptance/boot_linux_console.py | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/tests/acceptance/boot_linux_console.py b/tests/acceptance/boot_linux_console.py
> index d866886067..b62b70bbde 100644
> --- a/tests/acceptance/boot_linux_console.py
> +++ b/tests/acceptance/boot_linux_console.py
> @@ -58,8 +58,9 @@ class BootLinuxConsole(Test):
>          """
>          cwd = os.getcwd()
>          os.chdir(self.workdir)
> -        process.run("ar x %s data.tar.gz" % deb)
> -        archive.extract("data.tar.gz", self.workdir)
> +        file_path = process.system_output("ar t %s" % deb).split()[2].decode()

I'd recommend:

   file_path = process.run("ar t %s" % deb).stdout_text.split()[2]

Because of the more consistent style, and the lack of the explicit
decode().

> +        process.run("ar x %s %s" % (deb, file_path))
> +        archive.extract(file_path, self.workdir)
>          os.chdir(cwd)
>          return self.workdir + path
>  
> -- 
> 2.20.1
> 
> 

With and without the suggestions:

Tested-by: Cleber Rosa <crosa@redhat.com>
diff mbox series

Patch

diff --git a/tests/acceptance/boot_linux_console.py b/tests/acceptance/boot_linux_console.py
index d866886067..b62b70bbde 100644
--- a/tests/acceptance/boot_linux_console.py
+++ b/tests/acceptance/boot_linux_console.py
@@ -58,8 +58,9 @@  class BootLinuxConsole(Test):
         """
         cwd = os.getcwd()
         os.chdir(self.workdir)
-        process.run("ar x %s data.tar.gz" % deb)
-        archive.extract("data.tar.gz", self.workdir)
+        file_path = process.system_output("ar t %s" % deb).split()[2].decode()
+        process.run("ar x %s %s" % (deb, file_path))
+        archive.extract(file_path, self.workdir)
         os.chdir(cwd)
         return self.workdir + path