Subject: bug#28264: closed (Re: bug#28264: Accessing source directory through symlink produces false warnings)

From: [email-masked] (GNU bug Tracking System)
Date: Tue, 29 Aug 2017 04:58:02 +0000

Your bug report

#28264: Accessing source directory through symlink produces false warnings

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
28264: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=28264
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#28264: Accessing source directory through symlink produces false warnings
From: Paul Eggert <[email-masked]>
To: Glenn Morris <[email-masked]>, [email-masked]
Cc: Michael Albinus <[email-masked]>
Date: Mon, 28 Aug 2017 21:57:15 -0700
List-Id: <debbugs-submit.debbugs.gnu.org>

Thanks for the bug report. I reproduced the problem and installed the attached 
patch to fix it. It strikes me, though, that the code still won't work in other 
cases (e.g., symlinks containing ":"), and that Emacs probably has other 
instances of confusion between how it treats symlinks and how the OS treats 
them. I'll CC: this to Michael to give him a heads-up about this particular 
issue, as I'm not really up to speed on magic file names.
>From c1854b1d31e1b0a3a9e91ef41110a5fa77bedb31 Mon Sep 17 00:00:00 2001
From: Paul Eggert <[email-masked]>
Date: Mon, 28 Aug 2017 21:50:09 -0700
Subject: [PATCH] Silence false alarms for symlinks to sources

Problem reported by Glenn Morris (Bug#28264).
* lisp/files.el (files--splice-dirname-file): New function.
(file-truename, file-chase-links): Use it.
---
 lisp/files.el | 26 ++++++++++++++++++--------
 1 file changed, 18 insertions(+), 8 deletions(-)

diff --git a/lisp/files.el b/lisp/files.el
index b3eab29..5f55aa7 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -1153,6 +1153,21 @@ files--name-absolute-system-p
   (and (file-name-absolute-p file)
        (not (eq (aref file 0) ?~))))
 
+(defun files--splice-dirname-file (dirname file)
+  "Splice DIRNAME to FILE like the operating system would.
+If FILENAME is relative, return DIRNAME concatenated to FILE.
+Otherwise return FILE, quoted with `/:' if DIRNAME and FILE have
+different handlers; although this quoting is dubious if DIRNAME
+is remote, it is not clear what would be better.  This function
+differs from `expand-file-name' in that DIRNAME must be a
+directory name and leading `~' and `/:' are not special in FILE."
+  (if (files--name-absolute-system-p file)
+      (if (eq (find-file-name-handler dirname 'file-symlink-p)
+	      (find-file-name-handler file 'file-symlink-p))
+	  file
+	(concat "/:" file))
+    (concat dirname file)))
+
 (defun file-truename (filename &optional counter prev-dirs)
   "Return the truename of FILENAME.
 If FILENAME is not absolute, first expands it against `default-directory'.
@@ -1253,10 +1268,7 @@ file-truename
 		    ;; We can't safely use expand-file-name here
 		    ;; since target might look like foo/../bar where foo
 		    ;; is itself a link.  Instead, we handle . and .. above.
-		    (setq filename
-			  (concat (if (files--name-absolute-system-p target)
-				      "/:" dir)
-				  target)
+		    (setq filename (files--splice-dirname-file dir target)
 			  done nil)
 		  ;; No, we are done!
 		  (setq done t))))))))
@@ -1291,10 +1303,8 @@ file-chase-links
 		 (directory-file-name (file-name-directory newname))))
 	  ;; Now find the parent of that dir.
 	  (setq newname (file-name-directory newname)))
-	(setq newname (concat (if (files--name-absolute-system-p tem)
-				  "/:"
-				(file-name-directory newname))
-			      tem))
+	(setq newname (files--splice-dirname-file (file-name-directory newname)
+						  tem))
 	(setq count (1+ count))))
     newname))
 
-- 
2.7.4

Subject: Accessing source directory through symlink produces false warnings
From: Glenn Morris <[email-masked]>
To: [email-masked]
Date: Mon, 28 Aug 2017 14:25:20 -0400
List-Id: <debbugs-submit.debbugs.gnu.org>

Package: emacs
Version: 26.0.50

Current master (cd0360f) on rhel7.

Emacs sources are in (eg) /tmp/emacs/git/master
cd ~
ln -s /tmp/emacs/git/master
~/master/src/emacs -Q

This results in the following new, spurious warnings:
    
    Warning: arch-dependent data dir '/:/tmp/emacs/git/master/lib-src/':
       No such file or directory
    Warning: Lisp directory '/:/tmp/emacs/git/master/lisp':
       No such file or directory
    
I would suspect recent changes to file name / symlink handling.