This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMU Common Lisp".
The branch, 20f-branch has been updated
via 8329e1d53ee57bf375c63675642b21358790ea2b (commit)
from ab0a979db83310c64fcbbc13b178d5c31af9f5c9 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 8329e1d53ee57bf375c63675642b21358790ea2b
Author: Raymond Toy <toy.raymond(a)gmail.com>
Date: Wed Oct 1 20:29:32 2014 -0700
Fix regression in %ENUMERATE-DIRECTORIES.
Previously (18a at least), %ENUMERATE-DIRECTORIES would return a path
even if a directory element did not exist. This behavior is restored.
See email from cmucl-help, Sep 26, 2014.
* src/code/filesys.lisp:
* Fix regression.in %ENUMERATE-DIRECTORIES. Even if the directory
does not exist, we continue recursing instead of stopping.
* src/general-info/release-20f.txt:
* Update
* tests/filesys.lisp:
* New file adding tests for UNIX-NAMESTRING.
diff --git a/src/code/filesys.lisp b/src/code/filesys.lisp
index 9d224df..ee844e3 100644
--- a/src/code/filesys.lisp
+++ b/src/code/filesys.lisp
@@ -710,9 +710,13 @@
(with-directory-node-noted ((head) &body body)
`(multiple-value-bind (res dev ino mode)
(unix-xstat ,head)
- (when (and res (eql (logand mode unix:s-ifmt) unix:s-ifdir))
- (let ((nodes (cons (cons dev ino) nodes)))
- ,@body))))
+ ;; Even if the directory does not exist, we want to
+ ;; continue recursing.
+ (let ((nodes (if (and res (eql (logand mode unix:s-ifmt)
+ unix:s-ifdir))
+ (cons (cons dev ino) nodes)
+ nodes)))
+ ,@body)))
(do-directory-entries ((name directory) &body body)
`(let ((dir (unix:open-dir ,directory)))
(when dir
diff --git a/src/general-info/release-20f.txt b/src/general-info/release-20f.txt
index 4fd57e3..2cdc460 100644
--- a/src/general-info/release-20f.txt
+++ b/src/general-info/release-20f.txt
@@ -127,6 +127,8 @@ New in this release:
doubles. As a side-effect of this fix, DECODE-FLOAT returns the
correct values for denormals, and SCALE-FLOAT scales denormals
correctly.
+ * EXT:UNIX-NAMESTRING no longer returns NIL if a directory does
+ not exist. This was a regression from at least 18a.
* Trac Tickets:
* Ticket #90 fixed.
diff --git a/tests/filesys.lisp b/tests/filesys.lisp
new file mode 100644
index 0000000..a3d99e8
--- /dev/null
+++ b/tests/filesys.lisp
@@ -0,0 +1,60 @@
+;;; Tests for the functions in filesys.lisp.
+
+(defpackage :filesys-tests
+ (:use :cl :lisp-unit))
+
+(in-package "FILESYS-TESTS")
+
+;; These tests for unix-namestring come from the cmucl-help mailing
+;; list, Sep 26, 2014 by Jared C. Davis
+
+(define-test unix-namestring.1.exists
+ ;; Make sure the desired directories exist.
+ (assert-equal #P"/tmp/foo/bar/hello.txt"
+ (ensure-directories-exist "/tmp/foo/bar/hello.txt"))
+ (dolist (path '("/tmp/hello.txt"
+ "/tmp/foo/"
+ "/tmp/foo/hello.txt"
+ "/tmp/foo/bar/hello.txt"
+ "/tmp/foo/bar/bye.txt"
+ "/tmp/foo/bar/"
+ "/tmp/foo/bar/baz"
+ "/tmp/foo/bye.txt"
+ "/tmp/bye.txt"))
+ (assert-equal path
+ (ext:unix-namestring path nil)
+ path)))
+
+(define-test unix-namestring.1.non-existent
+ ;; Make sure the desired directories exist.
+ (assert-equal #P"/tmp/foo/bar/hello.txt"
+ (ensure-directories-exist "/tmp/foo/bar/hello.txt"))
+ ;; These paths contain directories that don't exist.
+ (dolist (path '("/tmp/oops/"
+ "/tmp/oops/hello.txt"
+ "/tmp/foo/oops/hello.txt"
+ "/tmp/foo/bar/oops/hello.txt"
+ "/tmp/foo/oops/"
+ ))
+ (assert-equal path
+ (ext:unix-namestring path nil)
+ path)))
+
+(define-test unix-namestring.2
+ ;; Make sure the desired directories exist.
+ (assert-equal #P"/tmp/foo/bar/hello.txt"
+ (ensure-directories-exist "/tmp/foo/bar/hello.txt"))
+ (unwind-protect
+ (progn
+ ;; Create a symlink loop
+ ;; ln -s /tmp/foo/bar/symlink /tmp/foo/
+ (unix:unix-unlink "/tmp/foo/bar/symlink")
+ (assert-equal t
+ (unix:unix-symlink "/tmp/foo/" "/tmp/foo/bar/symlink"))
+ (assert-equal "/tmp/foo/bar/symlink"
+ (ext:unix-namestring "/tmp/foo/bar/symlink" nil)))
+ (unix:unix-unlink "/tmp/foo/bar/symlink")))
+
+
+
+
-----------------------------------------------------------------------
Summary of changes:
src/code/filesys.lisp | 10 +++++--
src/general-info/release-20f.txt | 2 ++
tests/filesys.lisp | 60 ++++++++++++++++++++++++++++++++++++++
3 files changed, 69 insertions(+), 3 deletions(-)
create mode 100644 tests/filesys.lisp
hooks/post-receive
--
CMU Common Lisp