]> git.eshelyaron.com Git - emacs.git/commitdiff
Yet more directory-local variables fixes.
authorGlenn Morris <rgm@gnu.org>
Thu, 24 Feb 2011 08:45:25 +0000 (00:45 -0800)
committerGlenn Morris <rgm@gnu.org>
Thu, 24 Feb 2011 08:45:25 +0000 (00:45 -0800)
* lisp/files-x.el (modify-dir-local-variable): Handle dir-locals from
the cache, and from non-file sources.

lisp/ChangeLog
lisp/files-x.el

index 05bddd0a7d929f1a9b3c812f44ccd9e4e19fc305..c44c491cad07f4e971bef9dfbaff8d90426901d4 100644 (file)
@@ -1,5 +1,8 @@
 2011-02-24  Glenn Morris  <rgm@gnu.org>
 
+       * files-x.el (modify-dir-local-variable): Handle dir-locals from
+       the cache, and from non-file sources.
+
        * help-fns.el (describe-variable): Return consistent results when a
        dir-local from a file came from the cache or did not.  (Bug#8095)
        If a dir-local has no associated file, say it came from a "directory".
index a3cb5331e6730ec3260532ffb7fe0b0b68909798..a9c324771551a4499d4ed57f2bb1054aacd715b6 100644 (file)
@@ -360,18 +360,28 @@ from the MODE alist ignoring the input argument VALUE."
   (catch 'exit
     (unless enable-local-variables
       (throw 'exit (message "Directory-local variables are disabled")))
-
     (let ((variables-file (or (and (buffer-file-name)
                                   (not (file-remote-p (buffer-file-name)))
                                   (dir-locals-find-file (buffer-file-name)))
                              dir-locals-file))
          variables)
-
+      (if (consp variables-file)       ; result from cache
+         ;; If cache element has an mtime, assume it came from a file.
+         ;; Otherwise, assume it was set directly.
+         (setq variables-file (if (nth 2 variables-file)
+                                  (expand-file-name dir-locals-file
+                                                    (car variables-file))
+                                (cadr variables-file))))
+      ;; I can't be bothered to handle this case right now.
+      ;; Dir locals were set directly from a class.  You need to
+      ;; directly modify the class in dir-locals-class-alist.
+      (and variables-file (not (stringp variables-file))
+          (throw 'exit (message "Directory locals were not set from a file")))
       ;; Don't create ".dir-locals.el" for the deletion operation.
-      (when (and (eq op 'delete)
-                (not (file-exists-p variables-file)))
-       (throw 'exit (message "File .dir-locals.el not found")))
-
+      (and (eq op 'delete)
+          (or (not variables-file)
+              (not (file-exists-p variables-file)))
+          (throw 'exit (message "No .dir-locals.el file was found")))
       (let ((auto-insert nil))
        (find-file variables-file))
       (widen)