diff options
Diffstat (limited to 'lisp/net/tramp.el')
-rw-r--r-- | lisp/net/tramp.el | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 15380ed94dd..90cc03c188e 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -1504,23 +1504,21 @@ If nil, return `tramp-default-port'." ;;;###tramp-autoload (defun tramp-file-name-unify (vec &optional localname) "Unify VEC by removing localname and hop from `tramp-file-name' structure. -If LOCALNAME is a string, set it as localname. +If LOCALNAME is an absolute file name, set it as localname. If +LOCALNAME is a relative file name, return `tramp-cache-undefined'. Objects returned by this function compare `equal' if they refer to the same connection. Make a copy in order to avoid side effects." - (when (tramp-file-name-p vec) - (setq vec (copy-tramp-file-name vec)) - (setf (tramp-file-name-localname vec) - (and (stringp localname) - ;; FIXME: This is a sanity check. When this error - ;; doesn't happen for a while, it can be removed. - (or (file-name-absolute-p localname) - (tramp-error - vec 'file-error - "File `%s' must be absolute, please report a bug!" - localname)) - (tramp-compat-file-name-unquote (directory-file-name localname))) - (tramp-file-name-hop vec) nil)) - vec) + (if (and (stringp localname) + (not (file-name-absolute-p localname))) + (setq vec tramp-cache-undefined) + (when (tramp-file-name-p vec) + (setq vec (copy-tramp-file-name vec)) + (setf (tramp-file-name-localname vec) + (and (stringp localname) + (tramp-compat-file-name-unquote + (directory-file-name localname))) + (tramp-file-name-hop vec) nil)) + vec)) (put #'tramp-file-name-unify 'tramp-suppress-trace t) |