From: TC-Rucho <tc....@gm...> - 2008-11-17 19:56:47
Attachments:
filesys.lisp.diff
|
Hello SBCL-Devel team, About 2 days ago, I started making a directory list script for apache in Common Lisp using SBCL, but when I tried to list the requested directory using CL:DIRECTORY I found that all the symbolic links I had in there were being followed to the real path of the file being pointed by the symlink. At first I tried doing the listing with sb-posix, and got some working function, but I thought it was not the best way to do it. When looking at the hyperspect about DIRECTORY, I found that the ANSI standard requires DIRECTORY to have a &key, but does not specify any argument for it, leaving it up to every cl:implementation to modify it's behavior through key args. What I needed for this task was a keyword that prevented CL:DIRECTORY from following symlinks, and therefore return non-truenames. Since there is a TRUENAME function already, I thought it was not the best to have the DIRECTORY function _only_ return truenames, because a (mapcar #'truename (directory pathspec)) would do and one could still have the non-truename path. Then I checked clisp's DIRECTORY and it was significantly more useful for the task I was working on. Later someone at #lisp pointed me to the CMUCL documentation about DIRECTORY, and it had ,among other nice key args, the one I had been looking for in SBCL's DIRECTORY. Someone suggested me to request it's implementation, but I did not want to bother anyone to do it, so I started diving in the sb-impl sources for the first time. It took me a long while to accomplish, but I finally implemented the functionality I've been needing an that, in my humble opinion, should have been there. I tested it with symbolic links to files, directories and broken symlinks and it works perfectly and it's consistent with the format of the current DIRECTORY behavior. This was a great opportunity for me to learn more about Common Lisp an SBCL, but since I've already implemented this functionality and it's working perfectly, would the patch adding it be accepted?. This is the first time I submit code in a GPL project, so I'm not really aware of the protocols that apply. I'm using sbcl-1.0.14. This is the way this extension works: CL-USER> (directory "Public_www/html/*.*") ;;; the default functionality (#P"/home/tc-rucho/Public_www/html/Scrots/" #P"/home/tc-rucho/Public_www/html/broken-link" #P"/home/tc-rucho/Public_www/html/cuack.pdf" #P"/home/tc-rucho/Public_www/html/gwes/" #P"/home/tc-rucho/Public_www/html/samples.tar.bz2" #P"/home/tc-rucho/Public_www/html/test-0000.mpeg" #P"/home/tc-rucho/Public_www/html/test-0001.mpeg" #P"/home/tc-rucho/WINE/" #P"/home/tc-rucho/output.pdf" #P"/home/tc-rucho/screenshot.png") ;;; Last 3 were valid symlinks CL-USER> (directory "Public_www/html/*.*" :truenames nil);;the extension (#P"/home/tc-rucho/Public_www/html/Scrots/" #P"/home/tc-rucho/Public_www/html/WINE/" #P"/home/tc-rucho/Public_www/html/broken-link" #P"/home/tc-rucho/Public_www/html/cuack.pdf" #P"/home/tc-rucho/Public_www/html/gwes/" #P"/home/tc-rucho/Public_www/html/output.pdf" #P"/home/tc-rucho/Public_www/html/samples.tar.bz2" #P"/home/tc-rucho/Public_www/html/screenshot.png" #P"/home/tc-rucho/Public_www/html/test-0000.mpeg" #P"/home/tc-rucho/Public_www/html/test-0001.mpeg") ;;; everything is the same exept that the symlinks are ;;; not being followed, however, if they point to a folder ;;; makes them be treated as such (WINE) I'm looking forward to reading from you :D TC-Rucho PD: Is there any way to avoid recompiling all SBCL in order to test modifications to it's core? (sb-impl) |
From: Liam H. <ln...@he...> - 2008-11-17 23:44:42
|
Apparently http://weitz.de/cl-fad/ has with-directory-iterator; in any case it seems to have a lot of, well, "files and directories" type things. I've not tried it, but Edi's software is always really good. Liam On Mon, Nov 17, 2008 at 6:23 PM, Liam Healy <ln...@he...> wrote: > I recently came across this: > http://www.cliki.net/WITH-DIRECTORY-ITERATOR and thought it might be > what you are looking for, but I have cl-utilities loaded and it is not > present in the version I have loaded. (I notice it says it is a > "proposal".) However, maybe someone has done some work towards its > implementation. > > Liam > |
From: Liam H. <ln...@he...> - 2008-11-17 23:44:44
|
I recently came across this: http://www.cliki.net/WITH-DIRECTORY-ITERATOR and thought it might be what you are looking for, but I have cl-utilities loaded and it is not present in the version I have loaded. (I notice it says it is a "proposal".) However, maybe someone has done some work towards its implementation. Liam |
From: TC-Rucho <tc....@gm...> - 2008-11-19 13:10:53
|
Sure, there's also osicat, but since listing a directory is such a basic function, it should not be necessary to load anything but the implementation's core to do a nice listing it. Since SBCL already has a directory function it should have non-truenames listing which is, in my humble oppinion, a must. So instead of just loading a package, I thought it would be nice to have a better directory function builtin. ;D I'm going to try my patch with the latest sbcl code when I have time (in about a day or two). Anyway, thanks for your interest in my problem, it's really appreciated. :D I just hope that after all I went through to make that extension, it doesn't just get trashed silently, I'll make any modification to it in order to make it good enough (I think it's good, but not sure if what do the devels think about it). I'm going to add tests for it this weekend and something that could be called documentation for it (it's usage is quite simple but anyway). TC-Rucho PD: First time messing with mailing lists, I wasn't aware that emails would not be from sbc...@li..., so I sent this reply directly to the address used to post the message to this list. :P On Mon, 2008-11-17 at 18:27 -0500, Liam Healy wrote: > Apparently http://weitz.de/cl-fad/ has with-directory-iterator; in any > case it seems to have a lot of, well, "files and directories" type > things. I've not tried it, but Edi's software is always really good. > > Liam > > On Mon, Nov 17, 2008 at 6:23 PM, Liam Healy <ln...@he...> wrote: > > I recently came across this: > > http://www.cliki.net/WITH-DIRECTORY-ITERATOR and thought it might be > > what you are looking for, but I have cl-utilities loaded and it is not > > present in the version I have loaded. (I notice it says it is a > > "proposal".) However, maybe someone has done some work towards its > > implementation. > > > > Liam > > |
From: Leslie P. P. <sk...@vi...> - 2008-11-19 14:07:56
|
> So instead of just loading a package, I thought it > would be nice to have a better directory function builtin. ;D I can't throw in much weight around here but I'm in favor of it. Leslie -- LinkedIn Profile: http://www.linkedin.com/in/polzer Xing Profile: https://www.xing.com/profile/LeslieP_Polzer Blog: http://blog.viridian-project.de/ |