diff mbox series

[v2] scripts/archive-source: Use GNU tar on Darwin

Message ID 20221209113342.61053-1-philmd@linaro.org
State New
Headers show
Series [v2] scripts/archive-source: Use GNU tar on Darwin | expand

Commit Message

Philippe Mathieu-Daudé Dec. 9, 2022, 11:33 a.m. UTC
When using the archive-source.sh script on Darwin we get:

  tar: Option --concatenate is not supported
  Usage:
    List:    tar -tf <archive-filename>
    Extract: tar -xf <archive-filename>
    Create:  tar -cf <archive-filename> [filenames...]
    Help:    tar --help

'tar' default to the BSD implementation:

  $ tar --version
  bsdtar 3.5.3 - libarchive 3.5.3 zlib/1.2.11 liblzma/5.0.5 bz2lib/1.0.8

Try to use the GNU implementation if it is available (from homebrew).

Suggested-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
Supersedes: <20221208162051.29509-1-philmd@linaro.org>
---
 scripts/archive-source.sh | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Philippe Mathieu-Daudé Jan. 12, 2023, 11:58 a.m. UTC | #1
ping?

On 9/12/22 12:33, Philippe Mathieu-Daudé wrote:
> When using the archive-source.sh script on Darwin we get:
> 
>    tar: Option --concatenate is not supported
>    Usage:
>      List:    tar -tf <archive-filename>
>      Extract: tar -xf <archive-filename>
>      Create:  tar -cf <archive-filename> [filenames...]
>      Help:    tar --help
> 
> 'tar' default to the BSD implementation:
> 
>    $ tar --version
>    bsdtar 3.5.3 - libarchive 3.5.3 zlib/1.2.11 liblzma/5.0.5 bz2lib/1.0.8
> 
> Try to use the GNU implementation if it is available (from homebrew).
> 
> Suggested-by: Daniel P. Berrangé <berrange@redhat.com>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> Supersedes: <20221208162051.29509-1-philmd@linaro.org>
> ---
>   scripts/archive-source.sh | 3 ++-
>   1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/scripts/archive-source.sh b/scripts/archive-source.sh
> index 23e042dacd..e3d0c23fe5 100755
> --- a/scripts/archive-source.sh
> +++ b/scripts/archive-source.sh
> @@ -18,6 +18,7 @@ if test $# -lt 1; then
>       error "Usage: $0 <output tarball>"
>   fi
>   
> +test $(uname -s) = "Darwin" && tar=gtar || tar=tar
>   tar_file=$(realpath "$1")
>   sub_tdir=$(mktemp -d "${tar_file%.tar}.sub.XXXXXXXX")
>   sub_file="${sub_tdir}/submodule.tar"
> @@ -67,7 +68,7 @@ for sm in $submodules; do
>       esac
>       (cd $sm; git archive --format tar --prefix "$sm/" $(tree_ish)) > "$sub_file"
>       test $? -ne 0 && error "failed to archive submodule $sm ($smhash)"
> -    tar --concatenate --file "$tar_file" "$sub_file"
> +    $tar --concatenate --file "$tar_file" "$sub_file"
>       test $? -ne 0 && error "failed append submodule $sm to $tar_file"
>   done
>   exit 0
Thomas Huth Jan. 12, 2023, 12:07 p.m. UTC | #2
On 12/01/2023 12.58, Philippe Mathieu-Daudé wrote:
> ping?

Who's supposed to take this?

> On 9/12/22 12:33, Philippe Mathieu-Daudé wrote:
>> When using the archive-source.sh script on Darwin we get:
>>
>>    tar: Option --concatenate is not supported
>>    Usage:
>>      List:    tar -tf <archive-filename>
>>      Extract: tar -xf <archive-filename>
>>      Create:  tar -cf <archive-filename> [filenames...]
>>      Help:    tar --help
>>
>> 'tar' default to the BSD implementation:
>>
>>    $ tar --version
>>    bsdtar 3.5.3 - libarchive 3.5.3 zlib/1.2.11 liblzma/5.0.5 bz2lib/1.0.8
>>
>> Try to use the GNU implementation if it is available (from homebrew).
>>
>> Suggested-by: Daniel P. Berrangé <berrange@redhat.com>
>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>> ---
>> Supersedes: <20221208162051.29509-1-philmd@linaro.org>
>> ---
>>   scripts/archive-source.sh | 3 ++-
>>   1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/scripts/archive-source.sh b/scripts/archive-source.sh
>> index 23e042dacd..e3d0c23fe5 100755
>> --- a/scripts/archive-source.sh
>> +++ b/scripts/archive-source.sh
>> @@ -18,6 +18,7 @@ if test $# -lt 1; then
>>       error "Usage: $0 <output tarball>"
>>   fi
>> +test $(uname -s) = "Darwin" && tar=gtar || tar=tar

I wonder whether this script works on other *BSDs ... maybe it would be 
better to test "tar --version | grep -q GNU" to make this even work on 
non-Darwin systems where "tar" is not GNU's tar?

  Thomas


