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