[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