I checked and pathname-directory-pathname is redundant, because of the guarantees provided by ensure-directory-pathname, but when I look at get-pathname-defaults, I am pretty sure it cannot be removed in the same way.

After get-pathname-defaults any relative pathnames will be resolved by pathname merging, and we should be guaranteed to have an absolute pathname.

AFAICT, ensure-directory-pathname can return a relative pathname.

To be honest, I don't know if an absolute pathname is required, but I would have to understand a lot more of uiop to be sure it was safe to relax that constraint, so I left it. I'm willing to be convinced if you have more energy than I do.

Best,
R

P.S. please send diffs with some more context if you can -- I find the following diff flags helpful: --ignore-space-change -u -F '\''^(def'\''

On 25 Jun 2019, at 17:10, Spenser Truex wrote:

"Robert Goldman" <rpgoldman@sift.info> writes:

OK, applied the revised fix, added tests, and pushed.

On 25 Jun 2019, at 9:24, Robert Goldman wrote:

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.

Indeed, so why did you push the above code to
<URL:https://gitlab.common-lisp.net/asdf/asdf/blob/b1ffbc47442973a18c43a44f6e17f0ff06ddfafd/uiop/filesystem.lisp >?

I suggest you do that reduction (below)

*** /uiop/filesystem.lisp
*** 491,499 ****
Note that this operation is usually NOT thread-safe."
(if dir
(let* ((dir (resolve-symlinks*
- (get-pathname-defaults
- (ensure-directory-pathname
- dir))))
(cwd (getcwd))
(*default-pathname-defaults* dir))
(chdir dir)
--- 491,498 ----
Note that this operation is usually NOT thread-safe."
(if dir
(let* ((dir (resolve-symlinks*
+ (ensure-directory-pathname
+ dir)))
(cwd (getcwd))
(*default-pathname-defaults* dir))
(chdir dir)

--
Spenser Truex
https://spensertruex.com/
San Francisco, USA