Thread (5 messages) flat view 5 messages, 3 authors, 2016-06-15

Re: tar on Mac does not like empty tar from git archive

From: René Scharfe <hidden>
Date: 2016-06-15 22:56:45

Am 08.04.2013 23:05, schrieb Jeff King:
On Mon, Apr 08, 2013 at 02:36:05PM -0400, BJ Hargrave wrote:
quoted
Git 1.8.2.1 includes commit bd54cf17 - archive: handle commits with an
empty tree

Test 2 of t5004-archive-corner-cases, "tar archive of empty tree is
empty", fails on Mac OS X 10.8.3 (with XCode 4.6.1) since the tar
command exits with return code 1 on the generated  tar file.
Hmm. So I guess the question is: do we need to work around this in the
test for platforms that do not like empty tar files, or are the empty
tarfiles we are making wrong somehow?
quoted
tar --version
bsdtar 2.8.3 - libarchive 2.8.3

It appears that bsdtar does not like the empty tar files created by
git archive. An empty tar file created by bsdtar is accepted.

tar cT /dev/null | tar t; echo $?
0
That makes me think the latter ("we are wrong"). I don't have my OS X
box handy; can you provide a sample empty tarfile that it creates?
libarchive (on which bsdtar is based) doesn't like extended pax headers
at the end of archives.  Here's the relevant source file:

https://github.com/libarchive/libarchive/blob/master/libarchive/archive_read_support_format_tar.c

tar_read_header() calls header_pax_global() to handle a global pax
header, which in turn calls tar_read_header() again to fetch the next
header.  If it reaches the end of the archive then err is set to
ARCHIVE_EOF and "Damaged tar archive" is reported at the end of this
function.

I tried come up with a small patch that convinces it to ignore such a
condition, but it's apparently not as easy as it looks -- I just made
bsdtar report even more obscure errors.  Will look deeper into it
later this week.

René
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help