Faré wrote:
BEWARE! ENSURE-PATHNAME uses PARSE-UNIX-NAMESTRING, not PARSE-NAMESTRING. In this case, you want PARSE-NAMESTRING (possibly through PATHNAME).
(describe (uiop/pathname:ensure-pathname "home:lisp;asdf;"))
#P"home:lisp;asdf;" is a pathname, with the following components: NAME = "home:lisp;asdf;" VERSION = :NEWEST
Thanks. But isn't this a bug:
(uiop/pathname:ensure-pathname "home:lisp;asdf;" :namestring :lisp) #P"home:lisp;asdf;" [10]> (describe *)
#P"home:lisp;asdf;" is a pathname, with the following components: NAME = "home:lisp;asdf;"
That looks like a bug indeed, but after I (setf (logical-pathname-translations "home") '(("**;*.*" #p"/home/tunes/**/*.*")))
it's working for me: (describe (uiop/pathname:ensure-pathname "home:lisp;asdf;" :namestring :lisp))
#P"HOME:LISP;ASDF;" is a portable pathname, with the following components: HOST = "HOME" DIRECTORY = (:ABSOLUTE "LISP" "ASDF")
It seems to me that either probe-asd or sysdef-central-registry-search before it calls probe-asd should indeed call ensure-pathname somehow and fails to, and that that's the problem.
Here I have explicitly told UIOP & clisp that the namestring is a LISP namestring, so it should see this as a valid logical-pathname, not garble the logical pathname into a PATHNAME's name field.
That sounds like a bug indeed; however, it doesn't happen on my recent checkout of CLISP (on Linux x64, but I suppose this part of the clisp code is portable.)
This seems to have to do with an oddity (I suspect it's conforming, strictly speaking, but it's awkward at best, and impossible at worst) in clisp's interpretation of PARSE-NAMESTRING for logical pathnames.
If parse-namestring was called, it's probably not conforming to not parse the : as a host separator. If parse-namestring was not called, it's a bug in ASDF and/or UIOP, and trace will hopefully tell you as much.
If I pass the :lisp value to the NAMESTRING, ENSURE-PATHNAME *does* call PARSE-NAMESTRING.
Yes, looking at the spec for PARSE-NAMESTRING, this is a bug:
"If host is nil and thing is a syntactically valid logical pathname namestring containing an explicit host, then it is parsed as a logical pathname namestring."
So this is a clisp fail, 2.49 on Mac OS X (from Mac Ports).
If it works for you, perhaps this has already been fixed. I don't have time to build and run clisp from the repo.