[asdf-devel] bug in new ASDF
Robert Goldman
rpgoldman at sift.info
Mon Jul 13 17:02:01 UTC 2009
Robert Goldman wrote:
> I see the following when I try to load an asdf system now:
>
> Error loading #P"/Users/rpg/clinit.cl":
> While searching for system `asdf-context`: `(MERGE-PATHNAMES systems/
> /Users/rpg/lisp/asdf-install-systems/)`
> evaluated to `/Users/rpg/lisp/asdf-install-systems/systems/` which is
> not a directory.
>
> The problem with this error is that, in fact, that IS a directory:
>
> CL-USER(2): (probe-file "/Users/rpg/lisp/asdf-install-systems/systems/")
> #P"/Users/rpg/lisp/asdf-install-systems/systems/"
>
> I'm looking in sysdef-central-registry-search and the logic seems to be
> completely borked. It looks for a system definition and, if it doesn't
> find one, it assumes that the directory name is bad. I believe the
> logic should be:
>
> 1. Look at the directory and ensure that it exists.
>
> 2. If it does not exist, push it onto the bad list
>
> 3. Else merge in the system name and look for the system definition.
>
> The current logic merges in the system name first, so misdiagnoses.
>
> [I will now proceed to wrestle with git, which I am coming to loathe
> with a consuming hatred, in order to attempt to verify that my diagnosis
> is correct, and then send a patch. More soon.]
>
OK, I /have/ misdiagnosed this. The logic seems actually busted in
directory-pathname-p. The problem is that, at least on allegro, you can
get a valid directory pathname whose name component is neither NIL, nor
:unspecific, but "" (the empty string).
This seems like a place where wrestling with CL pathnames is very
unpleasant.... What I'd really like to do here is resolve the pathname
and just ask the bloody OS if this is a directory or not, instead of do
these kind of seemingly random flailings with the pathname object:
(defun directory-pathname-p (pathname)
(and (member (pathname-name pathname) (list nil :unspecific))
(member (pathname-type pathname) (list nil :unspecific))))
This will now have to be
(member (pathname-name pathname) (list nil "" :unspecific) :test 'equal)
which seems like it's metastasizing complexity...
More information about the asdf-devel
mailing list