From: Glenn Morris Date: Fri, 9 Mar 2012 03:21:49 +0000 (-0500) Subject: Another dir-locals iteration X-Git-Tag: emacs-pretest-24.0.05~135 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=f7fd3d79b702f5fc1211d0d3d104455b7bf04407;p=emacs.git Another dir-locals iteration * lisp/files.el (dir-locals-find-file): Don't check result is regular, readable. (dir-locals-read-from-file): Demote errors. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 0e931572f01..db93ab69876 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2012-03-09 Glenn Morris + + * files.el (dir-locals-find-file): + Don't check result is regular, readable. + (dir-locals-read-from-file): Demote errors. + 2012-03-08 Eli Zaretskii * international/quail.el (quail-insert-kbd-layout): Insert diff --git a/lisp/files.el b/lisp/files.el index fae834daefe..cde15c5d0b1 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -3574,13 +3574,14 @@ of no valid cache entry." (dir-elt nil)) ;; `locate-dominating-file' may have abbreviated the name. (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)) + (setq locals-file (expand-file-name dir-locals-file-name locals-file))) + ;; Let dir-locals-read-from-file inform us via demoted-errors + ;; about unreadable files, etc. + ;; Maybe we'd want to keep searching though - 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)) @@ -3622,15 +3623,19 @@ FILE is the name of the file holding the variables to apply. The new class name is the same as the directory in which FILE is found. Returns the new class name." (with-temp-buffer - (insert-file-contents file) - (let* ((dir-name (file-name-directory file)) - (class-name (intern dir-name)) - (variables (let ((read-circle nil)) - (read (current-buffer))))) - (dir-locals-set-class-variables class-name variables) - (dir-locals-set-directory-class dir-name class-name - (nth 5 (file-attributes file))) - class-name))) + ;; Errors reading the file are not very informative. + ;; Eg just "Error: (end-of-file)" does not give any clue that the + ;; problem is related to dir-locals. + (with-demoted-errors + (insert-file-contents file) + (let* ((dir-name (file-name-directory file)) + (class-name (intern dir-name)) + (variables (let ((read-circle nil)) + (read (current-buffer))))) + (dir-locals-set-class-variables class-name variables) + (dir-locals-set-directory-class dir-name class-name + (nth 5 (file-attributes file))) + class-name)))) (defun hack-dir-local-variables () "Read per-directory local variables for the current buffer.