As a result of the failure I just fixed in r13105, I tried to understand more broadly about our interaction with the URL/URI/File Java universe.
What I found:
* We're constantly converting URL->URI->file-based pathname * When converting an absolute URI to a file object using the File(URI uri) constructor for file: URIs, the process strips the leading slash that preceeds the windows drive letter * We can't "just" convert paths to URIs by doing ["file:" + path], because that's not a valid URI. However, it seems that we should be able to do [new URI("file", null, path, null, null);] as it seems that the URI does its own encoding, *if* we use the multi-argument constructors. Any single-string should be pre-encoded. * We seem to be required to support relative URIs in a non-standard way (like "jar:file:baz.jar"); the standards do allow relative path URIs, but those are requred to be without a schema.
All of the above has me thinking:
1. Should we separate the different types of supported pathnames into separate Java classes, with a single entry point (factory?) 2. Would it make sense to separate internal representation from external presentation? Hopefully, this way we can circumvent the fact that the URI<->File conversion really wants absolute paths, while the external presentation is relative. 3. It seems that any URL/URI->path conversion should go through the normalization routines defined by the File(URI uri) constructor, because it seems to do the right thing with URI's - even on Windows.
Comments?
Regards,
Erik.
armedbear-devel@common-lisp.net