Commit 9a40b8d4 authored by Glenn Morris's avatar Glenn Morris
Browse files

Undo 2012-03-06T08:22:42Z!

* lisp/files.el (locate-dominating-file, dir-locals-find-file):
Undo 2012-03-06 change.
parent 483ab230
2012-03-08 Glenn Morris <>
* files.el (locate-dominating-file, dir-locals-find-file):
Undo 2012-03-06 change.
2012-03-07 Eli Zaretskii <>
* international/quail.el (quail-help): Force
......@@ -877,14 +877,13 @@ or mount points potentially requiring authentication as a different user.")
;; (setq dir nil))))
;; nil)))
(defun locate-dominating-file (file name &optional predicate)
(defun locate-dominating-file (file name)
"Look up the directory hierarchy from FILE for a file named NAME.
Stop at the first parent directory containing a file NAME,
and return the directory. Return nil if not found.
Optional argument PREDICATE is a function of one argument, a file.
It should return non-nil if the file is acceptable. The default is
`file-exists-p'; you might, e.g., want to use `file-readable-p' instead."
This function only tests if FILE exists. If you care about whether
it is readable, regular, etc., you should test the result."
;; We used to use the above locate-dominating-files code, but the
;; directory-files call is very costly, so we're much better off doing
;; multiple calls using the code in here.
......@@ -911,8 +910,11 @@ It should return non-nil if the file is acceptable. The default is
;; (setq user (nth 2 (file-attributes file)))
;; (and prev-user (not (equal user prev-user))))
(string-match locate-dominating-stop-dir-regexp file)))
(setq try (funcall (or predicate 'file-exists-p)
(expand-file-name name file)))
;; FIXME? maybe this function should (optionally?)
;; use file-readable-p instead. In many cases, an unreadable
;; FILE is no better than a non-existent one.
;; See eg dir-locals-find-file.
(setq try (file-exists-p (expand-file-name name file)))
(cond (try (setq root file))
((equal file (setq file (file-name-directory
(directory-file-name file))))
......@@ -3550,7 +3552,7 @@ across different environments and users.")
"Find the directory-local variables for FILE.
This searches upward in the directory tree from FILE.
It stops at the first directory that has been registered in
`dir-locals-directory-cache' or contains a readable `dir-locals-file'.
`dir-locals-directory-cache' or contains a `dir-locals-file'.
If it finds an entry in the cache, it checks that it is valid.
A cache entry with no modification time element (normally, one that
has been assigned directly using `dir-locals-set-directory-class', not
......@@ -3568,15 +3570,17 @@ of no valid cache entry."
(if (eq system-type 'ms-dos)
(dosified-file-name dir-locals-file)
;; FIXME? Is it right to silently ignore unreadable files?
(locals-file (locate-dominating-file file dir-locals-file-name
(lambda (file)
(and (file-readable-p file)
(file-regular-p file)))))
(locals-file (locate-dominating-file file dir-locals-file-name))
(dir-elt nil))
;; `locate-dominating-file' may have abbreviated the name.
(if locals-file
(setq locals-file (expand-file-name dir-locals-file-name locals-file)))
(and locals-file
(setq locals-file (expand-file-name dir-locals-file-name locals-file))
;; FIXME? is it right to silently ignore an unreadable file?
;; Maybe we'd want to keep searching in that case.
;; That is a locate-dominating-file issue.
(or (not (file-readable-p locals-file))
(not (file-regular-p locals-file)))
(setq locals-file nil))
;; Find the best cached value in `dir-locals-directory-cache'.
(dolist (elt dir-locals-directory-cache)
(when (and (eq t (compare-strings file nil (length (car elt))
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment