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.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 19140 in the body.
You can then email your comments to 19140 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#19140; Package emacs. (Fri, 21 Nov 2014 16:14:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Ivan Shmakov <ivan <at> siamics.net>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Fri, 21 Nov 2014 16:14:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

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 1 (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 2 (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)))))

Added tag(s) patch. Request was from Ivan Shmakov <ivan <at> siamics.net> to control <at> debbugs.gnu.org. (Mon, 29 Dec 2014 09:02:02 GMT) Full text and rfc822 format available.

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#19140; Package emacs. (Tue, 30 Dec 2014 19:47:02 GMT) Full text and rfc822 format available.

Message #10 received at 19140 <at> debbugs.gnu.org (full text, mbox):

From: Ivan Shmakov <ivan <at> siamics.net>
To: 19140 <at> debbugs.gnu.org
Subject: Re: bug#19140: dir-locals-collect-variables discrepancy in handling
 non-file buffers 
Date: Tue, 30 Dec 2014 19:45:57 +0000
	Please consider the revised 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.)

-- 
FSF associate member #7257  http://boycottsystemd.org/  … 3013 B6A0 230E 334A
--- a/lisp/files.el
+++ b/lisp/files.el	2014-12-28 19:20:59+00:00
@@ -3628,7 +3628,9 @@ 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
+			(expand-file-name default-directory)))
 	 (sub-file-name (if file-name
                             ;; FIXME: Why not use file-relative-name?
 			    (substring file-name (length root)))))




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#19140; Package emacs. (Mon, 19 Jan 2015 07:31:01 GMT) Full text and rfc822 format available.

Message #13 received at 19140 <at> debbugs.gnu.org (full text, mbox):

From: Katsumi Yamaoka <yamaoka <at> jpl.org>
To: 19140 <at> debbugs.gnu.org
Subject: Re: bug#19140: dir-locals-collect-variables discrepancy in handling
 non-file buffers
Date: Mon, 19 Jan 2015 16:30:05 +0900
Hi Ivan,

On Tue, 30 Dec 2014 19:45:57 +0000, Ivan Shmakov <ivan <at> siamics.net> wrote:

> 	Please consider the revised 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.)

After this change, I got to get unknown errors[1] when building
Ma Gnus.  To reproduce the same result, try the following in
the Emacs source tree:

% cd lisp/gnus
% emacs -batch -Q --eval FORM
where FORM is:
'(with-temp-buffer (let ((default-directory (expand-file-name ".")))
 (insert-file-contents "./auth-source.el") (hack-local-variables)))'

And you will see

(args-out-of-range "/DIR/emacs/lisp/gnus" 21 nil)

or something similar (where 21 is 1+ the number of letters of
the dir name).

The FORM above is what `custom-make-dependencies' does.  When
building Ma Gnus, `dir-locals-collect-variables' is called in
this way:
  dgnushack.el (dgnushack-make-cus-load)
    -> cus-dep.el (custom-make-dependencies)
       -> files.el (hack-local-variables)
          -> files.el (hack-dir-local-variables)
             -> files.el (dir-locals-collect-variables)

Before you changed `dir-locals-collect-variables', it returned
nil and `custom-make-dependencies' issued no error.  I guess
`custom-make-dependencies' expects the function in question to
return nil, otherwise it needs to be modified in some way.

Thanks.

[1]
% cd /Work/gnus
% ./configure
% make lick
cd lisp && make EMACS="emacs" lispdir="/usr/local/share/emacs/site-lisp/gnus" all
make[1]: Entering directory '/Work/gnus/lisp'
rm -f *.elc gnus-load.el auto-autoloads.* custom-load.*
lispdir="/usr/local/share/emacs/site-lisp/gnus" srcdir=. emacs -batch -q -no-site-file -l ./dgnushack.el -f dgnushack-make-cus-load .
Loading cus-dep...
Directory .
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Directory-local variables error: (args-out-of-range "/Work/gnus/lisp" 16 nil)
Generating cus-load.el...
Generating cus-load.el...done
lispdir="/usr/local/share/emacs/site-lisp/gnus" srcdir=. emacs -batch -q -no-site-file -l ./dgnushack.el -f dgnushack-make-auto-load .
lispdir="/usr/local/share/emacs/site-lisp/gnus" srcdir=. emacs -batch -q -no-site-file -l ./dgnushack.el -f dgnushack-make-load
Generating /Work/gnus/lisp/gnus-load.el...
Compiling /Work/gnus/lisp/gnus-load.el...
[...]




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#19140; Package emacs. (Mon, 19 Jan 2015 08:56:02 GMT) Full text and rfc822 format available.

Message #16 received at 19140 <at> debbugs.gnu.org (full text, mbox):

From: Ivan Shmakov <ivan <at> siamics.net>
To: 19140 <at> debbugs.gnu.org
Subject: Re: bug#19140: dir-locals-collect-variables discrepancy in handling
 non-file buffers 
Date: Mon, 19 Jan 2015 08:55:43 +0000
[Message part 1 (text/plain, inline)]
>>>>> Katsumi Yamaoka <yamaoka <at> jpl.org> writes:
>>>>> On Tue, 30 Dec 2014 19:45:57 +0000, Ivan Shmakov wrote:

[…]

 >> * 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.)

 > After this change, I got to get unknown errors[1] when building
 > Ma Gnus.  To reproduce the same result, try the following in the
 > Emacs source tree:

 > % cd lisp/gnus 
 > % emacs -batch -Q --eval FORM 

 > where FORM is:

 > '(with-temp-buffer (let ((default-directory (expand-file-name ".")))
 > (insert-file-contents "./auth-source.el") (hack-local-variables)))'

 > And you will see

 > (args-out-of-range "/DIR/emacs/lisp/gnus" 21 nil)

 > or something similar (where 21 is 1+ the number of letters of the dir
 > name).

 > The FORM above is what `custom-make-dependencies' does.

	ACK, thanks.  Indeed, this change assumes that the result for
	(expand-file-name default-directory) ends with a ‘/’, yet that’s
	only the case when default-directory itself ends with a ‘/’,
	which I believe it should; consider, e. g.:

