annotate lisp/prim/lisp-file-db.el @ 209:41ff10fd062f r20-4b3

Import from CVS: tag r20-4b3
author cvs
date Mon, 13 Aug 2007 10:04:58 +0200
parents 850242ba4a81
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
203
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
1 (defvar *default-db-name* (expand-file-name "~/.xemacs/lisp-file-database")
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
2 "Default location of the database")
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
3
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
4 (defun build-lisp-file-db (&optional db-name path rebuild)
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
5 "Create a database of all lisp files in the directories given by PATH.
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
6 DB-NAME is the database name, defaulting to *default-db-name*
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
7 PATH is a list of directories to search, defaulting to load-path.
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
8 REBUILD "
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
9 (let ((path (or path load-path))
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
10 (db (open-database (or db-name *default-db-name*) nil nil "rw+")))
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
11 ;; For each entry in path, find all files in it and put them in
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
12 ;; the database.
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
13 (dolist (dir path)
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
14 (dolist (file (directory-files dir t nil t t))
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
15 ;; Separate the file name and the directory. The key is the
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
16 ;; filename, and the value is the whole pathname. However, if
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
17 ;; the key already exists, DON'T put that entry in. We want
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
18 ;; things that occur first in load-path to override entries
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
19 ;; later in load-path
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
20 (let ((fname (file-name-nondirectory file)))
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
21 (put-database fname file db nil))))))
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
22
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
23 (defun show-lisp-db (&optional db-name)
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
24 (let ((db (open-database (or db-name *default-db-name*) nil nil "r"))
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
25 (entries '()))
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
26 (map-database #'(lambda (key val)
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
27 (push (cons key val) entries))
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
28 db)
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
29 (nreverse entries)))
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
30
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
31 (defun lookup-lisp-file-db (file &optional db-name)
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
32 (let ((name (file-name-nondirectory file))
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
33 (db (open-database (or db-name *default-db-name*) nil nil "r")))
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
34 (do* ((ext '("" ".elc" ".el") (rest ext))
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
35 (entry (get-database (concat name (first ext)) db)
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
36 (get-database (concat name (first ext)) db)))
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
37 ((or entry (null ext)) entry)
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
38 ())))
850242ba4a81 Import from CVS: tag r20-3b28
cvs
parents:
diff changeset
39