aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Albinus2020-01-06 12:11:53 +0100
committerMichael Albinus2020-01-06 12:11:53 +0100
commit823ce3aaf928092f3cf1a46f627337edd04f9989 (patch)
tree29c9e95a87328f76d1c827edebccb171afe3b6a4
parent35d569482567acffc992e1c8113ea1eb713dde52 (diff)
downloademacs-823ce3aaf928092f3cf1a46f627337edd04f9989.tar.gz
emacs-823ce3aaf928092f3cf1a46f627337edd04f9989.zip
; Sync with Tramp repository
* doc/misc/tramp.texi (Frequently Asked Questions): Mention Emacs 28. * doc/misc/trampver.texi: * lisp/net/trampver.el: Change version to "2.4.4-pre". * lisp/net/tramp-adb.el (tramp-adb-handle-copy-file) (tramp-adb-handle-rename-file, tramp-adb-handle-process-file): Use `tramp-file-local-name'. (tramp-adb-handle-exec-path): Expand `default-directory'. * lisp/net/tramp-cmds.el (tramp-rename-files): Use `tramp-file-local-name'. * lisp/net/tramp-sh.el (tramp-sh-handle-make-symbolic-link) (tramp-do-copy-or-rename-file-directly) (tramp-sh-handle-process-file, tramp-set-remote-path) (tramp-find-inline-encoding, tramp-get-remote-touch): Use `tramp-file-local-name'. (tramp-sh-handle-make-process): Support `stderr' as file name. Delete temporary stderr file. (tramp-sh-handle-exec-path): Expand `default-directory'. * lisp/net/tramp-smb.el (tramp-smb-handle-make-symbolic-link) (tramp-smb-handle-process-file): Use `tramp-file-local-name'. * lisp/net/tramp-sudoedit.el (tramp-sudoedit-do-copy-or-rename-file) (tramp-sudoedit-handle-set-file-uid-gid): Use `tramp-unquote-file-local-name'. (tramp-sudoedit-handle-make-symbolic-link): Use `tramp-file-local-name'. (tramp-sudoedit-handle-file-system-info): Fix a scoping error. * lisp/net/tramp.el: Bump version to 2.4.4-pre. (tramp-ignored-file-name-regexp, tramp-time-dont-know) (tramp-time-doesnt-exist): Fix typo. (tramp-file-local-name): Extend for non-remote file names. (tramp-unquote-file-local-name): New defun. (tramp-completion-make-tramp-file-name): Simplify. (tramp-set-connection-local-variables-for-buffer) (tramp-equal-remote, tramp-handle-make-auto-save-file-name): Use `tramp-tramp-file-p'. (tramp-handle-file-name-case-insensitive-p) (tramp-handle-file-truename, tramp-get-remote-tmpdir) (tramp-make-tramp-temp-file): Use `tramp-file-local-name'. (tramp-handle-shell-command, tramp-handle-start-file-process): Implement asynchronous `error-buffer'.
-rw-r--r--doc/misc/tramp.texi4
-rw-r--r--doc/misc/trampver.texi2
-rw-r--r--lisp/net/tramp-adb.el15
-rw-r--r--lisp/net/tramp-cmds.el2
-rw-r--r--lisp/net/tramp-compat.el1
-rw-r--r--lisp/net/tramp-rclone.el2
-rw-r--r--lisp/net/tramp-sh.el61
-rw-r--r--lisp/net/tramp-smb.el6
-rw-r--r--lisp/net/tramp-sudoedit.el13
-rw-r--r--lisp/net/tramp.el76
-rw-r--r--lisp/net/trampver.el4
11 files changed, 108 insertions, 78 deletions
diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi
index f81d996d73a..049b240b602 100644
--- a/doc/misc/tramp.texi
+++ b/doc/misc/tramp.texi
@@ -3840,8 +3840,8 @@ Where is the latest @value{tramp}?
3840@item 3840@item
3841Which systems does it work on? 3841Which systems does it work on?
3842 3842
3843The package works successfully on Emacs 24, Emacs 25, Emacs 26, and 3843The package works successfully on Emacs 24, Emacs 25, Emacs 26, Emacs
3844Emacs 27. 384427, and Emacs 28.
3845 3845
3846While Unix and Unix-like systems are the primary remote targets, 3846While Unix and Unix-like systems are the primary remote targets,
3847@value{tramp} has equal success connecting to other platforms, such as 3847@value{tramp} has equal success connecting to other platforms, such as
diff --git a/doc/misc/trampver.texi b/doc/misc/trampver.texi
index 478ec7037a8..02a99ebde83 100644
--- a/doc/misc/trampver.texi
+++ b/doc/misc/trampver.texi
@@ -8,7 +8,7 @@
8@c In the Tramp GIT, the version numbers are auto-frobbed from 8@c In the Tramp GIT, the version numbers are auto-frobbed from
9@c tramp.el, and the bug report address is auto-frobbed from 9@c tramp.el, and the bug report address is auto-frobbed from
10@c configure.ac. 10@c configure.ac.
11@set trampver 2.4.3.27.1 11@set trampver 2.4.4-pre
12@set tramp-bug-report-address tramp-devel@@gnu.org 12@set tramp-bug-report-address tramp-devel@@gnu.org
13@set emacsver 24.4 13@set emacsver 24.4
14 14
diff --git a/lisp/net/tramp-adb.el b/lisp/net/tramp-adb.el
index 5cfcb81708f..1be2d16bcb1 100644
--- a/lisp/net/tramp-adb.el
+++ b/lisp/net/tramp-adb.el
@@ -725,8 +725,8 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored."
725 (with-tramp-progress-reporter 725 (with-tramp-progress-reporter
726 v 0 (format "Copying %s to %s" filename newname) 726 v 0 (format "Copying %s to %s" filename newname)
727 (if (and t1 t2 (tramp-equal-remote filename newname)) 727 (if (and t1 t2 (tramp-equal-remote filename newname))
728 (let ((l1 (tramp-compat-file-local-name filename)) 728 (let ((l1 (tramp-file-local-name filename))
729 (l2 (tramp-compat-file-local-name newname))) 729 (l2 (tramp-file-local-name newname)))
730 ;; We must also flush the cache of the directory, 730 ;; We must also flush the cache of the directory,
731 ;; because `file-attributes' reads the values from 731 ;; because `file-attributes' reads the values from
732 ;; there. 732 ;; there.
@@ -809,8 +809,8 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored."
809 (if (and t1 t2 809 (if (and t1 t2
810 (tramp-equal-remote filename newname) 810 (tramp-equal-remote filename newname)
811 (not (file-directory-p filename))) 811 (not (file-directory-p filename)))
812 (let ((l1 (tramp-compat-file-local-name filename)) 812 (let ((l1 (tramp-file-local-name filename))
813 (l2 (tramp-compat-file-local-name newname))) 813 (l2 (tramp-file-local-name newname)))
814 ;; We must also flush the cache of the directory, because 814 ;; We must also flush the cache of the directory, because
815 ;; `file-attributes' reads the values from there. 815 ;; `file-attributes' reads the values from there.
816 (tramp-flush-file-properties v l1) 816 (tramp-flush-file-properties v l1)
@@ -846,7 +846,7 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored."
846 (setq infile (expand-file-name infile)) 846 (setq infile (expand-file-name infile))
847 (if (tramp-equal-remote default-directory infile) 847 (if (tramp-equal-remote default-directory infile)
848 ;; INFILE is on the same remote host. 848 ;; INFILE is on the same remote host.
849 (setq input (with-parsed-tramp-file-name infile nil localname)) 849 (setq input (tramp-file-local-name infile))
850 ;; INFILE must be copied to remote host. 850 ;; INFILE must be copied to remote host.
851 (setq input (tramp-make-tramp-temp-file v) 851 (setq input (tramp-make-tramp-temp-file v)
852 tmpinput (tramp-make-tramp-file-name v input)) 852 tmpinput (tramp-make-tramp-file-name v input))
@@ -877,8 +877,7 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored."
877 (setcar (cdr destination) (expand-file-name (cadr destination))) 877 (setcar (cdr destination) (expand-file-name (cadr destination)))
878 (if (tramp-equal-remote default-directory (cadr destination)) 878 (if (tramp-equal-remote default-directory (cadr destination))
879 ;; stderr is on the same remote host. 879 ;; stderr is on the same remote host.
880 (setq stderr (with-parsed-tramp-file-name 880 (setq stderr (tramp-file-local-name (cadr destination)))
881 (cadr destination) nil localname))
882 ;; stderr must be copied to remote host. The temporary 881 ;; stderr must be copied to remote host. The temporary
883 ;; file must be deleted after execution. 882 ;; file must be deleted after execution.
884 (setq stderr (tramp-make-tramp-temp-file v) 883 (setq stderr (tramp-make-tramp-temp-file v)
@@ -1062,7 +1061,7 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored."
1062 (read (current-buffer))) 1061 (read (current-buffer)))
1063 ":" 'omit))) 1062 ":" 'omit)))
1064 ;; The equivalent to `exec-directory'. 1063 ;; The equivalent to `exec-directory'.
1065 `(,(tramp-compat-file-local-name default-directory)))) 1064 `(,(tramp-file-local-name (expand-file-name default-directory)))))
1066 1065
1067(defun tramp-adb-get-device (vec) 1066(defun tramp-adb-get-device (vec)
1068 "Return full host name from VEC to be used in shell execution. 1067 "Return full host name from VEC to be used in shell execution.
diff --git a/lisp/net/tramp-cmds.el b/lisp/net/tramp-cmds.el
index 9d1025b9072..b4dca2321c1 100644
--- a/lisp/net/tramp-cmds.el
+++ b/lisp/net/tramp-cmds.el
@@ -358,7 +358,7 @@ The remote connection identified by SOURCE is flushed by
358 358
359 ;; Append local file name if none is specified. 359 ;; Append local file name if none is specified.
360 (when (string-equal (file-remote-p target) target) 360 (when (string-equal (file-remote-p target) target)
361 (setq target (concat target (file-remote-p source 'localname)))) 361 (setq target (concat target (tramp-file-local-name source))))
362 ;; Make them directory names. 362 ;; Make them directory names.
363 (setq source (directory-file-name source) 363 (setq source (directory-file-name source)
364 target (directory-file-name target)) 364 target (directory-file-name target))
diff --git a/lisp/net/tramp-compat.el b/lisp/net/tramp-compat.el
index 723b8cfa1e3..3f25afedb99 100644
--- a/lisp/net/tramp-compat.el
+++ b/lisp/net/tramp-compat.el
@@ -41,6 +41,7 @@
41(require 'shell) 41(require 'shell)
42(require 'subr-x) 42(require 'subr-x)
43 43
44;; `temporary-file-directory' as function is introduced with Emacs 26.1.
44(declare-function tramp-handle-temporary-file-directory "tramp") 45(declare-function tramp-handle-temporary-file-directory "tramp")
45 46
46;; For not existing functions, obsolete functions, or functions with a 47;; For not existing functions, obsolete functions, or functions with a
diff --git a/lisp/net/tramp-rclone.el b/lisp/net/tramp-rclone.el
index 9f539850139..0d1ef0f0e91 100644
--- a/lisp/net/tramp-rclone.el
+++ b/lisp/net/tramp-rclone.el
@@ -564,7 +564,7 @@ connection if a previous connection has died for some reason."
564 ,(tramp-rclone-mount-point vec) 564 ,(tramp-rclone-mount-point vec)
565 ;; This could be nil. 565 ;; This could be nil.
566 ,(tramp-get-method-parameter vec 'tramp-mount-args)))) 566 ,(tramp-get-method-parameter vec 'tramp-mount-args))))
567 (while (not (file-exists-p (tramp-make-tramp-file-name vec 'localname))) 567 (while (not (file-exists-p (tramp-make-tramp-file-name vec 'noloc)))
568 (tramp-cleanup-connection vec 'keep-debug 'keep-password)) 568 (tramp-cleanup-connection vec 'keep-debug 'keep-password))
569 569
570 ;; Mark it as connected. 570 ;; Mark it as connected.
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index af97328b3d3..6a83cfebfa8 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -1051,9 +1051,7 @@ component is used as the target of the symlink."
1051 (let ((non-essential t)) 1051 (let ((non-essential t))
1052 (when (and (tramp-tramp-file-p target) 1052 (when (and (tramp-tramp-file-p target)
1053 (tramp-file-name-equal-p v (tramp-dissect-file-name target))) 1053 (tramp-file-name-equal-p v (tramp-dissect-file-name target)))
1054 (setq target 1054 (setq target (tramp-file-local-name (expand-file-name target)))))
1055 (tramp-file-name-localname
1056 (tramp-dissect-file-name (expand-file-name target))))))
1057 1055
1058 ;; If TARGET is still remote, quote it. 1056 ;; If TARGET is still remote, quote it.
1059 (if (tramp-tramp-file-p target) 1057 (if (tramp-tramp-file-p target)
@@ -2171,8 +2169,8 @@ the uid and gid from FILENAME."
2171 v 'file-error 2169 v 'file-error
2172 "Unknown operation `%s', must be `copy' or `rename'" 2170 "Unknown operation `%s', must be `copy' or `rename'"
2173 op)))) 2171 op))))
2174 (localname1 (tramp-compat-file-local-name filename)) 2172 (localname1 (tramp-file-local-name filename))
2175 (localname2 (tramp-compat-file-local-name newname)) 2173 (localname2 (tramp-file-local-name newname))
2176 (prefix (file-remote-p (if t1 filename newname))) 2174 (prefix (file-remote-p (if t1 filename newname)))
2177 cmd-result) 2175 cmd-result)
2178 (when (and (eq op 'copy) (file-directory-p filename)) 2176 (when (and (eq op 'copy) (file-directory-p filename))
@@ -2797,7 +2795,8 @@ the result will be a local, non-Tramp, file name."
2797;; this, its original contents must be saved, and restored once 2795;; this, its original contents must be saved, and restored once
2798;; connection has been setup. 2796;; connection has been setup.
2799(defun tramp-sh-handle-make-process (&rest args) 2797(defun tramp-sh-handle-make-process (&rest args)
2800 "Like `make-process' for Tramp files." 2798 "Like `make-process' for Tramp files.
2799STDERR can also be a file name."
2801 (when args 2800 (when args
2802 (with-parsed-tramp-file-name (expand-file-name default-directory) nil 2801 (with-parsed-tramp-file-name (expand-file-name default-directory) nil
2803 (let ((name (plist-get args :name)) 2802 (let ((name (plist-get args :name))
@@ -2829,14 +2828,21 @@ the result will be a local, non-Tramp, file name."
2829 (signal 'wrong-type-argument (list #'functionp sentinel))) 2828 (signal 'wrong-type-argument (list #'functionp sentinel)))
2830 (unless (or (null stderr) (bufferp stderr) (stringp stderr)) 2829 (unless (or (null stderr) (bufferp stderr) (stringp stderr))
2831 (signal 'wrong-type-argument (list #'stringp stderr))) 2830 (signal 'wrong-type-argument (list #'stringp stderr)))
2831 (when (and (stringp stderr) (tramp-tramp-file-p stderr)
2832 (not (tramp-equal-remote default-directory stderr)))
2833 (signal 'file-error (list "Wrong stderr" stderr)))
2832 2834
2833 (let* ((buffer 2835 (let* ((buffer
2834 (if buffer 2836 (if buffer
2835 (get-buffer-create buffer) 2837 (get-buffer-create buffer)
2836 ;; BUFFER can be nil. We use a temporary buffer. 2838 ;; BUFFER can be nil. We use a temporary buffer.
2837 (generate-new-buffer tramp-temp-buffer-name))) 2839 (generate-new-buffer tramp-temp-buffer-name)))
2838 (stderr (and stderr (get-buffer-create stderr))) 2840 ;; STDERR can also be a file name.
2839 (tmpstderr (and stderr (tramp-make-tramp-temp-file v))) 2841 (tmpstderr
2842 (and stderr
2843 (if (and (stringp stderr) (tramp-tramp-file-p stderr))
2844 (tramp-unquote-file-local-name stderr)
2845 (tramp-make-tramp-temp-file v))))
2840 (program (car command)) 2846 (program (car command))
2841 (args (cdr command)) 2847 (args (cdr command))
2842 ;; When PROGRAM matches "*sh", and the first arg is 2848 ;; When PROGRAM matches "*sh", and the first arg is
@@ -2965,13 +2971,20 @@ the result will be a local, non-Tramp, file name."
2965 (ignore-errors 2971 (ignore-errors
2966 (set-process-query-on-exit-flag p (null noquery)) 2972 (set-process-query-on-exit-flag p (null noquery))
2967 (set-marker (process-mark p) (point))) 2973 (set-marker (process-mark p) (point)))
2974 ;; Copy tmpstderr file.
2975 (when (and (stringp stderr)
2976 (not (tramp-tramp-file-p stderr)))
2977 (add-function
2978 :after (process-sentinel p)
2979 (lambda (_proc _msg)
2980 (rename-file
2981 (tramp-make-tramp-file-name v tmpstderr) stderr))))
2968 ;; Provide error buffer. This shows only 2982 ;; Provide error buffer. This shows only
2969 ;; initial error messages; messages arriving 2983 ;; initial error messages; messages arriving
2970 ;; later on shall be inserted by `auto-revert'. 2984 ;; later on shall be inserted by `auto-revert'.
2971 ;; The temporary file will still be existing. 2985 ;; The temporary file will exist until the
2972 ;; TODO: Write a sentinel, which deletes the 2986 ;; process is deleted.
2973 ;; temporary file. 2987 (when (bufferp stderr)
2974 (when tmpstderr
2975 ;; We must flush them here already; otherwise 2988 ;; We must flush them here already; otherwise
2976 ;; `insert-file-contents' will fail. 2989 ;; `insert-file-contents' will fail.
2977 (tramp-flush-connection-property v "process-name") 2990 (tramp-flush-connection-property v "process-name")
@@ -2979,7 +2992,13 @@ the result will be a local, non-Tramp, file name."
2979 (with-current-buffer stderr 2992 (with-current-buffer stderr
2980 (insert-file-contents 2993 (insert-file-contents
2981 (tramp-make-tramp-file-name v tmpstderr) 'visit) 2994 (tramp-make-tramp-file-name v tmpstderr) 'visit)
2982 (auto-revert-mode))) 2995 (auto-revert-mode))
2996 ;; Delete tmpstderr file.
2997 (add-function
2998 :after (process-sentinel p)
2999 (lambda (_proc _msg)
3000 (delete-file
3001 (tramp-make-tramp-file-name v tmpstderr)))))
2983 ;; Return process. 3002 ;; Return process.
2984 p))) 3003 p)))
2985 3004
@@ -3028,7 +3047,7 @@ the result will be a local, non-Tramp, file name."
3028 (setq infile (expand-file-name infile)) 3047 (setq infile (expand-file-name infile))
3029 (if (tramp-equal-remote default-directory infile) 3048 (if (tramp-equal-remote default-directory infile)
3030 ;; INFILE is on the same remote host. 3049 ;; INFILE is on the same remote host.
3031 (setq input (with-parsed-tramp-file-name infile nil localname)) 3050 (setq input (tramp-file-local-name infile))
3032 ;; INFILE must be copied to remote host. 3051 ;; INFILE must be copied to remote host.
3033 (setq input (tramp-make-tramp-temp-file v) 3052 (setq input (tramp-make-tramp-temp-file v)
3034 tmpinput (tramp-make-tramp-file-name v input 'nohop)) 3053 tmpinput (tramp-make-tramp-file-name v input 'nohop))
@@ -3059,8 +3078,7 @@ the result will be a local, non-Tramp, file name."
3059 (setcar (cdr destination) (expand-file-name (cadr destination))) 3078 (setcar (cdr destination) (expand-file-name (cadr destination)))
3060 (if (tramp-equal-remote default-directory (cadr destination)) 3079 (if (tramp-equal-remote default-directory (cadr destination))
3061 ;; stderr is on the same remote host. 3080 ;; stderr is on the same remote host.
3062 (setq stderr (with-parsed-tramp-file-name 3081 (setq stderr (tramp-file-local-name (cadr destination)))
3063 (cadr destination) nil localname))
3064 ;; stderr must be copied to remote host. The temporary 3082 ;; stderr must be copied to remote host. The temporary
3065 ;; file must be deleted after execution. 3083 ;; file must be deleted after execution.
3066 (setq stderr (tramp-make-tramp-temp-file v) 3084 (setq stderr (tramp-make-tramp-temp-file v)
@@ -3122,7 +3140,7 @@ the result will be a local, non-Tramp, file name."
3122 (append 3140 (append
3123 (tramp-get-remote-path (tramp-dissect-file-name default-directory)) 3141 (tramp-get-remote-path (tramp-dissect-file-name default-directory))
3124 ;; The equivalent to `exec-directory'. 3142 ;; The equivalent to `exec-directory'.
3125 `(,(tramp-compat-file-local-name default-directory)))) 3143 `(,(tramp-file-local-name (expand-file-name default-directory)))))
3126 3144
3127(defun tramp-sh-handle-file-local-copy (filename) 3145(defun tramp-sh-handle-file-local-copy (filename)
3128 "Like `file-local-copy' for Tramp files." 3146 "Like `file-local-copy' for Tramp files."
@@ -3995,8 +4013,7 @@ variable PATH."
3995 (setq tmpfile 4013 (setq tmpfile
3996 (tramp-make-tramp-file-name vec (tramp-make-tramp-temp-file vec))) 4014 (tramp-make-tramp-file-name vec (tramp-make-tramp-temp-file vec)))
3997 (write-region command nil tmpfile) 4015 (write-region command nil tmpfile)
3998 (tramp-send-command 4016 (tramp-send-command vec (format ". %s" (tramp-file-local-name tmpfile)))
3999 vec (format ". %s" (tramp-compat-file-local-name tmpfile)))
4000 (delete-file tmpfile)))) 4017 (delete-file tmpfile))))
4001 4018
4002;; ------------------------------------------------------------ 4019;; ------------------------------------------------------------
@@ -4513,7 +4530,7 @@ Goes through the list `tramp-local-coding-commands' and
4513 (format-spec 4530 (format-spec
4514 value 4531 value
4515 (format-spec-make 4532 (format-spec-make
4516 ?t (tramp-compat-file-local-name tmpfile))))) 4533 ?t (tramp-file-local-name tmpfile)))))
4517 (tramp-maybe-send-script vec value name) 4534 (tramp-maybe-send-script vec value name)
4518 (setq rem-dec name))) 4535 (setq rem-dec name)))
4519 (tramp-message 4536 (tramp-message
@@ -4796,7 +4813,7 @@ If there is just some editing, retry it after 5 seconds."
4796 vec 5 "Cannot timeout session, trying it again in %s seconds." 5) 4813 vec 5 "Cannot timeout session, trying it again in %s seconds." 5)
4797 (run-at-time 5 nil 'tramp-timeout-session vec)) 4814 (run-at-time 5 nil 'tramp-timeout-session vec))
4798 (tramp-message 4815 (tramp-message
4799 vec 3 "Timeout session %s" (tramp-make-tramp-file-name vec 'localname)) 4816 vec 3 "Timeout session %s" (tramp-make-tramp-file-name vec 'noloc))
4800 (tramp-cleanup-connection vec 'keep-debug))) 4817 (tramp-cleanup-connection vec 'keep-debug)))
4801 4818
4802(defun tramp-maybe-open-connection (vec) 4819(defun tramp-maybe-open-connection (vec)
@@ -5594,7 +5611,7 @@ This command is returned only if `delete-by-moving-to-trash' is non-nil."
5594 "%s -t %s %s" 5611 "%s -t %s %s"
5595 result 5612 result
5596 (format-time-string "%Y%m%d%H%M.%S") 5613 (format-time-string "%Y%m%d%H%M.%S")
5597 (tramp-compat-file-local-name tmpfile)))) 5614 (tramp-file-local-name tmpfile))))
5598 (delete-file tmpfile)) 5615 (delete-file tmpfile))
5599 result))) 5616 result)))
5600 5617
diff --git a/lisp/net/tramp-smb.el b/lisp/net/tramp-smb.el
index bf77ab9dee8..d233af124e8 100644
--- a/lisp/net/tramp-smb.el
+++ b/lisp/net/tramp-smb.el
@@ -1188,9 +1188,7 @@ component is used as the target of the symlink."
1188 (let ((non-essential t)) 1188 (let ((non-essential t))
1189 (when (and (tramp-tramp-file-p target) 1189 (when (and (tramp-tramp-file-p target)
1190 (tramp-file-name-equal-p v (tramp-dissect-file-name target))) 1190 (tramp-file-name-equal-p v (tramp-dissect-file-name target)))
1191 (setq target 1191 (setq target (tramp-file-local-name (expand-file-name target)))))
1192 (tramp-file-name-localname
1193 (tramp-dissect-file-name (expand-file-name target))))))
1194 1192
1195 ;; If TARGET is still remote, quote it. 1193 ;; If TARGET is still remote, quote it.
1196 (if (tramp-tramp-file-p target) 1194 (if (tramp-tramp-file-p target)
@@ -1244,7 +1242,7 @@ component is used as the target of the symlink."
1244 (setq infile (expand-file-name infile)) 1242 (setq infile (expand-file-name infile))
1245 (if (tramp-equal-remote default-directory infile) 1243 (if (tramp-equal-remote default-directory infile)
1246 ;; INFILE is on the same remote host. 1244 ;; INFILE is on the same remote host.
1247 (setq input (with-parsed-tramp-file-name infile nil localname)) 1245 (setq input (tramp-file-local-name infile))
1248 ;; INFILE must be copied to remote host. 1246 ;; INFILE must be copied to remote host.
1249 (setq input (tramp-make-tramp-temp-file v) 1247 (setq input (tramp-make-tramp-temp-file v)
1250 tmpinput (tramp-make-tramp-file-name v input)) 1248 tmpinput (tramp-make-tramp-file-name v input))
diff --git a/lisp/net/tramp-sudoedit.el b/lisp/net/tramp-sudoedit.el
index 08188cefde3..e5590b8cf6c 100644
--- a/lisp/net/tramp-sudoedit.el
+++ b/lisp/net/tramp-sudoedit.el
@@ -265,10 +265,8 @@ absolute file names."
265 v 0 (format "%s %s to %s" msg-operation filename newname) 265 v 0 (format "%s %s to %s" msg-operation filename newname)
266 (unless (tramp-sudoedit-send-command 266 (unless (tramp-sudoedit-send-command
267 v sudoedit-operation 267 v sudoedit-operation
268 (tramp-compat-file-name-unquote 268 (tramp-unquote-file-local-name filename)
269 (tramp-compat-file-local-name filename)) 269 (tramp-unquote-file-local-name newname))
270 (tramp-compat-file-name-unquote
271 (tramp-compat-file-local-name newname)))
272 (tramp-error 270 (tramp-error
273 v 'file-error 271 v 'file-error
274 "Error %s `%s' `%s'" msg-operation filename newname)))) 272 "Error %s `%s' `%s'" msg-operation filename newname))))
@@ -615,9 +613,7 @@ component is used as the target of the symlink."
615 (let ((non-essential t)) 613 (let ((non-essential t))
616 (when (and (tramp-tramp-file-p target) 614 (when (and (tramp-tramp-file-p target)
617 (tramp-file-name-equal-p v (tramp-dissect-file-name target))) 615 (tramp-file-name-equal-p v (tramp-dissect-file-name target)))
618 (setq target 616 (setq target (tramp-file-local-name (expand-file-name target)))))
619 (tramp-file-name-localname
620 (tramp-dissect-file-name (expand-file-name target))))))
621 617
622 ;; If TARGET is still remote, quote it. 618 ;; If TARGET is still remote, quote it.
623 (if (tramp-tramp-file-p target) 619 (if (tramp-tramp-file-p target)
@@ -715,8 +711,7 @@ ID-FORMAT valid values are `string' and `integer'."
715 (format "%d:%d" 711 (format "%d:%d"
716 (or uid (tramp-sudoedit-get-remote-uid v 'integer)) 712 (or uid (tramp-sudoedit-get-remote-uid v 'integer))
717 (or gid (tramp-sudoedit-get-remote-gid v 'integer))) 713 (or gid (tramp-sudoedit-get-remote-gid v 'integer)))
718 (tramp-compat-file-name-unquote 714 (tramp-unquote-file-local-name filename))))
719 (tramp-compat-file-local-name filename)))))
720 715
721(defun tramp-sudoedit-handle-write-region 716(defun tramp-sudoedit-handle-write-region
722 (start end filename &optional append visit lockname mustbenew) 717 (start end filename &optional append visit lockname mustbenew)
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index 52c6a9ec430..22bac9ce459 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -7,7 +7,7 @@
7;; Maintainer: Michael Albinus <michael.albinus@gmx.de> 7;; Maintainer: Michael Albinus <michael.albinus@gmx.de>
8;; Keywords: comm, processes 8;; Keywords: comm, processes
9;; Package: tramp 9;; Package: tramp
10;; Version: 2.4.3 10;; Version: 2.4.4-pre
11;; Package-Requires: ((emacs "24.4")) 11;; Package-Requires: ((emacs "24.4"))
12;; Package-Type: multi 12;; Package-Type: multi
13;; URL: https://savannah.gnu.org/projects/tramp 13;; URL: https://savannah.gnu.org/projects/tramp
@@ -1340,13 +1340,20 @@ entry does not exist, return nil."
1340This function removes from NAME the specification of the remote 1340This function removes from NAME the specification of the remote
1341host and the method of accessing the host, leaving only the part 1341host and the method of accessing the host, leaving only the part
1342that identifies NAME locally on the remote system. NAME must be 1342that identifies NAME locally on the remote system. NAME must be
1343a string that matches `tramp-file-name-regexp'. The returned 1343a string that matches `tramp-file-name-regexp'. If NAME does not
1344file name can be used directly as argument of `process-file', 1344match `tramp-file-name-regexp', just NAME is returned. The
1345`start-file-process', or `shell-command'." 1345returned file name can be used directly as argument of
1346`process-file', `start-file-process', or `shell-command'."
1346 (save-match-data 1347 (save-match-data
1347 (and (tramp-tramp-file-p name) 1348 (or (and (tramp-tramp-file-p name)
1348 (string-match (nth 0 tramp-file-name-structure) name) 1349 (string-match (nth 0 tramp-file-name-structure) name)
1349 (match-string (nth 4 tramp-file-name-structure) name)))) 1350 (match-string (nth 4 tramp-file-name-structure) name))
1351 name)))
1352
1353;; The localname can be quoted with "/:". Extract this.
1354(defun tramp-unquote-file-local-name (name)
1355 "Return unquoted localname of NAME."
1356 (tramp-compat-file-name-unquote (tramp-file-local-name name)))
1350 1357
1351(defun tramp-find-method (method user host) 1358(defun tramp-find-method (method user host)
1352 "Return the right method string to use depending on USER and HOST. 1359 "Return the right method string to use depending on USER and HOST.
@@ -1593,7 +1600,7 @@ necessary only. This function will be used in file name completion."
1593 tramp-prefix-ipv6-format host tramp-postfix-ipv6-format) 1600 tramp-prefix-ipv6-format host tramp-postfix-ipv6-format)
1594 host) 1601 host)
1595 tramp-postfix-host-format)) 1602 tramp-postfix-host-format))
1596 (when localname localname))) 1603 localname))
1597 1604
1598(defun tramp-get-buffer (vec &optional dont-create) 1605(defun tramp-get-buffer (vec &optional dont-create)
1599 "Get the connection buffer to be used for VEC. 1606 "Get the connection buffer to be used for VEC.
@@ -1649,7 +1656,7 @@ version, the function does nothing."
1649 "Set connection-local variables in the current buffer. 1656 "Set connection-local variables in the current buffer.
1650If connection-local variables are not supported by this Emacs 1657If connection-local variables are not supported by this Emacs
1651version, the function does nothing." 1658version, the function does nothing."
1652 (when (file-remote-p default-directory) 1659 (when (tramp-tramp-file-p default-directory)
1653 ;; `hack-connection-local-variables-apply' exists since Emacs 26.1. 1660 ;; `hack-connection-local-variables-apply' exists since Emacs 26.1.
1654 (tramp-compat-funcall 1661 (tramp-compat-funcall
1655 'hack-connection-local-variables-apply 1662 'hack-connection-local-variables-apply
@@ -3248,7 +3255,7 @@ User is always nil."
3248 ;; lower case letters. This avoids us to create a 3255 ;; lower case letters. This avoids us to create a
3249 ;; temporary file. 3256 ;; temporary file.
3250 (while (and (string-match-p 3257 (while (and (string-match-p
3251 "[a-z]" (tramp-compat-file-local-name candidate)) 3258 "[a-z]" (tramp-file-local-name candidate))
3252 (not (file-exists-p candidate))) 3259 (not (file-exists-p candidate)))
3253 (setq candidate 3260 (setq candidate
3254 (directory-file-name 3261 (directory-file-name
@@ -3258,8 +3265,7 @@ User is always nil."
3258 ;; to Emacs 26+ like `file-name-case-insensitive-p', 3265 ;; to Emacs 26+ like `file-name-case-insensitive-p',
3259 ;; so there is no compatibility problem calling it. 3266 ;; so there is no compatibility problem calling it.
3260 (unless 3267 (unless
3261 (string-match-p 3268 (string-match-p "[a-z]" (tramp-file-local-name candidate))
3262 "[a-z]" (tramp-compat-file-local-name candidate))
3263 (setq tmpfile 3269 (setq tmpfile
3264 (let ((default-directory 3270 (let ((default-directory
3265 (file-name-directory filename))) 3271 (file-name-directory filename)))
@@ -3272,7 +3278,7 @@ User is always nil."
3272 (file-exists-p 3278 (file-exists-p
3273 (concat 3279 (concat
3274 (file-remote-p candidate) 3280 (file-remote-p candidate)
3275 (upcase (tramp-compat-file-local-name candidate)))) 3281 (upcase (tramp-file-local-name candidate))))
3276 ;; Cleanup. 3282 ;; Cleanup.
3277 (when tmpfile (delete-file tmpfile))))))))))) 3283 (when tmpfile (delete-file tmpfile)))))))))))
3278 3284
@@ -3414,7 +3420,7 @@ User is always nil."
3414 (tramp-error 3420 (tramp-error
3415 v1 'file-error 3421 v1 'file-error
3416 "Maximum number (%d) of symlinks exceeded" numchase-limit))) 3422 "Maximum number (%d) of symlinks exceeded" numchase-limit)))
3417 (tramp-compat-file-local-name (directory-file-name result))))))))) 3423 (tramp-file-local-name (directory-file-name result)))))))))
3418 3424
3419(defun tramp-handle-file-writable-p (filename) 3425(defun tramp-handle-file-writable-p (filename)
3420 "Like `file-writable-p' for Tramp files." 3426 "Like `file-writable-p' for Tramp files."
@@ -3699,7 +3705,7 @@ support symbolic links."
3699 (rename-uniquely)) 3705 (rename-uniquely))
3700 (setq output-buffer (get-buffer-create bname))))) 3706 (setq output-buffer (get-buffer-create bname)))))
3701 3707
3702 (setq buffer (if (and (not asynchronous) error-buffer) 3708 (setq buffer (if error-buffer
3703 (with-parsed-tramp-file-name default-directory nil 3709 (with-parsed-tramp-file-name default-directory nil
3704 (list output-buffer 3710 (list output-buffer
3705 (tramp-make-tramp-file-name 3711 (tramp-make-tramp-file-name
@@ -3727,13 +3733,24 @@ support symbolic links."
3727 ;; Run the process. 3733 ;; Run the process.
3728 (setq p (start-file-process-shell-command 3734 (setq p (start-file-process-shell-command
3729 (buffer-name output-buffer) buffer command)) 3735 (buffer-name output-buffer) buffer command))
3730 ;; Display output. 3736 (if (process-live-p p)
3731 (with-current-buffer output-buffer 3737 ;; Display output.
3732 (display-buffer output-buffer '(nil (allow-no-window . t))) 3738 (with-current-buffer output-buffer
3733 (setq mode-line-process '(":%s")) 3739 (display-buffer output-buffer '(nil (allow-no-window . t)))
3734 (shell-mode) 3740 (setq mode-line-process '(":%s"))
3735 (set-process-sentinel p #'shell-command-sentinel) 3741 (shell-mode)
3736 (set-process-filter p #'comint-output-filter)))) 3742 (set-process-filter p #'comint-output-filter)
3743 (set-process-sentinel
3744 p (if (listp buffer)
3745 (lambda (_proc _string)
3746 (with-current-buffer error-buffer
3747 (insert-file-contents (cadr buffer)))
3748 (delete-file (cadr buffer)))
3749 #'shell-command-sentinel)))
3750 ;; Show stderr.
3751 (with-current-buffer error-buffer
3752 (insert-file-contents (cadr buffer)))
3753 (delete-file (cadr buffer)))))
3737 3754
3738 (prog1 3755 (prog1
3739 ;; Run the process. 3756 ;; Run the process.
@@ -3756,13 +3773,16 @@ support symbolic links."
3756 (display-message-or-buffer output-buffer))))))) 3773 (display-message-or-buffer output-buffer)))))))
3757 3774
3758(defun tramp-handle-start-file-process (name buffer program &rest args) 3775(defun tramp-handle-start-file-process (name buffer program &rest args)
3759 "Like `start-file-process' for Tramp files." 3776 "Like `start-file-process' for Tramp files.
3777BUFFER might be a list, in this case STDERR is separated."
3760 ;; `make-process' knows the `:file-handler' argument since Emacs 27.1 only. 3778 ;; `make-process' knows the `:file-handler' argument since Emacs 27.1 only.
3761 (tramp-file-name-handler 3779 (tramp-file-name-handler
3762 'make-process 3780 'make-process
3763 :name name 3781 :name name
3764 :buffer buffer 3782 :buffer (if (listp buffer) (car buffer) buffer)
3765 :command (and program (cons program args)) 3783 :command (and program (cons program args))
3784 ;; `shell-command' adds an errfile to `buffer'.
3785 :stderr (when (listp buffer) (cadr buffer))
3766 :noquery nil 3786 :noquery nil
3767 :file-handler t)) 3787 :file-handler t))
3768 3788
@@ -4363,7 +4383,7 @@ would yield t. On the other hand, the following check results in nil:
4363 (tramp-equal-remote \"/sudo::/etc\" \"/su::/etc\") 4383 (tramp-equal-remote \"/sudo::/etc\" \"/su::/etc\")
4364 4384
4365If both files are local, the function returns t." 4385If both files are local, the function returns t."
4366 (or (and (null (file-remote-p file1)) (null (file-remote-p file2))) 4386 (or (and (null (tramp-tramp-file-p file1)) (null (tramp-tramp-file-p file2)))
4367 (and (tramp-tramp-file-p file1) (tramp-tramp-file-p file2) 4387 (and (tramp-tramp-file-p file1) (tramp-tramp-file-p file2)
4368 (string-equal (file-remote-p file1) (file-remote-p file2))))) 4388 (string-equal (file-remote-p file1) (file-remote-p file2)))))
4369 4389
@@ -4633,7 +4653,7 @@ This handles also chrooted environments, which are not regarded as local."
4633 (tramp-make-tramp-file-name 4653 (tramp-make-tramp-file-name
4634 vec (or (tramp-get-method-parameter vec 'tramp-tmpdir) "/tmp")))) 4654 vec (or (tramp-get-method-parameter vec 'tramp-tmpdir) "/tmp"))))
4635 (or (and (file-directory-p dir) (file-writable-p dir) 4655 (or (and (file-directory-p dir) (file-writable-p dir)
4636 (tramp-compat-file-local-name dir)) 4656 (tramp-file-local-name dir))
4637 (tramp-error vec 'file-error "Directory %s not accessible" dir)) 4657 (tramp-error vec 'file-error "Directory %s not accessible" dir))
4638 dir))) 4658 dir)))
4639 4659
@@ -4656,7 +4676,7 @@ Return the local name of the temporary file."
4656 (set-file-modes result #o0700))) 4676 (set-file-modes result #o0700)))
4657 4677
4658 ;; Return the local part. 4678 ;; Return the local part.
4659 (with-parsed-tramp-file-name result nil localname))) 4679 (tramp-file-local-name result)))
4660 4680
4661(defun tramp-delete-temp-file-function () 4681(defun tramp-delete-temp-file-function ()
4662 "Remove temporary files related to current buffer." 4682 "Remove temporary files related to current buffer."
@@ -4683,7 +4703,7 @@ this file, if that variable is non-nil."
4683 4703
4684 (let ((system-type 4704 (let ((system-type
4685 (if (and (stringp tramp-auto-save-directory) 4705 (if (and (stringp tramp-auto-save-directory)
4686 (file-remote-p tramp-auto-save-directory)) 4706 (tramp-tramp-file-p tramp-auto-save-directory))
4687 'not-windows 4707 'not-windows
4688 system-type)) 4708 system-type))
4689 (auto-save-file-name-transforms 4709 (auto-save-file-name-transforms
diff --git a/lisp/net/trampver.el b/lisp/net/trampver.el
index dacdd44102f..b31f0e0fd26 100644
--- a/lisp/net/trampver.el
+++ b/lisp/net/trampver.el
@@ -39,7 +39,7 @@
39(defvar inhibit-message) 39(defvar inhibit-message)
40 40
41;;;###tramp-autoload 41;;;###tramp-autoload
42(defconst tramp-version "2.4.3.27.1" 42(defconst tramp-version "2.4.4-pre"
43 "This version of Tramp.") 43 "This version of Tramp.")
44 44
45;;;###tramp-autoload 45;;;###tramp-autoload
@@ -73,7 +73,7 @@
73;; Check for Emacs version. 73;; Check for Emacs version.
74(let ((x (if (not (string-lessp emacs-version "24.4")) 74(let ((x (if (not (string-lessp emacs-version "24.4"))
75 "ok" 75 "ok"
76 (format "Tramp 2.4.3.27.1 is not fit for %s" 76 (format "Tramp 2.4.4-pre is not fit for %s"
77 (replace-regexp-in-string "\n" "" (emacs-version)))))) 77 (replace-regexp-in-string "\n" "" (emacs-version))))))
78 (unless (string-equal "ok" x) (error "%s" x))) 78 (unless (string-equal "ok" x) (error "%s" x)))
79 79