From c355529baedf3a5f03a8a4ee5904a5918f456b64 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Sat, 18 Nov 2017 14:24:03 +0100 Subject: [PATCH] Fix bug in tramp-handle-file-truename * lisp/net/tramp.el (tramp-handle-file-truename): Expand localname. * test/lisp/net/tramp-tests.el (tramp-test21-file-links): Check also relative symbolic links. --- lisp/net/tramp.el | 3 ++- test/lisp/net/tramp-tests.el | 11 ++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 3d5dcbdbb14..aadfcadebcf 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -3207,7 +3207,8 @@ User is always nil." (if (file-remote-p symlink-target) (let (file-name-handler-alist) (tramp-compat-file-name-quote symlink-target)) - symlink-target) + (expand-file-name + symlink-target (file-name-directory v2-localname))) v2-localname))))) (when (>= numchase numchase-limit) (tramp-error diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el index cf85b071e19..62f72a3f6f6 100644 --- a/test/lisp/net/tramp-tests.el +++ b/test/lisp/net/tramp-tests.el @@ -2671,7 +2671,7 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'." (should-error (make-symbolic-link tmp-name1 tmp-name2) :type 'file-already-exists) - ;; number means interactive case. + ;; A number means interactive case. (cl-letf (((symbol-function 'yes-or-no-p) 'ignore)) (should-error (make-symbolic-link tmp-name1 tmp-name2 0) @@ -2783,6 +2783,15 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'." (should (string-equal (file-truename tmp-name1) (file-truename tmp-name2))) (should (file-equal-p tmp-name1 tmp-name2)) + ;; Check relative symlink file name. + (delete-file tmp-name2) + (let ((default-directory tramp-test-temporary-file-directory)) + (make-symbolic-link (file-name-nondirectory tmp-name1) tmp-name2)) + (should (file-symlink-p tmp-name2)) + (should-not (string-equal tmp-name2 (file-truename tmp-name2))) + (should + (string-equal (file-truename tmp-name1) (file-truename tmp-name2))) + (should (file-equal-p tmp-name1 tmp-name2)) ;; Symbolic links could look like a remote file name. ;; They must be quoted then. (delete-file tmp-name2) -- 2.39.2