On 2018-01-05, Torsten Curdt wrote:

>>>    TarArchiveEntry("C:\foo\bar") -> "/foo/bar"
>>>    TarArchiveEntry("D:\foo\bar") -> "/foo/bar"

>> "strip the drive letter" predates preserveLeadingSlashes

> Might be but I guess the only question is how to fix it without breaking
> too many things.
> I am not such a big fan of "preserveLeadingSlashes" either.

We inherited that from Ant and it really stems from a rather odd usecase
over there.

>> I could be convinced that we should only strip drive letters when we
>> don't preserve leading slashes either :-)

> IMO there is just no case at all when compress should strip drive letters.
> Sure it might be convenient (for some) but this is too much magic.

Again, I have no idea what tar ports do on Windows. By now all my
Windows instances run the Linux subsystem if I want to use tar.

This is what GNU tar does on Linux:

$ tar cf x.tar /tmp
tar: Removing leading `/' from member names

so us stripping leading slashes by default is completely in line with
what the CLI tar does.

>> Usually tar archives do not contain absolute path names at all.

> Which is also why the current constructors have a huge potential of
> ambiguity and misinterpretation IMO.

I've just now changed the javadocs to explicitly state how names get
constructed. I've left out documenting what happens to drive letters so
I don't need to change it depending on the outcome of this discussion :-)

> If it should be relative and you pass a File - relative to what?

It is File.getPath() so it is the string argument passed to the File
constructor.

> It might be worth checking with Windows users to see what the expected
> behaviour might be.

Allow me to point out that this has been the behavior of the class for
far more than ten years and no Windows user has ever complained.
Neither here nor in Ant land. This may indicate the behavior is not too
surprising. It may also indicate that most people really only want to
use relative file names regardless of platform.

> But even then - I still think silently stripping is the wrong thing to
> do.

The contract of tar archives is they contain relative path names. GNU
tar strips leading slashes both when creating archives and when
extracting archives who's entry names contain leading slashes. Sticking
with that contract I still believe we should remove leading slashes by
default - and removing the drive letters is the Windows equivalent of it
IMHO. That's why I suggest to keep the drive letter in the
preserveLeadingSlashes == true case.

Cheers

        Stefan

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to