diff options
-rw-r--r-- | lisp/net/tramp.el | 10 | ||||
-rw-r--r-- | test/lisp/net/tramp-tests.el | 8 |
2 files changed, 11 insertions, 7 deletions
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index cc3130e2122..398372883b3 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -3153,15 +3153,11 @@ User is always nil." (defun tramp-handle-file-name-directory (file) "Like `file-name-directory' but aware of Tramp files." - ;; Everything except the last filename thing is the directory. We - ;; cannot apply `with-parsed-tramp-file-name', because this expands - ;; the remote file name parts. This is a problem when we are in - ;; file name completion. - (let ((v (tramp-dissect-file-name file t))) + (with-parsed-tramp-file-name file nil + (setf (tramp-file-name-localname v) nil) ;; Run the command on the localname portion only. (tramp-make-tramp-file-name - v (tramp-run-real-handler - 'file-name-directory (list (or (tramp-file-name-localname v) "")))))) + v (tramp-run-real-handler'file-name-directory (list localname))))) (defun tramp-handle-file-name-nondirectory (file) "Like `file-name-nondirectory' but aware of Tramp files." diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el index 65ffcb34f76..09e9bac9e5c 100644 --- a/test/lisp/net/tramp-tests.el +++ b/test/lisp/net/tramp-tests.el @@ -1939,6 +1939,14 @@ This checks also `file-name-as-directory', `file-name-directory', (file-name-directory "/method:host:/path/to/file/") "/method:host:/path/to/file/")) (should + (string-equal (file-name-directory "/method:host:file") "/method:host:")) + (should + (string-equal + (file-name-directory "/method:host:path/") "/method:host:path/")) + (should + (string-equal + (file-name-directory "/method:host:path/to") "/method:host:path/")) + (should (string-equal (file-name-nondirectory "/method:host:/path/to/file") "file")) (should (string-equal (file-name-nondirectory "/method:host:/path/to/file/") "")) |