Subject: Re: 27.1; dir-locals.el stay on file-local-variables-alist when using vc-mode

From: Sean Whitton <[email-masked]>
Date: Sat, 08 Mar 2025 11:30:20 +0800

Hello,

On Mon 16 Nov 2020 at 09:30pm +01, Miguel Ángel Arruga Vivas wrote:

> While using vc-mode, the dir-locals.el variables under 'nil' mode are
> accumulated on file-local-variables-alist and they still apply after
> exiting the scope of the file.  The attached script can be used to
> reproduce it (Emacs 27.1, on GNU Guix
> f6e031ab36fd99ad3536caabfdaefcc2b5f606a1).
>
> It generates a temporary folder with two example git repositories, an
> offending dir-locals.el[1], launches an emacs with -Q and the shows
> the steps to follow:
>
> 1. Open p1/file and accept the .dir-locals.el variables.
> 2. Call vc-print-log
> 3. Check the file-local-variables-alist
> 4. Open p2/file (this one doesn't have .dir-locals.el).
> 5. Call vc-print-log again, the message is shown again.

The problem here is that file-local-variables-alist is marked
permanent-local, and vc-log-internal-common re-uses the *vc-change-log*
buffer, so the variable sticks around.  Clearly that is wrong.

What's the idiomatic thing to do in this sort of situation?

Should vc-log-internal-common kill the buffer and re-create it?

That's the change I'll make if no-one has a better idea.

-- 
Sean Whitton