user-homedir-pathname on cmucl
Raymond Toy
toy.raymond at gmail.com
Thu Dec 31 21:54:43 UTC 2015
>>>>> "Robert" == Robert Goldman <rpgoldman at sift.net> writes:
Robert> On 12/20/15 Dec 20 -12:14 PM, Raymond Toy wrote:
>>>>>>> "Robert" == Robert Goldman
>>>>>>> <rpgoldman at sift.net> writes:
>>
I thought I had sent a response to this, but I guess not.
Robert> I think what we want is this, right?
Robert> (defun test () (pathname-match-p
Robert> (uiop/common-lisp:user-homedir-pathname) (first
Robert> (ext:search-list (cl:user-homedir-pathname)))))
Robert> that fails on master, and passes with your patch.
Yeah, that's the correct version.
Robert> It's not particularly clear to anyone who's not familiar
Robert> with CMUCL. Is there a way to illustrate the issue
Robert> without reference to EXT:SEARCH-LIST? Or can you provide
The whole issue is the search-list and how pathname-match-p doesn't
handle it.
Here's a separate example of the issue.
(setf (search-list "tmp:") '("/tmp/"))
(pathname-match-p #p"/tmp/foo.lisp" "tmp:foo.lisp") gives an error.
But if you had a logical-pathname host "temp", then
(pathname-match-p #p"/tmp/foo.lisp" "temp:*.lisp") doesn't signal an
error. It actually returns nil, which doesn't seem quite right if
there's a translation ("*.lisp" "/tmp/*.lisp").
Ugh. I hate pathname issues.
Robert> comment for this? If I just drop this form into the test
Robert> suite, I foresee it creating great confusion for some poor
Robert> shlub (possibly me) who reads in > 6 months from now....
A comment is that asdf doesn't want to use search-lists for
user-homedir-pathname, Convert it to a physical pathaname.
Robert> It seems like we're doing *SOMETHING* with
Robert> USER-HOMEDIR-PATHNAME followed by merging that causes
Robert> PATHNAME-MATCH-P in this function to error out.
Robert> But to be honest, I have no idea what's going wrong, or
Robert> why it's ASDF's fault. If you merge a pathname with
Robert> USER-HOMEDIR-PATHNAME's return value, it seems to me you
Robert> ought to be able to call PATHNAME-MATCH-P on the result.
Yes, and indeed (merge-pathnames "foo.lisp" (user-homedir-pathname))
returns "home:foo.lisp" as expected. But pathname-match-p doesn't
like search-lists. I guess that's cmucl's fault.
Robert> It seems like you're saying it's something about the way
Robert> that search-lists deal with nonexistent directories. Is
Robert> that right?
Robert> Or is this because when we merge we aren't appropriately
Robert> creating something that's a wildcard pathname?
I don't know either.
I will look into making pathname-match-p understand search-lists.
I'll leave it up to you on whether asdf should use a different
user-homedir-pathname. I think it makes some sense for any using
cmucl with a pathname-match-p fix with newer versions of asdf.
--
Ray
More information about the asdf-devel
mailing list