From: William H. N. <wil...@ai...> - 2001-05-19 13:00:37
|
On Sat, May 19, 2001 at 02:15:40AM +0100, Daniel Barlow wrote: > > [ 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? This looks reasonable, and I was merging it when, while thinking about where in initialization the SETF should go, I realized that I was confused about the correct value of *DEFAULT-PATHNAME-DEFAULTS* after loading a core. Consider: a. Run SBCL in dir1, save a core, then load the core in dir2. b. Run SBCL in dir1, set *DEFAULT-PATHNAME-DEFAULTS* to dir2, then load the core in dir1. c. Run SBCL in dir1, set *DEFAULT-PATHNAME-DEFAULTS* to dir2, then load the core in dir3. Maybe we should just document that overwriting a core always blows away the value of *DEFAULT-PATHNAME-DEFAULTS*, so that the values are dir2, dir1, and dir3 respectively. After all, ANSI doesn't talk about saving and restoring cores, so we're free to do whatever the heck we like. But in that case we might want to take the opportunity to specify the set of special variables which are automatically nuked on save/reload. Some candidates: *STANDARD-INPUT*, *STANDARD-OUTPUT*, etc. perhaps some LOAD-FOREIGN-related things too? Since it's not immediately obvious to me how to get it right, I delayed dealing with it. -- William Harold Newman <wil...@ai...> "Tweak alpha so it sends SIGBUS for unaligned access, and does NOT do a fixup. This encourages people to fix their code." -- a commit note from <http://www.OpenBSD.org/plus29.html> PGP key fingerprint 85 CE 1C BA 79 8D 51 8C B9 25 FB EE E0 C3 E5 7C |