>>   tar_file=$(realpath "$1")
>>   sub_tdir=$(mktemp -d "${tar_file%.tar}.sub.XXXXXXXX")
>>   sub_file="${sub_tdir}/submodule.tar"
>> @@ -67,7 +68,7 @@ for sm in $submodules; do
>>       esac
>>       (cd $sm; git archive --format tar --prefix "$sm/" $(tree_ish)) > 
>> "$sub_file"
>>       test $? -ne 0 && error "failed to archive submodule $sm ($smhash)"
>> -    tar --concatenate --file "$tar_file" "$sub_file"
>> +    $tar --concatenate --file "$tar_file" "$sub_file"
>>       test $? -ne 0 && error "failed append submodule $sm to $tar_file"
>>   done
>>   exit 0
>
Daniel P. Berrangé Jan. 12, 2023, 12:16 p.m. UTC | #3
On Thu, Jan 12, 2023 at 01:07:08PM +0100, Thomas Huth wrote:
> On 12/01/2023 12.58, Philippe Mathieu-Daudé wrote:
> > ping?
> 
> Who's supposed to take this?
> 
> > On 9/12/22 12:33, Philippe Mathieu-Daudé wrote:
> > > When using the archive-source.sh script on Darwin we get:
> > > 
> > >    tar: Option --concatenate is not supported
> > >    Usage:
> > >      List:    tar -tf <archive-filename>
> > >      Extract: tar -xf <archive-filename>
> > >      Create:  tar -cf <archive-filename> [filenames...]
> > >      Help:    tar --help
> > > 
> > > 'tar' default to the BSD implementation:
> > > 
> > >    $ tar --version
> > >    bsdtar 3.5.3 - libarchive 3.5.3 zlib/1.2.11 liblzma/5.0.5 bz2lib/1.0.8
> > > 
> > > Try to use the GNU implementation if it is available (from homebrew).
> > > 
> > > Suggested-by: Daniel P. Berrangé <berrange@redhat.com>
> > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> > > ---
> > > Supersedes: <20221208162051.29509-1-philmd@linaro.org>
> > > ---
> > >   scripts/archive-source.sh | 3 ++-
> > >   1 file changed, 2 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/scripts/archive-source.sh b/scripts/archive-source.sh
> > > index 23e042dacd..e3d0c23fe5 100755
> > > --- a/scripts/archive-source.sh
> > > +++ b/scripts/archive-source.sh
> > > @@ -18,6 +18,7 @@ if test $# -lt 1; then
> > >       error "Usage: $0 <output tarball>"
> > >   fi
> > > +test $(uname -s) = "Darwin" && tar=gtar || tar=tar
> 
> I wonder whether this script works on other *BSDs ... maybe it would be
> better to test "tar --version | grep -q GNU" to make this even work on
> non-Darwin systems where "tar" is not GNU's tar?

Perhaps something like

  tar=$(which gtar >/dev/null 2>&1 && echo gtar || echo tar)
  $tar --version | grep GNU >/dev/null 2>&1 ||  { echo "$tar does not appear to be GNU tar" ; exit 1 }


With regards,
Daniel
Philippe Mathieu-Daudé Jan. 12, 2023, 12:20 p.m. UTC | #4
On 12/1/23 13:07, Thomas Huth wrote:
> On 12/01/2023 12.58, Philippe Mathieu-Daudé wrote:
>> ping?
> 
> Who's supposed to take this?

Alex Bennée? I'll precise in v3.

>> On 9/12/22 12:33, Philippe Mathieu-Daudé wrote:
>>> When using the archive-source.sh script on Darwin we get:
>>>
>>>    tar: Option --concatenate is not supported
>>>    Usage:
>>>      List:    tar -tf <archive-filename>
>>>      Extract: tar -xf <archive-filename>
>>>      Create:  tar -cf <archive-filename> [filenames...]
>>>      Help:    tar --help
>>>
>>> 'tar' default to the BSD implementation:
>>>
>>>    $ tar --version
>>>    bsdtar 3.5.3 - libarchive 3.5.3 zlib/1.2.11 liblzma/5.0.5 
>>> bz2lib/1.0.8
>>>
>>> Try to use the GNU implementation if it is available (from homebrew).
>>>
>>> Suggested-by: Daniel P. Berrangé <berrange@redhat.com>
>>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>>> ---
>>> Supersedes: <20221208162051.29509-1-philmd@linaro.org>
>>> ---
>>>   scripts/archive-source.sh | 3 ++-
>>>   1 file changed, 2 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/scripts/archive-source.sh b/scripts/archive-source.sh
>>> index 23e042dacd..e3d0c23fe5 100755
>>> --- a/scripts/archive-source.sh
>>> +++ b/scripts/archive-source.sh
>>> @@ -18,6 +18,7 @@ if test $# -lt 1; then
>>>       error "Usage: $0 <output tarball>"
>>>   fi
>>> +test $(uname -s) = "Darwin" && tar=gtar || tar=tar
> 
> I wonder whether this script works on other *BSDs ... maybe it would be 
> better to test "tar --version | grep -q GNU" to make this even work on 
> non-Darwin systems where "tar" is not GNU's tar?

Clever, I like it!
diff mbox series

Patch

diff --git a/scripts/archive-source.sh b/scripts/archive-source.sh
index 23e042dacd..e3d0c23fe5 100755
--- a/scripts/archive-source.sh
+++ b/scripts/archive-source.sh
@@ -18,6 +18,7 @@  if test $# -lt 1; then
     error "Usage: $0 <output tarball>"
 fi
 
+test $(uname -s) = "Darwin" && tar=gtar || tar=tar
 tar_file=$(realpath "$1")
 sub_tdir=$(mktemp -d "${tar_file%.tar}.sub.XXXXXXXX")
 sub_file="${sub_tdir}/submodule.tar"
@@ -67,7 +68,7 @@  for sm in $submodules; do
     esac
     (cd $sm; git archive --format tar --prefix "$sm/" $(tree_ish)) > "$sub_file"
     test $? -ne 0 && error "failed to archive submodule $sm ($smhash)"
-    tar --concatenate --file "$tar_file" "$sub_file"
+    $tar --concatenate --file "$tar_file" "$sub_file"
     test $? -ne 0 && error "failed append submodule $sm to $tar_file"
 done
 exit 0