summary refs log tree commit diff
diff options
context:
space:
mode:
authorChristopher Lemmer Webber <cwebber@dustycloud.org>2020-11-16 13:04:38 -0500
committerLudovic Courtès <ludo@gnu.org>2020-11-18 15:34:26 +0100
commite385e5fc3c6839ad3d700b50f908df8f6b9f3ad8 (patch)
tree2cc644603785474fa23d2845e2766e28bc174d56
parent37b98e8cca3244067071bc6e382b06861457a459 (diff)
downloadguix-e385e5fc3c6839ad3d700b50f908df8f6b9f3ad8.tar.gz
.dir-locals.el: Prevent errors if .dir-locals.el isn't found.
While this repo should presumably always have a .dir-locals.el
by the nature of this file itself, it seems that this behavior "leaks".
See added comment for more details on the fix to this strange bug,
which is likely an upstream emacs or vc-mode issue.

Thanks to Miguel Ángel Arruga Vivas and Maxim Cournoyer for helping
investigate this problem.

* .dir-locals.el: Don't error out if .dir-locals.el isn't found.
-rw-r--r--.dir-locals.el32
1 files changed, 21 insertions, 11 deletions
diff --git a/.dir-locals.el b/.dir-locals.el
index b1cb936a55..4599f06546 100644
--- a/.dir-locals.el
+++ b/.dir-locals.el
@@ -17,17 +17,27 @@
      ;; Geiser
      ;; This allows automatically setting the `geiser-guile-load-path'
      ;; variable when using various Guix checkouts (e.g., via git worktrees).
-     (eval . (let* ((root-dir (expand-file-name
-                               (locate-dominating-file
-                                default-directory ".dir-locals.el")))
-                    ;; Workaround for bug https://issues.guix.gnu.org/43818.
-                    (root-dir* (directory-file-name root-dir)))
-               (unless (boundp 'geiser-guile-load-path)
-                 (defvar geiser-guile-load-path '()))
-               (make-local-variable 'geiser-guile-load-path)
-               (require 'cl-lib)
-               (cl-pushnew root-dir* geiser-guile-load-path
-                           :test #'string-equal)))))
+     (eval . (let ((root-dir-unexpanded (locate-dominating-file
+                                         default-directory ".dir-locals.el")))
+               ;; While Guix should in theory always have a .dir-locals.el
+               ;; (we are reading this file, after all) there seems to be a
+               ;; strange problem where this code "escapes" to some other buffers,
+               ;; at least vc-mode.  See:
+               ;;   https://lists.gnu.org/archive/html/guix-devel/2020-11/msg00296.html
+               ;; (TODO: add/replace with upstream emacs bug link when reported)
+               ;; Hence the following "when", which might otherwise be unnecessary;
+               ;; it prevents causing an error when root-dir-unexpanded is nil.
+               (when root-dir-unexpanded
+                 (let* ((root-dir (expand-file-name root-dir-unexpanded))
+                        ;; Workaround for bug https://issues.guix.gnu.org/43818.
+                        (root-dir* (directory-file-name root-dir)))
+
+                   (unless (boundp 'geiser-guile-load-path)
+                     (defvar geiser-guile-load-path '()))
+                   (make-local-variable 'geiser-guile-load-path)
+                   (require 'cl-lib)
+                   (cl-pushnew root-dir* geiser-guile-load-path
+                               :test #'string-equal)))))))
 
  (c-mode          . ((c-file-style . "gnu")))
  (scheme-mode