On Mar 11, 2010, at 9:37 AM, Alessio Stalla wrote:
[…]
If you look at the contents of a jar file via java.util.ZipFile.entries(), all the hierarchal entries do not have an initial slash, so are best expressed as relative pathnames.
True, they don't have an initial slash, but they're all relative to the root of the jar i.e. they are absolute, to my understanding. If they were relative, they could be interpreted differently depending to some reference directory.
Since we control the behavior of Pathname completely as a Java primitive, we can change the underlying implementation to properly treat the :ABSOLUTE component of the DIRECTORY list by special-casing the searching/iteration of jar file contents. This change would preclude the distinction between a JAR that has entries with an initial '/' and those without, but we could pave over those differences via some amount of if/thens sprinkled throughout the code.
But before digging everything up again and testing it, I'd like to understand what we want to accomplish here.
Since MERGE-PATHNAMES currently has special semantics with jar pathnames already, we wouldn't really gain any useful behavior that I can immediately think of.
Would you propose that the namestring of a jar pathname remain "jar:URL!/foo/bar.lisp" or would it now become "jar:URL!//foo/bar.lisp" (which would break the behavior documented in java.net.JarURLConnection)?
So, if y'all really want to change the :RELATIVE to :ABSOLUTE here, please convince me, as I currently a net negative in this approach.
I've updated [the Pathname implementation notes][1] to explain the current behavior better.
[1]: http://code.google.com/p/abcl-dynamic-install/source/detail?r=dcf06e25c05c80... --
"A screaming comes across the sky. It has happened before, but there is nothing to compare to it now."