git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "René Scharfe" <rene.scharfe@lsrfire.ath.cx>
To: Rogan Dawes <lists@dawes.za.net>
Cc: Git Mailing List <git@vger.kernel.org>
Subject: Re: git-archive loses path info when opened with Winzip?
Date: Mon, 31 Mar 2008 21:47:26 +0200	[thread overview]
Message-ID: <47F13FCE.1010502@lsrfire.ath.cx> (raw)
In-Reply-To: <47F0D215.1060700@dawes.za.net>

Rogan Dawes schrieb:
> Hi folks,
> 
> I have noticed something strange with "git-archive"-created tarballs. It
> seems that Winzip has trouble parsing the paths for certain files
> correctly.
> 
> The symptom is that Winzip shows some files as having been created at
> the "top level" of the zip, without any path at all, while the rest of
> the files are within their correct directory structure.
> 
> I have attached a screenshot of a gitweb-created snapshot opened in
> Winzip 9.0 SR1 (build 6224), but it apparently happens in other (more
> recent) versions of Winzip as well.

Oh, well.

Each file in a tar archive has at least a 512-byte header.  This header
contains a name field, 100 bytes long.  When it became clear that it
would be nice to support file names longer than 100 characters, another
155 bytes in the header was designated as a prefix field (see tar.h).

The full file name is constructed by concatenating the prefix, a path
separator (/) and the name field -- if a prefix exists.  That's how
POSIX defines it, anyway.  Apparently WinZip ignores the prefix field.

7-Zip honours the prefix field, by the way.  But it doesn't understand
POSIX extended headers; I suspect that WinZip doesn't, too.

That probably makes the easiest way to fix this problem at git's end a
non-starter.  Git-archive tries to:

   1. fit the path in the name field (up to 100 bytes),
   2. in the prefix and name fields (up to 255 bytes),
   3. or if even that isn't enough it stores it in an extended header.

Now we could simply make git-archive forget the second option -- but
since support for POSIX extended headers is even more scarce, this
probably won't help.

The second option is to stop encoding long paths using the POSIX method
and start doing it e.g. the GNU way -- or some other tar dialect that is
supported more widely than the official one.  NOTE: I haven't checked if
WinZip understands the GNU extensions; it's possible that this problem
can't be solved on git's side at all!

In any case, there are better options:

  - Don't use long file names (just kidding :).
  - Use a tar extractor that understands the prefix field, e.g. 7-Zip.
  - Use zip (but beware of its 65535 bytes name length limit! ;).
  - File a bug report with WinZip.

René

  reply	other threads:[~2008-03-31 19:57 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-31 11:59 git-archive loses path info when opened with Winzip? Rogan Dawes
2008-03-31 19:47 ` René Scharfe [this message]
2008-03-31 20:09   ` Rogan Dawes

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=47F13FCE.1010502@lsrfire.ath.cx \
    --to=rene.scharfe@lsrfire.ath.cx \
    --cc=git@vger.kernel.org \
    --cc=lists@dawes.za.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).