[asdf-devel] Bug in directory-files

Pascal Costanza pc at p-cos.net
Tue Nov 1 23:13:47 UTC 2011


On 1 Nov 2011, at 23:28, Robert Goldman wrote:

> On 11/1/11 Nov 1 -3:24 PM, Pascal Costanza wrote:
>> Hi,
>> 
>> There is a problem in the function directory-files (at least for LispWorks). Currently it is defined like this:
>> 
>> (defun* directory-files (directory &optional (pattern *wild-file*))
>>  (when (wild-pathname-p directory)
>>    (error "Invalid wild in ~S" directory))
>>  (unless (member (pathname-directory pattern) '(() (:relative)) :test 'equal)
>>    (error "Invalid file pattern ~S" pattern))
>>  (let ((entries (ignore-errors (directory* (merge-pathnames* pattern directory)))))
>>    (filter-logical-directory-results
>>     directory entries
>>     #'(lambda (f)
>>         (make-pathname :defaults directory :version (pathname-version f)
>>                        :name (pathname-name f) :type (pathname-type f))))))
>> 
>> However, passing (pathname-version f) unchanged makes make-pathname throw errors in most cases in LispWorks. It should rather say something like that:
>> 
>> (defun* directory-files (directory &optional (pattern *wild-file*))
>>  (when (wild-pathname-p directory)
>>    (error "Invalid wild in ~S" directory))
>>  (unless (member (pathname-directory pattern) '(() (:relative)) :test 'equal)
>>    (error "Invalid file pattern ~S" pattern))
>>  (let ((entries (ignore-errors (directory* (merge-pathnames* pattern directory)))))
>>    (filter-logical-directory-results
>>     directory entries
>>     #'(lambda (f)
>>         (make-pathname :defaults directory :version (unless (eq (pathname-version f) :unspecific)
>>                                                       (pathname-version f))
>>                        :name (pathname-name f) :type (pathname-type f))))))
>> 
>> …or something similar.
>> 
>> There is also a redundant 'u in the 'and form in filter-logical-directory-results.
> 
> Thanks for the bug report.  Would you also pass along please an example
> call that shows this error in LispWorks?  It would help us determine
> whether other implementations have similar issues.


I don't know exactly how to pass along an example, because it involves having a corresponding directory structure. You can construct an example by using a logical pathname for a directory and add it to a configuration. Current ASDF (>= 2.017) won't find .asd files in such directories. (The error is masked by ignore-errors.)

For make-pathname itself, here is an example that triggers the error:

(setf (logical-pathname-translations "test") `(("**;*.*.*" "/**/*.*")))

(make-pathname :defaults #p"test:test;" :version :unspecific :name "test" :type "lisp")



Pascal

--
Pascal Costanza







More information about the asdf-devel mailing list