emacs-31 707b0ba0f4c 1/3: Fix project--clear-cache and project--value-in-dir in special case
Dmitry Gutov <[email protected]> Thu, 2 Jul 2026 02:01:32 -0400 (EDT)
| Newsgroups | gmane.emacs.diffs |
|---|---|
| Message-ID | <[email protected]> |
branch: emacs-31 commit 707b0ba0f4cc59b451ea039b01af5c977d96e46d Author: Dmitry Gutov <[email protected]> Commit: Dmitry Gutov <[email protected]> Fix project--clear-cache and project--value-in-dir in special case * lisp/progmodes/project.el (project--clear-cache): Make sure to clear the 'project-vc-dir-locals' keys too. (project--value-in-dir): Predicate the cache lookup (and most importantly, write) on whether enable-dir-local-variables is non-nil. So its uses inside recursive 'project-try-vc--search' call do not not bust the value (bug#81317). --- lisp/progmodes/project.el | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el index ebbaa7609ea..557d4260b77 100644 --- a/lisp/progmodes/project.el +++ b/lisp/progmodes/project.el @@ -647,7 +647,9 @@ It is used when `non-essential' is non-nil.") (obarray-map (lambda (sym) (if (get sym 'project-vc) - (put sym 'project-vc nil))) + (put sym 'project-vc nil)) + (if (get sym 'project-vc-dir-locals) + (put sym 'project-vc-dir-locals nil))) vc-file-prop-obarray)) (defun project-try-vc (dir) @@ -967,13 +969,15 @@ DIRS must contain directory names." (defun project--value-in-dir (var dir) (alist-get var - (let ((cached (project--get-cached dir 'project-vc-dir-locals))) - (if (eq cached 'none) - nil - (or cached - (let ((res (project--read-dir-locals dir))) - (project--set-cached dir 'project-vc-dir-locals (or res 'none)) - res)))) + (and + enable-dir-local-variables + (let ((cached (project--get-cached dir 'project-vc-dir-locals))) + (if (eq cached 'none) + nil + (or cached + (let ((res (project--read-dir-locals dir))) + (project--set-cached dir 'project-vc-dir-locals (or res 'none)) + res))))) (default-value var))) (defun project--read-dir-locals (dir)