(defun cd-absolute (dir)
  "Change current directory to given absolute file name DIR."
  ;; Put the name into directory syntax now,
  ;; because otherwise expand-file-name may give some bad results.
  (setq dir (file-name-as-directory dir))
  …)

	The issue at hand could be solved by using the first of the
	patches MIMEd.  However, I believe that such a change may easily
	mask bugs in the other parts of the code, so the proper solution
	would probably be a fix to custom-make-dependencies, as per the
	second patch MIMEd.

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

	TIA.

[…]

-- 
FSF associate member #7257  http://boycottsystemd.org/  … 3013 B6A0 230E 334A
[Message part 2 (text/diff, inline)]
--- a/lisp/files.el	2015-01-17 19:02:00 +0000
+++ b/lisp/files.el
@@ -3604,7 +3604,8 @@ defun dir-locals-collect-variables (class-variables root variables)
 Return the new variables list."
   (let* ((file-name (or (buffer-file-name)
 			;; Handle non-file buffers, too.
-			(expand-file-name default-directory)))
+			(file-name-as-directory
+			 (expand-file-name default-directory))))
 	 (sub-file-name (if file-name
                             ;; FIXME: Why not use file-relative-name?
 			    (substring file-name (length root)))))
[Message part 3 (text/diff, inline)]
--- a/lisp/cus-dep.el	2015-01-01 22:26:41 +0000
+++ b/lisp/cus-dep.el	2015-01-19 08:49:23 +0000
@@ -62,7 +62,8 @@ defun custom-make-dependencies ()
       (while (setq subdir (pop command-line-args-left))
         (message "Directory %s" subdir)
         (let ((files (directory-files subdir nil "\\`[^=.].*\\.el\\'"))
-              (default-directory (expand-file-name subdir))
+              (default-directory
+		(file-name-as-directory (expand-file-name subdir)))
               (preloaded (concat "\\`\\(\\./+\\)?"
                                  (regexp-opt preloaded-file-list t)
                                  "\\.el\\'")))

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#19140; Package emacs. (Mon, 19 Jan 2015 09:29:02 GMT) Full text and rfc822 format available.

Message #19 received at 19140 <at> debbugs.gnu.org (full text, mbox):

From: Katsumi Yamaoka <yamaoka <at> jpl.org>
To: 19140 <at> debbugs.gnu.org
Subject: Re: bug#19140: dir-locals-collect-variables discrepancy in handling
 non-file buffers
Date: Mon, 19 Jan 2015 18:28:28 +0900
On Mon, 19 Jan 2015 08:55:43 +0000, Ivan Shmakov <ivan <at> siamics.net> wrote:
> so the proper solution would probably be a fix to
> custom-make-dependencies

Hm, I wish there aren't many other modules to have to be fixed.

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

Both work.  Thanks.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#19140; Package emacs. (Mon, 19 Jan 2015 09:57:02 GMT) Full text and rfc822 format available.

Message #22 received at 19140 <at> debbugs.gnu.org (full text, mbox):

From: Ivan Shmakov <ivan <at> siamics.net>
To: 19140 <at> debbugs.gnu.org
Subject: Re: bug#19140: dir-locals-collect-variables discrepancy in handling
 non-file buffers 
Date: Mon, 19 Jan 2015 09:55:46 +0000
>>>>> 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.)

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




Reply sent to Ivan Shmakov <ivan <at> siamics.net>:
You have taken responsibility. (Sat, 14 Feb 2015 21:10:02 GMT) Full text and rfc822 format available.

Notification sent to Ivan Shmakov <ivan <at> siamics.net>:
bug acknowledged by developer. (Sat, 14 Feb 2015 21:10:03 GMT) Full text and rfc822 format available.

Message #27 received at 19140-done <at> debbugs.gnu.org (full text, mbox):

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




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Sun, 15 Mar 2015 11:24:04 GMT) Full text and rfc822 format available.

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.