From: Daniel B. <da...@te...> - 2001-05-19 01:16:18
|
[ Incidentally, I expect to have only intermittent net connectivity - if that - between about now and about next Sunday ] Daniel Barlow <da...@te...> writes: > ENSURE-DIRECTORIES-EXIST doesn't do this, yet it accesses the file > system, so arguably it should > (2) this doesn't actually help much as *default-pathname-defaults* is > #P"". My proposal is that it should be set to the value of > (SB-EXT::DEFAULT-DIRECTORY) at startup and advertised as the standard > way of "changing directory" - given that SB-EXT::DEFAULT-DIRECTORY > isn't exported anyway, we need some such thing. For what it's worth, I tried the simplest thing that might have worked: (diff cut up by hand, may not apply automatically) --- code/filesys.lisp 2001/05/19 00:13:14 1.13.2.1 +++ code/filesys.lisp 2001/05/19 00:56:52 @@ -1062,11 +1035,10 @@ (defun ensure-directories-exist (pathspec &key verbose (mode #o777)) #!+sb-doc - "Test whether the directories containing the specified file - actually exist, and attempt to create them if they do not. - The MODE argument is a CMUCL/SBCL-specific extension to control - the Unix permission bits." - (let* ((pathname (pathname pathspec)) + "Tests whether the directories containing the specified file + actually exist, and attempts to create them if they do not. + Portable programs should avoid using the :MODE argument." + (let* ((pathname (merge-pathnames (pathname pathspec))) (pathname (if (typep pathname 'logical-pathname) (translate-logical-pathname pathname) pathname)) --- code/toplevel.lisp 2001/05/19 00:13:14 1.12.2.2 +++ code/toplevel.lisp 2001/05/19 00:56:54 @@ -299,7 +301,8 @@ (options (rest *posix-argv*))) ; skipping program name (/show0 "done with outer LET in TOPLEVEL-INIT") - + (setf *default-pathname-defaults* (pathname (sb!ext::default-directory))) + (/show0 "initialized *default-pathname-defaults*") ;; FIXME: There are lots of ways for errors to happen around here ;; (e.g. bad command line syntax, or READ-ERROR while trying to ;; READ an --eval string). Make sure that they're handled It builds fine, it rebuilds using itself fine. I haven't re-enabled the "." special case in UNIX-STAT, and, yes, I did run clean.sh first (It doesn't pass the filesys.pure.test, but I think that's a problem with the test, and it doesn't get on with common-lisp-controller, but I think that's a problem with using relative pathnames in logical hosts there: the MERGE-PATHNAMES spec says that the directory component of default-pathname still gets merged even if pathname and default-pathname are on different hosts, and that's what we're doing. Rewriting system definitions to use absolute paths makes it much happier. Oh for italicisable email) I think this approach - or something much like it - is the Right Thing, and it looks so far like we can introduce it incrementally without breaking everything too badly in the process. One for 0.7? > (3) found in the course of implementing (1), I realised that we > currently have different behaviours for the :defaults argument to > make-pathname than for merge-pathnames. Per Kent Pitman, this is perfectly normal - desirable, even, and should not be changed In other news, I'm taking a laptop with me (the Alpha is a bit heavy) with which I intend to look very sceptically at fd-stream.lisp. I think that a serve-event-like-thing could be accomplished a lot more neatly if it infected fd-streams at a lower level - but there is probably an efficiency tradeoff that needs thinking about. -dan -- http://ww.telent.net/cliki/ - Link farm for free CL-on-Unix resources |