uiop:directory-files doesn't behave on paths without a trailing slash

Robert Goldman rpgoldman at sift.info
Tue Jun 25 14:24:07 UTC 2019


Generally this looks good, but why did you put the change in 
`with-current-directory` instead of in `call-with-current-directory`, 
since the former is just a thin wrapper around the latter?

They are both exported, so I think it would be better to put it there.  
That leaves us with the following (rather ugly) form:

```
(let ((dir (resolve-symlinks*
                      (get-pathname-defaults
                       (pathname-directory-pathname
                        (ensure-directory-pathname
                         dir)))))
        ...)
   ...)
```

It's redundant to call `pathname-directory-pathname` on 
`ensure-directory-pathname`, so we just need the latter.

I will push this after testing.


On 25 Jun 2019, at 0:26, Spenser Truex wrote:

> Neil Lindquist <neillindquist5 at gmail.com>
> writes:
>
>> Hello,
>>
>> I recently noticed that uiop's DIRECTORY-FILES does not ensure that
>> the path is always interpreted as a directory.  On sbcl (and
>> presumably other implementations), if the path does not have a
>> trailing slash, the files in the parent directory are instead
>> returned.  This does not appear to be the indented behavior, given
>> that SUBDIRECTORIES ensures that the path is a directory.
>
> May as well also do that for uiop:with-current-directory. I've 
> attached
> a diff, and have a test case below
>
> Test case:
> (uiop:with-current-directory ("/home/user")
>     (run-program "ls" :output t))
>
> Behaviour is simiar to DIRECTORY-FILES.
> ;=> Current: lists my /home dir
> ;=> With diff: lists my /home/user dir
>
> ~~~~~~~~~~ DIFF ~~~~~~~~~~~~~
>
> 498c498
> <     `(call-with-current-directory ,dir #'(lambda () , at body))))
> ---
>>     `(call-with-current-directory (ensure-directory-pathname ,dir) 
>> #'(lambda
>> () , at body))))
>
> Coleslaw has been using a similar version of the above for awhile.
>
>> A patch for this new behavior and current/proposed results are below.
>> ## Patch ##
>> --- a/uiop/filesystem.lisp
>> +++ b/uiop/filesystem.lisp
>> @@ -209,7 +209,7 @@ Subdirectories should NOT be returned.
>>  override the default at your own risk.
>>    DIRECTORY-FILES tries NOT to resolve symlinks if the 
>> implementation
>> permits this,
>>  but the behavior in presence of symlinks is not portable. Use IOlib
>> to handle such situations."
>> -    (let ((dir (pathname directory)))
>> +    (let ((dir (ensure-directory-pathname directory))))
>>        (when (logical-pathname-p dir)
>>          ;; Because of the filtering we do below,
>>          ;; logical pathnames have restrictions on wild patterns.
>>
>>
> --
> Spenser Truex
> usenet at spensertruex.com
> https://spensertruex.com/
> San Francisco, USA
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/asdf-devel/attachments/20190625/56c8a561/attachment.html>


More information about the asdf-devel mailing list