I get to
Test logical pathnames in source-registry, recursive
and ACL goes away seemingly forever.
The reason, I believe, is that this:
#+allegro #.(asdf::pathname-root #p"ASDF:")
returns "/" for me.
When I look, I see that pathname-root is losing the host name somehow:
CL-USER> (pathname-host #P"HOME:") "HOME" CL-USER> (pathname-host (pathname-root #P"HOME:")) NIL
As far as I can tell messing around in the REPL, it's the specification of both :defaults #P"HOME" *and* :host NIL when MAKE-PATHNAME* calls MAKE-PATHNAME that does the damage: on ACL the :host NIL seems to smash the value for :host that would come from the defaults:
CL-USER> (make-pathname :defaults #P"HOME:" :name "foo" :type "lisp" :host nil) #P"foo.lisp" CL-USER> (make-pathname :defaults #P"HOME:" :name "foo" :type "lisp") #P"HOME:foo.lisp"
The ANSI spec for make-pathname says "After the components supplied explicitly by host, device, directory, name, type, and version are filled in, the merging rules used by merge-pathnames are used to fill in any unsupplied components from the defaults supplied by defaults."
So I think it's an acceptable interpretation that the :host field should be cleared in the return value of MAKE-PATHNAME.
Would it be possible to modify make-pathname* so that instead of passing defaults through to make-pathname as it does now, it would *unpack* the defaults argument into fields of the return value?
I will try some experiments.
cheers, r