GNU bug report logs - #19140
dir-locals-collect-variables discrepancy in handling non-file buffers

Previous Next

Package: emacs;

Reported by: Ivan Shmakov <ivan <at> siamics.net>

Date: Fri, 21 Nov 2014 16:14:02 UTC

Severity: minor

Tags: patch

Fixed in version 25.1

Done: Ivan Shmakov <ivan <at> siamics.net>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: help-debbugs <at> gnu.org (GNU bug Tracking System)
To: Ivan Shmakov <ivan <at> siamics.net>
Cc: tracker <at> debbugs.gnu.org
Subject: bug#19140: closed (dir-locals-collect-variables discrepancy in
 handling non-file buffers)
Date: Sat, 14 Feb 2015 21:10:02 +0000
[Message part 1 (text/plain, inline)]
Your message dated Sat, 14 Feb 2015 21:09:39 +0000
with message-id <87lhk09p4c.fsf <at> violet.siamics.net>
and subject line Re: bug#19140: dir-locals-collect-variables discrepancy in handling non-file buffers 
has caused the debbugs.gnu.org bug report #19140,
regarding dir-locals-collect-variables discrepancy in handling non-file buffers
to be marked as done.

(If you believe you have received this mail in error, please contact
help-debbugs <at> gnu.org.)


-- 
19140: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=19140
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
From: Ivan Shmakov <ivan <at> siamics.net>
To: submit <at> debbugs.gnu.org
Subject: dir-locals-collect-variables discrepancy in handling non-file buffers
Date: Fri, 21 Nov 2014 16:12:52 +0000
[Message part 3 (text/plain, inline)]
Package:  emacs
Severity: minor

	Please consider the patch MIMEd.

	* lisp/files.el (dir-locals-collect-variables): Use
	default-directory in place of the file name while working on
	non-file buffers (as hack-dir-local-variables already does.)

	The issue I observe is as follows.  First, I create ~/foo and
	~/foo/ru directories, and a ~/foo/.dir-locals.el file like:

((nil
  (ispell-local-dictionary  . "esperanto"))
 ("ru"
  (nil
   (ispell-local-dictionary . "russian"))))

	Then:

(with-temp-buffer
  (cd "~/foo/ru/")
  (hack-dir-local-variables-non-file-buffer)
  ;; .
  dir-local-variables-alist)

	The result is '((ispell-local-dictionary . "esperanto")),
	contrary to the expected '((… . "russian")).

	This does not happen for buffers associated with files:

(with-current-buffer (find-file-noselect "~/foo/ru/bar")
  (hack-dir-local-variables)
  ;; .
  dir-local-variables-alist)

	Reading the code suggests that dir-locals-collect-variables
	fails to handle the (stringp key) case properly when ‘file-name’
	is nil, which is what my patch is intended to fix.

-- 
FSF associate member #7257  np. Conclusion — Apocalyptica    … B6A0 230E 334A
[Message part 4 (text/diff, inline)]
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -3567,8 +3569,10 @@
 (defun dir-locals-collect-variables (class-variables root variables)
   "Collect entries from CLASS-VARIABLES into VARIABLES.
 ROOT is the root directory of the project.
 Return the new variables list."
-  (let* ((file-name (buffer-file-name))
+  (let* ((file-name (or (buffer-file-name)
+			;; handle non-file buffers, too
+			default-directory))
 	 (sub-file-name (if file-name
                             ;; FIXME: Why not use file-relative-name?
 			    (substring file-name (length root)))))
[Message part 5 (message/rfc822, inline)]
From: Ivan Shmakov <ivan <at> siamics.net>
To: 19140-done <at> debbugs.gnu.org
Subject: Re: bug#19140: dir-locals-collect-variables discrepancy in handling
 non-file buffers 
Date: Sat, 14 Feb 2015 21:09:39 +0000
Version: 25.1

>>>>> Ivan Shmakov <ivan <at> siamics.net> writes:
>>>>> Katsumi Yamaoka <yamaoka <at> jpl.org> writes:
>>>>> On Mon, 19 Jan 2015 08:55:43 +0000, Ivan Shmakov wrote:

 >>> Could you please check if both indeed resolve the issue at hand?

 >> Both work.  Thanks.

 > ACK; I’ve just pushed the change to custom-make-dependencies.

 > commit 2e8d209f258c9bb6a6626d4a101995965b040024

 > Fix the value default-directory gets in custom-make-dependencies.

 > * lisp/cus-dep.el (custom-make-dependencies): Ensure that
 > default-directory is interpreted as a directory (see bug#19140.)

	No further issues reported; closing.

commit e000ff30b4354064ca7f9ed07e58903d7c44033f
CommitDate: 2015-01-17 19:33:50 +0000

    Fix dir-locals handling for non-file buffers.
    
    * lisp/files.el (dir-locals-collect-variables): Use default-directory
    in place of the file name while working on non-file buffers, just
    like hack-dir-local-variables already does.
    
    Fixes: debbugs:19140

-- 
FSF associate member #7257  http://boycottsystemd.org/  … 3013 B6A0 230E 334A


This bug report was last modified 10 years and 100 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.