Closed yanyingwang closed 8 years ago
I tested it on my machine and it works for me:
; SLIME 2015-06-01
CL-USER> (ql:quickload :caveman2)
To load "caveman2":
Load 1 ASDF system:
caveman2
; Loading "caveman2"
..............
(:CAVEMAN2)
CL-USER> (caveman2:make-project #P "/home/andy/lisp/foo" :author "foobar")
writing /home/andy/lisp/foo/.gitignore
writing /home/andy/lisp/foo/README.markdown
writing /home/andy/lisp/foo/app.lisp
writing /home/andy/lisp/foo/foo-test.asd
writing /home/andy/lisp/foo/foo.asd
writing /home/andy/lisp/foo/db/schema.sql
writing /home/andy/lisp/foo/src/config.lisp
writing /home/andy/lisp/foo/src/db.lisp
writing /home/andy/lisp/foo/src/main.lisp
writing /home/andy/lisp/foo/src/view.lisp
writing /home/andy/lisp/foo/src/web.lisp
writing /home/andy/lisp/foo/static/css/main.css
writing /home/andy/lisp/foo/t/foo.lisp
writing /home/andy/lisp/foo/templates/index.html
writing /home/andy/lisp/foo/templates/_errors/404.html
writing /home/andy/lisp/foo/templates/layouts/default.html
T
CL-USER> (caveman2:make-project #P "/home/andy/lisp/myapp" :author "foobar")
writing /home/andy/lisp/myapp/.gitignore
writing /home/andy/lisp/myapp/README.markdown
writing /home/andy/lisp/myapp/app.lisp
writing /home/andy/lisp/myapp/myapp-test.asd
writing /home/andy/lisp/myapp/myapp.asd
writing /home/andy/lisp/myapp/db/schema.sql
writing /home/andy/lisp/myapp/src/config.lisp
writing /home/andy/lisp/myapp/src/db.lisp
writing /home/andy/lisp/myapp/src/main.lisp
writing /home/andy/lisp/myapp/src/view.lisp
writing /home/andy/lisp/myapp/src/web.lisp
writing /home/andy/lisp/myapp/static/css/main.css
writing /home/andy/lisp/myapp/t/myapp.lisp
writing /home/andy/lisp/myapp/templates/index.html
writing /home/andy/lisp/myapp/templates/_errors/404.html
writing /home/andy/lisp/myapp/templates/layouts/default.html
T
CL-USER> (asdf:system-source-directory :caveman2)
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/caveman-20150923-git/"
CL-USER>
We have the same version of caveman2. What version of SBCL are you using?
What are the arguments to copy-file-to-file?
Mine versions:
CL-USER> (ql:system-apropos "caveman2")
#<SYSTEM caveman2 / caveman-20150923-git / quicklisp 2015-09-24>
#<SYSTEM caveman2-db / caveman-20150923-git / quicklisp 2015-09-24>
#<SYSTEM caveman2-test / caveman-20150923-git / quicklisp 2015-09-24>
; No value
➜ ~ sbcl --version
SBCL 1.1.14.debian
But, how to show arguments of copy-file-to-file ? Please help me through this.
I am using sbcl 1.2.14. the current version is 1.2.16. version 1.1.14 is from 2013-12. I would suggest you install the most recent version from sbcl.org. Though I downloaded an old 1.1.14 binary and it still works.
Thanks! I'll try a new version of sbcl and see the result.
That is weird, could you try to eval (ql:quickload :cl-project-test)
and check the report? Caveman2's make-project
depends on that lib.
@macdavid313
Well, I try to eval (ql:quickload :cl-project-test)
and it gives me an error:
error opening #P"/home/yanying/quicklisp/dists/quicklisp/software/cl-project-20150923-git/t/cl-project-sample/": is a directory....
@aarvid Too bad that I've updated sbcl version to '1.2.16' and nothing changed.
run the following 3 commands:
CL-USER> cl-project::*skeleton-directory*
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/"
CL-USER> cl-project::*skeleton-parameters*
NIL
CL-USER> (uiop:directory-files cl-project::*skeleton-directory*)
(#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/.gitignore"
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/README.markdown"
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/README.org"
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/skeleton-test.asd"
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/skeleton.asd")
It appears you have a problem with the uiop:directory-files function. It should only return a list of files but without any subdirectories.
You might as well run this command:
CL-USER> (mapcar #'uiop:directory-files (uiop:subdirectories cl-project::*skeleton-directory*))
((#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/src/skeleton.lisp")
(#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/t/skeleton.lisp"))
Also find the definition of uiop:directory-files function. Easy way is to put the cursor over the function and use the M-. key stroke (hold alt press period). That should go to the definition. See what file it is in:
/media/common/hack/lisp/quick/dists/quicklisp/software/uiop-3.1.5/filesystem.lisp
@aarvid I think you're right. This is output of mine:
CL-USER> cl-project::*skeleton-directory*
#P"/home/yanying/quicklisp/dists/quicklisp/software/cl-project-20150923-git/skeleton/"
CL-USER> cl-project::*skeleton-parameters*
NIL
CL-USER> (uiop:directory-files cl-project::*skeleton-directory*)
(#P"/home/yanying/quicklisp/dists/quicklisp/software/cl-project-20150923-git/skeleton/.gitignore"
#P"/home/yanying/quicklisp/dists/quicklisp/software/cl-project-20150923-git/skeleton/README.markdown"
#P"/home/yanying/quicklisp/dists/quicklisp/software/cl-project-20150923-git/skeleton/README.org"
#P"/home/yanying/quicklisp/dists/quicklisp/software/cl-project-20150923-git/skeleton/skeleton-test.asd"
#P"/home/yanying/quicklisp/dists/quicklisp/software/cl-project-20150923-git/skeleton/skeleton.asd"
#P"/home/yanying/quicklisp/dists/quicklisp/software/cl-project-20150923-git/skeleton/src/"
#P"/home/yanying/quicklisp/dists/quicklisp/software/cl-project-20150923-git/skeleton/t/")
CL-USER> (mapcar #'uiop:directory-files (uiop:subdirectories cl-project::*skeleton-directory*))
((#P"/home/yanying/quicklisp/dists/quicklisp/software/cl-project-20150923-git/skeleton/src/skeleton.lisp")
(#P"/home/yanying/quicklisp/dists/quicklisp/software/cl-project-20150923-git/skeleton/t/skeleton.lisp"))
CL-USER>
As we can see, those two lines are different from (uiop:directory-files cl-project::*skeleton-directory*)
’s output of yours.
#P"/home/yanying/quicklisp/dists/quicklisp/software/cl-project-20150923-git/skeleton/src/"
#P"/home/yanying/quicklisp/dists/quicklisp/software/cl-project-20150923-git/skeleton/t/")
Those are infos of ASDF
:
CL-USER> (ql:system-apropos "ASDF")
#<SYSTEM asdf-defdoc / nst-4.0.3 / quicklisp 2015-09-24>
#<SYSTEM asdf-dependency-grovel / asdf-dependency-grovel-20150608-git / quicklisp 2015-09-24>
#<SYSTEM asdf-driver / uiop-3.1.5 / quicklisp 2015-09-24>
#<SYSTEM asdf-encodings / asdf-encodings-20150608-git / quicklisp 2015-09-24>
#<SYSTEM asdf-encodings/test / asdf-encodings-20150608-git / quicklisp 2015-09-24>
#<SYSTEM asdf-finalizers / asdf-finalizers-20150608-git / quicklisp 2015-09-24>
#<SYSTEM asdf-finalizers-test / asdf-finalizers-20150608-git / quicklisp 2015-09-24>
#<SYSTEM asdf-finalizers-test/1 / asdf-finalizers-20150608-git / quicklisp 2015-09-24>
#<SYSTEM asdf-linguist / asdf-linguist-20150923-git / quicklisp 2015-09-24>
#<SYSTEM asdf-nst / nst-4.0.3 / quicklisp 2015-09-24>
#<SYSTEM asdf-package-system / asdf-package-system-20150608-git / quicklisp 2015-09-24>
#<SYSTEM asdf-system-connections / asdf-system-connections-20140211-git / quicklisp 2015-09-24>
#<SYSTEM bytecurry.asdf-ext / bytecurry.asdf-ext-20150505-git / quicklisp 2015-09-24>
#<SYSTEM com.dvlsoft.asdf-flv / asdf-flv-1.0 / quicklisp 2015-09-24>
#<SYSTEM hu.dwim.asdf / hu.dwim.asdf-20150709-darcs / quicklisp 2015-09-24>
#<SYSTEM hu.dwim.asdf.documentation / hu.dwim.asdf-20150709-darcs / quicklisp 2015-09-24>
#<SYSTEM iolib.asdf / iolib-20150804-git / quicklisp 2015-09-24>
#<SYSTEM iolib/asdf / iolib-20150804-git / quicklisp 2015-09-24>
#<SYSTEM list-of / asdf-finalizers-20150608-git / quicklisp 2015-09-24>
#<SYSTEM prove-asdf / prove-20150923-git / quicklisp 2015-09-24>
#<SYSTEM test-serial-system / asdf-dependency-grovel-20150608-git / quicklisp 2015-09-24>
; No value
Edit: I upgraded to SBCL 1.2.16 and reran the commands.
It is clear that you have a problem with the function _uiop:directory-files_. it should not return actual directories.
CL-USER> (ql:system-apropos "ASDF")
This does not help. It shows what can be installed by quicklisp. It does not show what actually is installed, nor does it show if you have two UIOP systems on your computer which one it has loaded. Furthermore, UIOP is the utilities file of ASDF but it can be loaded separately.
Run the following commands (it assumes you are using slime):
CL-USER> (loop for sym in *features* when (search "ASDF" (symbol-name sym)) collect sym)
(:ASDF-PACKAGE-SYSTEM :ASDF3.1 :ASDF3 :ASDF2 :ASDF :ASDF-UNICODE)
CL-USER> (asdf:asdf-version)
"3.1.5"
CL-USER> (swank:find-definitions-for-emacs "UIOP:DIRECTORY-FILES")
(("(DEFUN UIOP/FILESYSTEM:DIRECTORY-FILES)"
(:LOCATION (:FILE "/home/andy/lisp/sbcl-1.2.16/contrib/asdf/uiop.lisp")
(:POSITION 132831)
(:SNIPPET "(with-upgradability ()
(defun truename* (p)
\"Nicer variant of TRUENAME that plays well with NIL, avoids logical pathname contexts, and tries both files and directories\"
(when p
(when (stringp p) (setf p (with-pathname-defaults () (parse-nam")))
("(DECLAIM UIOP/FILESYSTEM:DIRECTORY-FILES
NOTINLINE)"
(:LOCATION (:FILE "/home/andy/lisp/sbcl-1.2.16/contrib/asdf/uiop.lisp")
(:POSITION 132831)
(:SNIPPET "(with-upgradability ()
(defun truename* (p)
\"Nicer variant of TRUENAME that plays well with NIL, avoids logical pathname contexts, and tries both files and directories\"
(when p
(when (stringp p) (setf p (with-pathname-defaults () (parse-nam"))))
CL-USER> (ql:quickload :cl-project)
To load "cl-project":
Load 1 ASDF system:
cl-project
; Loading "cl-project"
...
(:CL-PROJECT)
CL-USER> (swank:find-definitions-for-emacs "UIOP:DIRECTORY-FILES")
(("(DEFUN UIOP/FILESYSTEM:DIRECTORY-FILES)"
(:LOCATION
(:FILE
"/media/common/hack/lisp/quick/dists/quicklisp/software/uiop-3.1.5/filesystem.lisp")
(:POSITION 2921)
(:SNIPPET "(with-upgradability ()
(defun truename* (p)
\"Nicer variant of TRUENAME that plays well with NIL, avoids logical pathname contexts, and tries both files and directories\"
(when p
(when (stringp p) (setf p (with-pathname-defaults () (parse-nam")))
("(DECLAIM UIOP/FILESYSTEM:DIRECTORY-FILES
NOTINLINE)"
(:LOCATION
(:FILE
"/media/common/hack/lisp/quick/dists/quicklisp/software/uiop-3.1.5/filesystem.lisp")
(:POSITION 2921)
(:SNIPPET "(with-upgradability ()
(defun truename* (p)
\"Nicer variant of TRUENAME that plays well with NIL, avoids logical pathname contexts, and tries both files and directories\"
(when p
(when (stringp p) (setf p (with-pathname-defaults () (parse-nam"))))
CL-USER>
As you can see, loading cl-project, loads a different version of UIOP (quicklisp version) than which SBCL had loaded on startup.
These command should tell us if you have an older/wrong version of UIOP on your computer that is loaded into lisp.
Edit: I upgraded to SBCL 1.2.16 and reran the commands, but nothing changed.
The following should help debug _uiop:directory-files_:
CL-USER> (trace uiop:directory-files uiop:directory* uiop:directory-pathname-p remove-if)
(UIOP/FILESYSTEM:DIRECTORY-FILES UIOP/FILESYSTEM:DIRECTORY*
UIOP/PATHNAME:DIRECTORY-PATHNAME-P REMOVE-IF)
CL-USER> (uiop:directory-files cl-project::*skeleton-directory*)
0: (UIOP/FILESYSTEM:DIRECTORY-FILES
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/")
1: (UIOP/FILESYSTEM:DIRECTORY*
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/*.*")
1: UIOP/FILESYSTEM:DIRECTORY* returned
(#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/.gitignore"
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/README.markdown"
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/README.org"
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/skeleton-test.asd"
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/skeleton.asd"
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/src/"
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/t/")
1: (REMOVE-IF UIOP/PATHNAME:DIRECTORY-PATHNAME-P
(#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/.gitignore"
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/README.markdown"
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/README.org"
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/skeleton-test.asd"
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/skeleton.asd"
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/src/"
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/t/"))
2: (UIOP/PATHNAME:DIRECTORY-PATHNAME-P
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/.gitignore")
2: UIOP/PATHNAME:DIRECTORY-PATHNAME-P returned NIL
2: (UIOP/PATHNAME:DIRECTORY-PATHNAME-P
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/README.markdown")
2: UIOP/PATHNAME:DIRECTORY-PATHNAME-P returned NIL
2: (UIOP/PATHNAME:DIRECTORY-PATHNAME-P
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/README.org")
2: UIOP/PATHNAME:DIRECTORY-PATHNAME-P returned NIL
2: (UIOP/PATHNAME:DIRECTORY-PATHNAME-P
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/skeleton-test.asd")
2: UIOP/PATHNAME:DIRECTORY-PATHNAME-P returned NIL
2: (UIOP/PATHNAME:DIRECTORY-PATHNAME-P
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/skeleton.asd")
2: UIOP/PATHNAME:DIRECTORY-PATHNAME-P returned NIL
2: (UIOP/PATHNAME:DIRECTORY-PATHNAME-P
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/src/")
2: UIOP/PATHNAME:DIRECTORY-PATHNAME-P returned T
2: (UIOP/PATHNAME:DIRECTORY-PATHNAME-P
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/t/")
2: UIOP/PATHNAME:DIRECTORY-PATHNAME-P returned T
1: REMOVE-IF returned
(#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/.gitignore"
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/README.markdown"
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/README.org"
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/skeleton-test.asd"
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/skeleton.asd")
0: UIOP/FILESYSTEM:DIRECTORY-FILES returned
(#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/.gitignore"
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/README.markdown"
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/README.org"
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/skeleton-test.asd"
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/skeleton.asd")
(#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/.gitignore"
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/README.markdown"
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/README.org"
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/skeleton-test.asd"
#P"/media/common/hack/lisp/quick/dists/quicklisp/software/cl-project-20150923-git/skeleton/skeleton.asd")
CL-USER>
when you are done do
CL-USER> (untrace uiop:directory-files uiop:directory* uiop:directory-pathname-p remove-if)
T
to get rid of future traces.
I've run the debug code and as a result, it seems that this thing comes from a version of UIOP from my system being loaded which should be from quicklisp.
CL-USER> (swank:find-definitions-for-emacs "UIOP:DIRECTORY-FILES")
(("(DEFUN UIOP/FILESYSTEM:DIRECTORY-FILES)"
(:LOCATION
(:FILE
"/home/csr21/src/lisp/sbcl-release-dir-20150930-tP58IU1wx/sbcl-1.2.16/contrib/asdf/uiop.lisp")
(:POSITION 1) (:SNIPPET "(defun DIRECTORY-FILES ")))
("(DECLAIM UIOP/FILESYSTEM:DIRECTORY-FILES
NOTINLINE)"
(:LOCATION
(:FILE
"/home/csr21/src/lisp/sbcl-release-dir-20150930-tP58IU1wx/sbcl-1.2.16/contrib/asdf/uiop.lisp")
(:POSITION 1) NIL)))
CL-USER> (ql:quickload :cl-project)
To load "cl-project":
Load 1 ASDF system:
cl-project
; Loading "cl-project"
...
(:CL-PROJECT)
CL-USER> (swank:find-definitions-for-emacs "UIOP:DIRECTORY-FILES")
(("(DEFUN UIOP/FILESYSTEM:DIRECTORY-FILES)"
(:LOCATION
(:FILE "/usr/share/common-lisp/source/cl-asdf/uiop/filesystem.lisp")
(:POSITION 2899)
(:SNIPPET "(with-upgradability ()
(defun truename* (p)
\"Nicer variant of TRUENAME that plays well with NIL and avoids logical pathname contexts\"
;; avoids both logical-pathname merging and physical resolution issues
(and p (handler-case (with-pathname-d")))
("(DECLAIM UIOP/FILESYSTEM:DIRECTORY-FILES
NOTINLINE)"
(:LOCATION
(:FILE "/usr/share/common-lisp/source/cl-asdf/uiop/filesystem.lisp")
(:POSITION 2899)
(:SNIPPET "(with-upgradability ()
(defun truename* (p)
\"Nicer variant of TRUENAME that plays well with NIL and avoids logical pathname contexts\"
;; avoids both logical-pathname merging and physical resolution issues
(and p (handler-case (with-pathname-d"))))
CL-USER>
I'm such a fool to ignore WARNING message when I run command sbcl --load quicklisp.lisp
to install quicklisp.
This is SBCL 1.2.16, an implementation of ANSI Common Lisp.
More information about SBCL is available at <http://www.sbcl.org/>.
SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses. See the CREDITS and COPYING files in the
distribution for more information.
WARNING:
You are using ASDF version 3.1.5 (probably from (require "asdf") or loaded
by quicklisp) and have an older version of ASDF 3.0.3 registered at
#P"/usr/share/common-lisp/source/cl-asdf/asdf.asd". Having an ASDF installed
and registered is the normal way of configuring ASDF to upgrade itself, and
having an old version registered is a configuration error. ASDF will ignore
this configured system rather than downgrade itself. In the future, you may
want to either: (a) upgrade this configured ASDF to a newer version, (b)
install a newer ASDF and register it in front of the former in your
configuration, or (c) uninstall or unregister this and any other old version
of ASDF from your configuration. Note that the older ASDF might be
registered implicitly through configuration inherited from your system
installation, in which case you might have to specify
:ignore-inherited-configuration in your in your
~/.config/common-lisp/source-registry.conf or other source-registry
configuration file, environment variable or lisp parameter. Indeed, a likely
offender is an obsolete version of the cl-asdf debian or ubuntu package,
that you might want to upgrade (if a recent enough version is available) or
else remove altogether (since most implementations ship with a recent asdf);
if you lack the system administration rights to upgrade or remove this
package, then you might indeed want to either install and register a more
recent version, or use :ignore-inherited-configuration to avoid registering
the old one. Please consult ASDF documentation and/or experts.
Finally, I just run sudo aptitude purge cl-asdf
to remove system ASDF package and everything works now!
@aarvid Thanks for help !
You are welcome. I had a similar problem years ago (asdf existed but not quicklisp) with an old version installed of a library hunchentoot depended on.
By the way, it is a bad idea to install implementations or libraries from a linux package system. They are usually hopelessly out-of-date and rarely updated.
I'm new to common-lisp and caveman, please confirm this problem and help me out:
when I load caveman2 and make-project, it thows an error like
error opening #P"/home/yanying/myapp": is a directory.....
.