branch: externals/tramp
commit 03ee1a30d526613dbfd970ddbc2ca6c657e8d865
Author: Michael Albinus <[email protected]>
Commit: Michael Albinus <[email protected]>
Tramp ELPA version 2.7.2.2 released
---
README | 6 ++---
test/tramp-tests.el | 3 ++-
texi/tramp.texi | 75 +++++++++++++++++++++++++++++++++++----------------
texi/trampver.texi | 2 +-
tramp-cache.el | 15 ++++++++---
tramp-sh.el | 78 ++++++++++++++++++++++++++++++++++-------------------
tramp.el | 4 +--
trampver.el | 6 ++---
8 files changed, 125 insertions(+), 64 deletions(-)
diff --git a/README b/README
index 01f5412e84..8ce4391156 100644
--- a/README
+++ b/README
@@ -32,11 +32,11 @@ Emacs 28 or older
• Remove all byte-compiled Tramp files
- $ rm -f ~/.emacs.d/elpa/tramp-2.7.2.1/tramp*.elc
+ $ rm -f ~/.emacs.d/elpa/tramp-2.7.2.2/tramp*.elc
• Start Emacs with Tramp's source files
- $ emacs -L ~/.emacs.d/elpa/tramp-2.7.2.1 -l tramp
+ $ emacs -L ~/.emacs.d/elpa/tramp-2.7.2.2 -l tramp
This should not give you the error.
@@ -50,7 +50,7 @@ Mitigation of a bug in Emacs 29.1
---------------------------------
Due to a bug in Emacs 29.1, you must apply the following change prior
-installation or upgrading Tramp 2.7.2.1 from GNU ELPA:
+installation or upgrading Tramp 2.7.2.2 from GNU ELPA:
(when (string-equal emacs-version "29.1")
(with-current-buffer
diff --git a/test/tramp-tests.el b/test/tramp-tests.el
index 25ac02d619..c1ef88937f 100644
--- a/test/tramp-tests.el
+++ b/test/tramp-tests.el
@@ -189,7 +189,8 @@ A resource file is in the resource directory as per
tramp-copy-size-limit nil
tramp-error-show-message-timeout nil
tramp-persistency-file-name nil
- tramp-verbose 0)
+ tramp-verbose 0
+ vc-handled-backends nil)
(defvar tramp--test-enabled-checked nil
"Cached result of `tramp--test-enabled'.
diff --git a/texi/tramp.texi b/texi/tramp.texi
index 7a6a1568ef..4f6b1743ea 100644
--- a/texi/tramp.texi
+++ b/texi/tramp.texi
@@ -1113,7 +1113,8 @@ command to transfer is similar to the @option{scp} method.
@command{rsync} performs much better than @command{scp} when
transferring files that exist on both hosts. However, this advantage
-is lost if the file exists only on one side of the connection.
+is lost if the file exists only on one side of the connection, during
+the first file transfer.
This method supports the @samp{-p} argument.
@@ -3327,8 +3328,8 @@ Another option is to create better backup file naming
with user and
host names prefixed to the file name. For example, transforming
@file{/etc/secretfile} to
@file{~/.emacs.d/backups/!su:root@@localhost:!etc!secretfile}, set the
-@value{tramp} user option @code{tramp-backup-directory-alist} from
-the existing user option @code{backup-directory-alist}.
+@value{tramp} user option @code{tramp-backup-directory-alist} from the
+existing user option @code{backup-directory-alist}.
Then @value{tramp} backs up to a file name that is transformed with a
prefix consisting of the DIRECTORY name. This file name prefixing
@@ -3350,10 +3351,12 @@ Example:
The backup file name of
@file{@trampfn{su,root@@localhost,/etc/secretfile}} would be
@ifset unified
-@file{@trampfn{su,root@@localhost,~/.emacs.d/backups/!su:root@@localhost:!etc!secretfile~}}.
+@file{@trampfn{su,root@@localhost,~/.emacs.d/backups/@c
+!su:root@@localhost:!etc!secretfile~}}.
@end ifset
@ifset separate
-@file{@trampfn{su,root@@localhost,~/.emacs.d/backups/![su!root@@localhost]!etc!secretfile~}}.
+@file{@trampfn{su,root@@localhost,~/.emacs.d/backups/@c
+![su!root@@localhost]!etc!secretfile~}}.
@end ifset
@vindex auto-save-file-name-transforms
@@ -3798,15 +3801,21 @@
ssh@value{postfixhop}you@@remotehost@value{postfix}/path @key{RET}}
Each involved method must be an inline method (@pxref{Inline methods}).
-@value{tramp} adds the ad-hoc definitions on the fly to
-@code{tramp-default-proxies-alist} and is available for reuse during
-that Emacs session. Subsequent @value{tramp} connections to the same
-remote host can then use the shortcut form:
-@samp{@trampfn{ssh,you@@remotehost,/path}}.
+@value{tramp} adds the ad-hoc definitions as an ephemeral record to
+@code{tramp-default-proxies-alist}, which are available for reuse
+during that Emacs session. Subsequent @value{tramp} connections to
+the same remote host can then use the abbreviated form
+@file{@trampfn{ssh,you@@remotehost,/path}}.
+@anchor{tramp-show-ad-hoc-proxies}
@defopt tramp-show-ad-hoc-proxies
If this user option is non-@code{nil}, ad-hoc definitions are kept in
-remote file names instead of showing the shortcuts.
+remote file names instead of showing the abbreviations. This is
+useful if the ad-hoc proxy definition shall be used in further Emacs
+sessions, kept in configuration files of recentf and other packages.
+
+A non-@code{nil} setting of this option has effect only if set before
+the connection is established.
@lisp
(customize-set-variable 'tramp-show-ad-hoc-proxies t)
@@ -3817,10 +3826,18 @@ Ad-hoc definitions are removed from
@code{tramp-default-proxies-alist}
via the command @kbd{M-x tramp-cleanup-all-connections @key{RET}}
(@pxref{Cleanup remote connections}).
+@anchor{tramp-save-ad-hoc-proxies}
@defopt tramp-save-ad-hoc-proxies
For ad-hoc definitions to be saved automatically in
@code{tramp-default-proxies-alist} for future Emacs sessions, set
-@code{tramp-save-ad-hoc-proxies} to non-@code{nil}.
+@code{tramp-save-ad-hoc-proxies} to non-@code{nil}. The resulting
+user option @code{tramp-default-proxies-alist} is saved in your
+@file{.emacs} file.
+
+If you use saved configuration files with abbreviated ad-hoc proxy
+definitions on another host, for example by distribution of the
+@code{recentf-save-file}, you must distribute your @file{.emacs} file
+as well.
@lisp
(customize-set-variable 'tramp-save-ad-hoc-proxies t)
@@ -5950,18 +5967,30 @@ Thanks to @value{tramp} users for contributing to these
recipes.
@item
-Why saved multi-hop file names do not work in a new Emacs session?
+Why don't saved ad-hoc multi-hop file names work in a new Emacs session?
+
+By default, ad-hoc multi-hop file names are abbreviated after
+completing the initial connection. These abbreviated forms retain
+only the final hop, and so only the Emacs session that generated the
+abbreviated form can understand it. @xref{Ad-hoc multi-hops}.
+
+For example, after connecting to @file{@trampfn{ssh,bird@@bastion|@c
+ssh@value{postfixhop}news@@news.my.domain,/opt/news/etc}}, the file
+name becomes @file{@trampfn{ssh,news@@news.my.domain,/opt/news/etc}}.
+If the abbreviated form is saved in a bookmark, the recent files list,
+bbdb, or similar, a new Emacs session has no way to know that the
+connection must go through @samp{bird@@bastion} first.
-When saving ad-hoc multi-hop @value{tramp} file names (@pxref{Ad-hoc
-multi-hops}) via bookmarks, recent files, filecache, bbdb, or another
-package, use the full ad-hoc file name including all hops, like
-@file{@trampfn{ssh,bird@@bastion|ssh@value{postfixhop}@c
-news.my.domain,/opt/news/etc}}.
+There are two mechanisms to deal with this. The first is to customize
+@code{tramp-show-ad-hoc-proxies} to a non-@code{nil} value, which
+disables abbreviation. Then the fully-qualified ad-hoc multi-hop file
+name is the one that will be both displayed and saved.
+@xref{tramp-show-ad-hoc-proxies}.
-Alternatively, when saving abbreviated multi-hop file names
-@file{@trampfn{ssh,news@@news.my.domain,/opt/news/etc}}, the user
-option @code{tramp-save-ad-hoc-proxies} must be set non-@code{nil}
-value.
+Alternatively, you can customize @code{tramp-save-ad-hoc-proxies} to a
+non-@code{nil} value which means to save the information how an
+abbreviated multi-hop file name can be expanded.
+@xref{tramp-save-ad-hoc-proxies}.
@item
@@ -6137,7 +6166,7 @@ as above in your @file{~/.emacs}:
@item
I get an error @samp{unix_listener: path
"/very/long/path/.cache/emacs/tramp.XXX" too long for Unix domain
-socket} when connectiong via @option{ssh} to a remote host.
+socket} when connecting via @option{ssh} to a remote host.
@vindex small-temporary-file-directory
By default, @value{tramp} uses the directory @file{~/.cache/emacs/}
diff --git a/texi/trampver.texi b/texi/trampver.texi
index 9d4579fb02..f3d1241a49 100644
--- a/texi/trampver.texi
+++ b/texi/trampver.texi
@@ -7,7 +7,7 @@
@c In the Tramp GIT, the version number and the bug report address
@c are auto-frobbed from configure.ac.
-@set trampver 2.7.2.1
+@set trampver 2.7.2.2
@set trampurl https://www.gnu.org/software/tramp/
@set tramp-bug-report-address tramp-devel@@gnu.org
@set emacsver 27.1
diff --git a/tramp-cache.el b/tramp-cache.el
index ef8baf89f8..14ee10416a 100644
--- a/tramp-cache.el
+++ b/tramp-cache.el
@@ -97,8 +97,11 @@
Every entry has the form (REGEXP PROPERTY VALUE). The regexp
matches remote file names. It can be nil. PROPERTY is a string,
and VALUE the corresponding value. They are used, if there is no
-matching entry for PROPERTY in `tramp-cache-data'. For more
-details see the info pages."
+matching entry for PROPERTY in `tramp-cache-data'.
+
+PROPERTY can also be a string representing a parameter in
+`tramp-methods'. For more details see the Info node `(tramp) Predefined
+connection information'."
:group 'tramp
:version "24.4"
:type '(repeat (list (choice :tag "File Name regexp" regexp (const nil))
@@ -470,8 +473,10 @@ used to cache connection properties of the local machine."
(hash (tramp-get-hash-table key))
(cached (and (hash-table-p hash)
(gethash ,property hash tramp-cache-undefined))))
+ (tramp-message key 7 "Saved %s %s" property cached)
(unwind-protect (progn ,@body)
;; Reset PROPERTY. Recompute hash, it could have been flushed.
+ (tramp-message key 7 "Restored %s %s" property cached)
(setq hash (tramp-get-hash-table key))
(if (not (eq cached tramp-cache-undefined))
(puthash ,property cached hash)
@@ -488,9 +493,13 @@ PROPERTIES is a list of file properties (strings)."
(mapcar
(lambda (property)
(cons property (gethash property hash tramp-cache-undefined)))
- ,properties)))
+ ,properties))
+ ;; Avoid superfluous debug buffers during host name completion.
+ (tramp-verbose (if minibuffer-completing-file-name 0 tramp-verbose)))
+ (tramp-message key 7 "Saved %s" values)
(unwind-protect (progn ,@body)
;; Reset PROPERTIES. Recompute hash, it could have been flushed.
+ (tramp-message key 7 "Restored %s" values)
(setq hash (tramp-get-hash-table key))
(dolist (value values)
(if (not (eq (cdr value) tramp-cache-undefined))
diff --git a/tramp-sh.el b/tramp-sh.el
index 7533de33c0..98a4c7d90f 100644
--- a/tramp-sh.el
+++ b/tramp-sh.el
@@ -354,7 +354,7 @@ The string is used in `tramp-methods'.")
(tramp-remote-shell-login ("-l"))
(tramp-remote-shell-args ("-c"))
(tramp-copy-program "pscp")
- (tramp-copy-args (("-l" "%u") ("-P" "%p") ("-scp")
+ (tramp-copy-args (("-l" "%u") ("-P" "%p") ("-scp")
("%c")
("-p" "%k") ("-q") ("-r")))
(tramp-copy-keep-date t)
(tramp-copy-recursive t)))
@@ -372,7 +372,7 @@ The string is used in `tramp-methods'.")
(tramp-remote-shell-login ("-l"))
(tramp-remote-shell-args ("-c"))
(tramp-copy-program "pscp")
- (tramp-copy-args (("-l" "%u") ("-P" "%p") ("-sftp")
+ (tramp-copy-args (("-l" "%u") ("-P" "%p") ("-sftp")
("%c")
("-p" "%k")))
(tramp-copy-keep-date t)))
@@ -2482,7 +2482,7 @@ The method used must be an out-of-band method."
;; Compose copy command.
(setq options
(format-spec
- (tramp-ssh-controlmaster-options v)
+ (tramp-ssh-or-plink-options v)
(format-spec-make
?t (tramp-get-connection-property
(tramp-get-connection-process v) "temp-file" "")))
@@ -4901,41 +4901,60 @@ Goes through the list `tramp-inline-compress-commands'."
(zerop
(tramp-call-process vec "ssh" nil nil nil "-G" "-o" option "0.0.0.1"))))
-(defun tramp-ssh-controlmaster-options (vec)
- "Return the Control* arguments of the local ssh."
+(defun tramp-plink-option-exists-p (vec option)
+ "Check, whether local plink OPTION is applicable."
+ ;; We don't want to cache it persistently.
+ (with-tramp-connection-property nil option
+ ;; "plink" with valid options returns "plink: no valid host name
+ ;; provided". We xcheck for this error message."
+ (with-temp-buffer
+ (tramp-call-process vec "plink" nil t nil option)
+ (not
+ (string-match-p
+ (rx (| (: "plink: unknown option \"" (literal option) "\"" )
+ (: "plink: option \"" (literal option)
+ "\" not available in this tool" )))
+ (buffer-string))))))
+
+(defun tramp-ssh-or-plink-options (vec)
+ "Return additional arguments of the local ssh or plink."
(cond
;; No options to be computed.
- ((or (null tramp-use-connection-share)
- (null (assoc "%c" (tramp-get-method-parameter vec 'tramp-login-args))))
- "")
+ ((null (assoc "%c" (tramp-get-method-parameter vec 'tramp-login-args))) "")
- ;; Use plink option.
+ ;; Use plink options.
((string-match-p
(rx "plink" (? ".exe") eol)
(tramp-get-method-parameter vec 'tramp-login-program))
- (if (eq tramp-use-connection-share 'suppress)
- "-noshare" "-share"))
+ (concat
+ (if (eq tramp-use-connection-share 'suppress)
+ "-noshare" "-share")
+ ;; Since PuTTY 0.82.
+ (when (tramp-plink-option-exists-p vec "-legacy-stdio-prompts")
+ " -legacy-stdio-prompts")))
;; There is already a value to be used.
((and (eq tramp-use-connection-share t)
(stringp tramp-ssh-controlmaster-options))
tramp-ssh-controlmaster-options)
- ;; We can't auto-compute the options.
- ((ignore-errors
- (not (tramp-ssh-option-exists-p vec "ControlMaster=auto")))
- "")
-
- ;; Determine the options.
- (t (ignore-errors
- ;; ControlMaster and ControlPath options are introduced in OpenSSH 3.9.
- (concat
- "-o ControlMaster="
- (if (eq tramp-use-connection-share 'suppress)
+ ;; Use ssh options.
+ (tramp-use-connection-share
+ ;; We can't auto-compute the options.
+ (if (ignore-errors
+ (not (tramp-ssh-option-exists-p vec "ControlMaster=auto")))
+ ""
+
+ ;; Determine the options.
+ (ignore-errors
+ ;; ControlMaster and ControlPath options are introduced in OpenSSH 3.9.
+ (concat
+ "-o ControlMaster="
+ (if (eq tramp-use-connection-share 'suppress)
"no" "auto")
- " -o ControlPath="
- (if (eq tramp-use-connection-share 'suppress)
+ " -o ControlPath="
+ (if (eq tramp-use-connection-share 'suppress)
"none"
;; Hashed tokens are introduced in OpenSSH 6.7. On macOS
;; we cannot use an absolute file name, it is too long.
@@ -4949,10 +4968,13 @@ Goes through the list `tramp-inline-compress-commands'."
(or small-temporary-file-directory
tramp-compat-temporary-file-directory))))
- ;; ControlPersist option is introduced in OpenSSH 5.6.
+ ;; ControlPersist option is introduced in OpenSSH 5.6.
(when (and (not (eq tramp-use-connection-share 'suppress))
(tramp-ssh-option-exists-p vec "ControlPersist=no"))
- " -o ControlPersist=no"))))))
+ " -o ControlPersist=no")))))
+
+ ;; Return a string, whatsoever.
+ (t "")))
(defun tramp-scp-strict-file-name-checking (vec)
"Return the strict file name checking argument of the local scp."
@@ -5168,9 +5190,9 @@ connection if a previous connection has died for some
reason."
(let* ((current-host tramp-system-name)
(target-alist (tramp-compute-multi-hops vec))
(previous-hop tramp-null-hop)
- ;; We will apply `tramp-ssh-controlmaster-options'
+ ;; We will apply `tramp-ssh-or-plink-options'
;; only for the first hop.
- (options (tramp-ssh-controlmaster-options vec))
+ (options (tramp-ssh-or-plink-options vec))
(process-connection-type tramp-process-connection-type)
(process-adaptive-read-buffering nil)
;; There are unfortunate settings for "cmdproxy"
diff --git a/tramp.el b/tramp.el
index 4db1b787a6..0e2ad5c124 100644
--- a/tramp.el
+++ b/tramp.el
@@ -120,9 +120,9 @@
:version "22.1"
:link '(custom-manual "(tramp)Top"))
-;; Maybe we need once a real Tramp mode, with key bindings etc.
+;; On MS-DOS, there is no process support.
;;;###autoload
-(defcustom tramp-mode t
+(defcustom tramp-mode (not (eq system-type 'ms-dos))
"Whether Tramp is enabled.
If it is set to nil, all remote file names are used literally."
:type 'boolean)
diff --git a/trampver.el b/trampver.el
index 9b543c20ad..af22093e04 100644
--- a/trampver.el
+++ b/trampver.el
@@ -7,7 +7,7 @@
;; Maintainer: Michael Albinus <[email protected]>
;; Keywords: comm, processes
;; Package: tramp
-;; Version: 2.7.2.1
+;; Version: 2.7.2.2
;; Package-Requires: ((emacs "27.1"))
;; Package-Type: multi
;; URL: https://www.gnu.org/software/tramp/
@@ -40,7 +40,7 @@
;; ./configure" to change them.
;;;###tramp-autoload
-(defconst tramp-version "2.7.2.1"
+(defconst tramp-version "2.7.2.2"
"This version of Tramp.")
;;;###tramp-autoload
@@ -76,7 +76,7 @@
;; Check for Emacs version.
(let ((x (if (not (string-version-lessp emacs-version "27.1"))
"ok"
- (format "Tramp 2.7.2.1 is not fit for %s"
+ (format "Tramp 2.7.2.2 is not fit for %s"
(replace-regexp-in-string "\n" "" (emacs-version))))))
(unless (string-equal "ok" x) (error "%s" x)))