branch: externals/tramp
commit 4ae9b86ab682b699994bff58b7560ed1c9c47ece
Author: Michael Albinus <[email protected]>
Commit: Michael Albinus <[email protected]>
Sync with Tramp repo
---
test/tramp-archive-tests.el | 2 +-
test/tramp-tests.el | 2 +-
texi/tramp.texi | 8 ++-
texi/trampelpa.texi | 2 +-
texi/trampver.texi | 2 +-
tramp-adb.el | 2 +-
tramp-androidsu.el | 2 +-
tramp-archive.el | 2 +-
tramp-cache.el | 2 +-
tramp-cmds.el | 2 +-
tramp-compat.el | 2 +-
tramp-container.el | 2 +-
tramp-crypt.el | 2 +-
tramp-ftp.el | 2 +-
tramp-fuse.el | 2 +-
tramp-gvfs.el | 2 +-
tramp-integration.el | 2 +-
tramp-message.el | 2 +-
tramp-rclone.el | 2 +-
tramp-sh.el | 147 +++++++++++++++++++++++---------------------
tramp-smb.el | 9 +--
tramp-sshfs.el | 2 +-
tramp-sudoedit.el | 2 +-
tramp-uu.el | 2 +-
tramp.el | 31 +++++-----
trampver.el | 2 +-
26 files changed, 121 insertions(+), 118 deletions(-)
diff --git a/test/tramp-archive-tests.el b/test/tramp-archive-tests.el
index 5e9ea756b9..f3bfaac005 100644
--- a/test/tramp-archive-tests.el
+++ b/test/tramp-archive-tests.el
@@ -1,6 +1,6 @@
;;; tramp-archive-tests.el --- Tests of file archive access -*-
lexical-binding:t -*-
-;; Copyright (C) 2017-2025 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2026 Free Software Foundation, Inc.
;; Author: Michael Albinus <[email protected]>
diff --git a/test/tramp-tests.el b/test/tramp-tests.el
index 979ff7edfc..cb8253e66f 100644
--- a/test/tramp-tests.el
+++ b/test/tramp-tests.el
@@ -1,6 +1,6 @@
;;; tramp-tests.el --- Tests of remote file access -*- lexical-binding:t -*-
-;; Copyright (C) 2013-2025 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2026 Free Software Foundation, Inc.
;; Author: Michael Albinus <[email protected]>
diff --git a/texi/tramp.texi b/texi/tramp.texi
index f53abb5c22..a85d8835b6 100644
--- a/texi/tramp.texi
+++ b/texi/tramp.texi
@@ -12,7 +12,7 @@
@footnotestyle end
@copying
-Copyright @copyright{} 1999--2025 Free Software Foundation, Inc.
+Copyright @copyright{} 1999--2026 Free Software Foundation, Inc.
@quotation
Permission is granted to copy, distribute and/or modify this document
@@ -1132,9 +1132,11 @@ an external transfer program.
External methods save on the overhead of encoding and decoding of
inline methods.
+@vindex tramp-copy-size-limit
Since external methods have the overhead of opening a new channel,
files smaller than @code{tramp-copy-size-limit} still use inline
-methods.
+methods. If an external method is used inside a multi-hop connection
+(@pxref{Multi-hops}), its inherent inline method is used as well.
@table @asis
@cindex method @option{rcp}
@@ -3891,7 +3893,7 @@ proxy @samp{bird@@bastion} to a remote file on
@samp{you@@remotehost}:
ssh@value{postfixhop}you@@remotehost@value{postfix}/path @key{RET}}
@end example
-Each involved method must be an inline method (@pxref{Inline methods}).
+Each involved method must be handled by @value{tramp}'s @code{tramp-sh}
backend.
@value{tramp} adds the ad-hoc definitions as an ephemeral record to
@code{tramp-default-proxies-alist}, which are available for reuse
diff --git a/texi/trampelpa.texi b/texi/trampelpa.texi
index 7ff6e28835..1ca4ae9492 100644
--- a/texi/trampelpa.texi
+++ b/texi/trampelpa.texi
@@ -1,6 +1,6 @@
@c -*-texinfo-*-
-@c Copyright (C) 2021-2025 Free Software Foundation, Inc.
+@c Copyright (C) 2021-2026 Free Software Foundation, Inc.
@c See file doclicense.texi for copying conditions.
@include trampver.texi
diff --git a/texi/trampver.texi b/texi/trampver.texi
index ee4d5b2a35..ed18ab9bf4 100644
--- a/texi/trampver.texi
+++ b/texi/trampver.texi
@@ -2,7 +2,7 @@
@c texi/trampver.texi. Generated from trampver.texi.in by configure.
@c This is part of the Emacs manual.
-@c Copyright (C) 2003--2025 Free Software Foundation, Inc.
+@c Copyright (C) 2003--2026 Free Software Foundation, Inc.
@c See file doclicense.texi for copying conditions.
@c In the Tramp GIT, the version number and the bug report address
diff --git a/tramp-adb.el b/tramp-adb.el
index 99fcacd8de..a745633c24 100644
--- a/tramp-adb.el
+++ b/tramp-adb.el
@@ -1,6 +1,6 @@
;;; tramp-adb.el --- Functions for calling Android Debug Bridge from Tramp
-*- lexical-binding:t -*-
-;; Copyright (C) 2011-2025 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2026 Free Software Foundation, Inc.
;; Author: Jürgen Hötzel <[email protected]>
;; Maintainer: Michael Albinus <[email protected]>
diff --git a/tramp-androidsu.el b/tramp-androidsu.el
index 6cc3f14381..d3e528e8ce 100644
--- a/tramp-androidsu.el
+++ b/tramp-androidsu.el
@@ -1,6 +1,6 @@
;;; tramp-androidsu.el --- Tramp method for Android superuser shells -*-
lexical-binding:t -*-
-;; Copyright (C) 2024-2025 Free Software Foundation, Inc.
+;; Copyright (C) 2024-2026 Free Software Foundation, Inc.
;; Author: Po Lu
;; Keywords: comm, processes
diff --git a/tramp-archive.el b/tramp-archive.el
index a52b8be6e0..a4323156c2 100644
--- a/tramp-archive.el
+++ b/tramp-archive.el
@@ -1,6 +1,6 @@
;;; tramp-archive.el --- Tramp archive manager -*- lexical-binding:t -*-
-;; Copyright (C) 2017-2025 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2026 Free Software Foundation, Inc.
;; Author: Michael Albinus <[email protected]>
;; Keywords: comm, processes
diff --git a/tramp-cache.el b/tramp-cache.el
index 36fc8c3953..bb9179630c 100644
--- a/tramp-cache.el
+++ b/tramp-cache.el
@@ -1,6 +1,6 @@
;;; tramp-cache.el --- file information caching for Tramp -*-
lexical-binding:t -*-
-;; Copyright (C) 2000, 2005-2025 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2005-2026 Free Software Foundation, Inc.
;; Author: Daniel Pittman <[email protected]>
;; Michael Albinus <[email protected]>
diff --git a/tramp-cmds.el b/tramp-cmds.el
index db3737500e..84c1c7ea7f 100644
--- a/tramp-cmds.el
+++ b/tramp-cmds.el
@@ -1,6 +1,6 @@
;;; tramp-cmds.el --- Interactive commands for Tramp -*- lexical-binding:t -*-
-;; Copyright (C) 2007-2025 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2026 Free Software Foundation, Inc.
;; Author: Michael Albinus <[email protected]>
;; Keywords: comm, processes
diff --git a/tramp-compat.el b/tramp-compat.el
index 93190fec3a..c9a728e2be 100644
--- a/tramp-compat.el
+++ b/tramp-compat.el
@@ -1,6 +1,6 @@
;;; tramp-compat.el --- Tramp compatibility functions -*- lexical-binding:t
-*-
-;; Copyright (C) 2007-2025 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2026 Free Software Foundation, Inc.
;; Author: Michael Albinus <[email protected]>
;; Keywords: comm, processes
diff --git a/tramp-container.el b/tramp-container.el
index 897a4dcc72..91d9b239a7 100644
--- a/tramp-container.el
+++ b/tramp-container.el
@@ -1,6 +1,6 @@
;;; tramp-container.el --- Tramp integration for Docker-like containers -*-
lexical-binding: t; -*-
-;; Copyright © 2022-2025 Free Software Foundation, Inc.
+;; Copyright © 2022-2026 Free Software Foundation, Inc.
;; Author: Brian Cully <[email protected]>
;; Maintainer: Michael Albinus <[email protected]>
diff --git a/tramp-crypt.el b/tramp-crypt.el
index 0a5bdaf6ba..565b9f0a5a 100644
--- a/tramp-crypt.el
+++ b/tramp-crypt.el
@@ -1,6 +1,6 @@
;;; tramp-crypt.el --- Tramp crypt utilities -*- lexical-binding:t -*-
-;; Copyright (C) 2020-2025 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2026 Free Software Foundation, Inc.
;; Author: Michael Albinus <[email protected]>
;; Keywords: comm, processes
diff --git a/tramp-ftp.el b/tramp-ftp.el
index 4561518de1..7e140a0e37 100644
--- a/tramp-ftp.el
+++ b/tramp-ftp.el
@@ -1,6 +1,6 @@
;;; tramp-ftp.el --- Tramp convenience functions for Ange-FTP -*-
lexical-binding:t -*-
-;; Copyright (C) 2002-2025 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2026 Free Software Foundation, Inc.
;; Author: Michael Albinus <[email protected]>
;; Keywords: comm, processes
diff --git a/tramp-fuse.el b/tramp-fuse.el
index 07f4ef7458..b3e59063cd 100644
--- a/tramp-fuse.el
+++ b/tramp-fuse.el
@@ -1,6 +1,6 @@
;;; tramp-fuse.el --- Tramp access functions for FUSE mounts -*-
lexical-binding:t -*-
-;; Copyright (C) 2021-2025 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2026 Free Software Foundation, Inc.
;; Author: Michael Albinus <[email protected]>
;; Keywords: comm, processes
diff --git a/tramp-gvfs.el b/tramp-gvfs.el
index 687cc7e1bc..64efce227d 100644
--- a/tramp-gvfs.el
+++ b/tramp-gvfs.el
@@ -1,6 +1,6 @@
;;; tramp-gvfs.el --- Tramp access functions for GVFS daemon -*-
lexical-binding:t -*-
-;; Copyright (C) 2009-2025 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2026 Free Software Foundation, Inc.
;; Author: Michael Albinus <[email protected]>
;; Keywords: comm, processes
diff --git a/tramp-integration.el b/tramp-integration.el
index 7b34ce08bd..0183960d7f 100644
--- a/tramp-integration.el
+++ b/tramp-integration.el
@@ -1,6 +1,6 @@
;;; tramp-integration.el --- Tramp integration into other packages -*-
lexical-binding:t -*-
-;; Copyright (C) 2019-2025 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2026 Free Software Foundation, Inc.
;; Author: Michael Albinus <[email protected]>
;; Keywords: comm, processes
diff --git a/tramp-message.el b/tramp-message.el
index eecddc978c..fe7758bdb0 100644
--- a/tramp-message.el
+++ b/tramp-message.el
@@ -1,6 +1,6 @@
;;; tramp-message.el --- Tramp messages -*- lexical-binding:t -*-
-;; Copyright (C) 2023-2025 Free Software Foundation, Inc.
+;; Copyright (C) 2023-2026 Free Software Foundation, Inc.
;; Author: Michael Albinus <[email protected]>
;; Keywords: comm, processes
diff --git a/tramp-rclone.el b/tramp-rclone.el
index e4008c197f..6b0daeba2a 100644
--- a/tramp-rclone.el
+++ b/tramp-rclone.el
@@ -1,6 +1,6 @@
;;; tramp-rclone.el --- Tramp access functions to cloud storages -*-
lexical-binding:t -*-
-;; Copyright (C) 2018-2025 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2026 Free Software Foundation, Inc.
;; Author: Michael Albinus <[email protected]>
;; Keywords: comm, processes
diff --git a/tramp-sh.el b/tramp-sh.el
index 488f7e4919..97b72ba00a 100644
--- a/tramp-sh.el
+++ b/tramp-sh.el
@@ -1,6 +1,6 @@
;;; tramp-sh.el --- Tramp access functions for (s)sh-like connections -*-
lexical-binding:t -*-
-;; Copyright (C) 1998-2025 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2026 Free Software Foundation, Inc.
;; (copyright statements below in code to be updated with the above notice)
@@ -2098,66 +2098,67 @@ ID-FORMAT valid values are `string' and `integer'."
"Like `copy-directory' for Tramp files."
(tramp-skeleton-copy-directory
dirname newname keep-date parents copy-contents
- (let ((t1 (tramp-tramp-file-p dirname))
- (t2 (tramp-tramp-file-p newname))
- target)
- (with-parsed-tramp-file-name (if t1 dirname newname) nil
- (cond
- ((and copy-directory-create-symlink
- (setq target (file-symlink-p dirname))
- (tramp-equal-remote dirname newname))
- (make-symbolic-link
- target
- (if (directory-name-p newname)
- (concat newname (file-name-nondirectory dirname)) newname)
- t))
-
- ;; Shortcut: if method, host, user are the same for both
- ;; files, we invoke `cp' on the remote host directly.
- ((and (not copy-contents)
- (tramp-equal-remote dirname newname))
- (when (and (file-directory-p newname)
- (not (directory-name-p newname)))
- (tramp-error v 'file-already-exists newname))
- (setq dirname (directory-file-name (expand-file-name dirname))
- newname (directory-file-name (expand-file-name newname)))
- (tramp-do-copy-or-rename-file-directly
- 'copy dirname newname
- 'ok-if-already-exists keep-date 'preserve-uid-gid))
-
- ;; scp or rsync DTRT.
- ((and (not copy-contents)
- (tramp-get-method-parameter v 'tramp-copy-recursive)
- ;; When DIRNAME and NEWNAME are remote, they must have
- ;; the same method.
- (or (null t1) (null t2)
- (string-equal
- (tramp-file-name-method (tramp-dissect-file-name dirname))
- (tramp-file-name-method (tramp-dissect-file-name
newname)))))
- (when (and (file-directory-p newname)
- (not (directory-name-p newname)))
- (tramp-error v 'file-already-exists newname))
- (setq dirname (directory-file-name (expand-file-name dirname))
- newname (directory-file-name (expand-file-name newname)))
- (when (and (file-directory-p newname)
- (not (string-equal (file-name-nondirectory dirname)
- (file-name-nondirectory newname))))
- (setq newname
- (expand-file-name (file-name-nondirectory dirname) newname)))
- (unless (file-directory-p (file-name-directory newname))
- (make-directory (file-name-directory newname) parents))
- (tramp-do-copy-or-rename-file-out-of-band
- 'copy dirname newname 'ok-if-already-exists keep-date))
-
- ;; We must do it file-wise.
- (t (tramp-run-real-handler
- #'copy-directory
- (list dirname newname keep-date parents copy-contents))))
-
- ;; NEWNAME has wrong cached values.
- (when t2
- (with-parsed-tramp-file-name (expand-file-name newname) nil
- (tramp-flush-file-properties v localname)))))))
+ (let* ((v1 (and (tramp-tramp-file-p dirname)
+ (tramp-dissect-file-name dirname)))
+ (v2 (and (tramp-tramp-file-p newname)
+ (tramp-dissect-file-name newname)))
+ (v (or v1 v2))
+ target)
+ (cond
+ ((and copy-directory-create-symlink
+ (setq target (file-symlink-p dirname))
+ (tramp-equal-remote dirname newname))
+ (make-symbolic-link
+ target
+ (if (directory-name-p newname)
+ (concat newname (file-name-nondirectory dirname)) newname)
+ t))
+
+ ;; Shortcut: if method, host, user are the same for both files,
+ ;; we invoke `cp' on the remote host directly.
+ ((and (not copy-contents)
+ (tramp-equal-remote dirname newname))
+ (when (and (file-directory-p newname)
+ (not (directory-name-p newname)))
+ (tramp-error v 'file-already-exists newname))
+ (setq dirname (directory-file-name (expand-file-name dirname))
+ newname (directory-file-name (expand-file-name newname)))
+ (tramp-do-copy-or-rename-file-directly
+ 'copy dirname newname
+ 'ok-if-already-exists keep-date 'preserve-uid-gid))
+
+ ;; scp or rsync DTRT.
+ ((and (not copy-contents)
+ (tramp-get-method-parameter v 'tramp-copy-recursive)
+ ;; When DIRNAME and NEWNAME are remote, they must have
+ ;; the same method. None of them must be multi-hop.
+ (or (and (null v1) (tramp-method-out-of-band-p v2 0))
+ (and (null v2) (tramp-method-out-of-band-p v1 0))
+ (and v1 v2
+ (tramp-method-out-of-band-p v1 0)
+ (tramp-method-out-of-band-p v2 0)
+ (string-equal
+ (tramp-file-name-method v1)
+ (tramp-file-name-method v2)))))
+ (when (and (file-directory-p newname)
+ (not (directory-name-p newname)))
+ (tramp-error v 'file-already-exists newname))
+ (setq dirname (directory-file-name (expand-file-name dirname))
+ newname (directory-file-name (expand-file-name newname)))
+ (when (and (file-directory-p newname)
+ (not (string-equal (file-name-nondirectory dirname)
+ (file-name-nondirectory newname))))
+ (setq newname
+ (expand-file-name (file-name-nondirectory dirname) newname)))
+ (unless (file-directory-p (file-name-directory newname))
+ (make-directory (file-name-directory newname) parents))
+ (tramp-do-copy-or-rename-file-out-of-band
+ 'copy dirname newname 'ok-if-already-exists keep-date))
+
+ ;; We must do it file-wise.
+ (t (tramp-run-real-handler
+ #'copy-directory
+ (list dirname newname keep-date parents copy-contents)))))))
(defun tramp-sh-handle-rename-file
(filename newname &optional ok-if-already-exists)
@@ -5679,7 +5680,11 @@ raises an error."
(and
;; It shall be an out-of-band method.
(tramp-get-method-parameter vec 'tramp-copy-program)
- ;; There must be a size, otherwise the file doesn't exist.
+ ;; There shouldn't be a multi-hop.
+ (or (not (tramp-multi-hop-p vec))
+ (null (cdr (tramp-compute-multi-hops vec))))
+ ;; There must be a SIZE, otherwise the file doesn't exist. A zero
+ ;; SIZE is used for directories.
(numberp size)
;; Either the file size is large enough, or (in rare cases) there
;; does not exist a remote encoding.
@@ -5823,9 +5828,10 @@ Nonexistent directories are removed from spec."
(or
(catch 'ls-found
(dolist (cmd
- ;; Prefer GNU ls on *BSD and macOS.
+ ;; Prefer GNU ls on *BSD and macOS. See also
+ ;; Bug#80075 for Linux.
(if (tramp-check-remote-uname vec tramp-bsd-unames)
- '("gls" "ls" "gnuls") '("ls" "gnuls" "gls")))
+ '("gls" "ls" "gnuls") '("gnuls" "ls" "gls")))
(let ((dl (tramp-get-remote-path vec))
result)
(while (and dl (setq result (tramp-find-executable vec cmd dl t t)))
@@ -5966,11 +5972,14 @@ Nonexistent directories are removed from spec."
"Determine remote `readlink' command."
(with-tramp-connection-property vec "readlink"
(tramp-message vec 5 "Finding a suitable `readlink' command")
- (when-let* ((result (tramp-find-executable
- vec "readlink" (tramp-get-remote-path vec)))
- ((tramp-send-command-and-check
- vec (format "%s --canonicalize-missing /" result))))
- result)))
+ ;; See Bug#80075.
+ (catch 'readlink-found
+ (dolist (cmd '("gnureadlink" "readlink"))
+ (when-let* ((result (tramp-find-executable
+ vec cmd (tramp-get-remote-path vec)))
+ ((tramp-send-command-and-check
+ vec (format "%s --canonicalize-missing /" result))))
+ (throw 'readlink-found result))))))
(defun tramp-get-remote-touch (vec)
"Determine remote `touch' command."
diff --git a/tramp-smb.el b/tramp-smb.el
index 2013c3980d..10ab64929e 100644
--- a/tramp-smb.el
+++ b/tramp-smb.el
@@ -1,6 +1,6 @@
;;; tramp-smb.el --- Tramp access functions for SMB servers -*-
lexical-binding:t -*-
-;; Copyright (C) 2002-2025 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2026 Free Software Foundation, Inc.
;; Author: Michael Albinus <[email protected]>
;; Keywords: comm, processes
@@ -577,12 +577,7 @@ arguments to pass to the OPERATION."
;; Set the mode.
(unless keep-date
- (set-file-modes newname (tramp-default-file-modes dirname)))
-
- ;; When newname did exist, we have wrong cached values.
- (when t2
- (with-parsed-tramp-file-name newname nil
- (tramp-flush-file-properties v localname))))
+ (set-file-modes newname (tramp-default-file-modes dirname))))
;; We must do it file-wise.
(t
diff --git a/tramp-sshfs.el b/tramp-sshfs.el
index 6e59a877e1..338d128cc4 100644
--- a/tramp-sshfs.el
+++ b/tramp-sshfs.el
@@ -1,6 +1,6 @@
;;; tramp-sshfs.el --- Tramp access functions via sshfs -*- lexical-binding:t
-*-
-;; Copyright (C) 2021-2025 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2026 Free Software Foundation, Inc.
;; Author: Michael Albinus <[email protected]>
;; Keywords: comm, processes
diff --git a/tramp-sudoedit.el b/tramp-sudoedit.el
index 279b7e610b..d3bb8b8478 100644
--- a/tramp-sudoedit.el
+++ b/tramp-sudoedit.el
@@ -1,6 +1,6 @@
;;; tramp-sudoedit.el --- Functions for accessing under root permissions -*-
lexical-binding:t -*-
-;; Copyright (C) 2018-2025 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2026 Free Software Foundation, Inc.
;; Author: Michael Albinus <[email protected]>
;; Keywords: comm, processes
diff --git a/tramp-uu.el b/tramp-uu.el
index ee6cad173e..952445bf7b 100644
--- a/tramp-uu.el
+++ b/tramp-uu.el
@@ -1,6 +1,6 @@
;;; tramp-uu.el --- uuencode in Lisp -*- lexical-binding:t -*-
-;; Copyright (C) 2002-2025 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2026 Free Software Foundation, Inc.
;; Author: Kai Großjohann <[email protected]>
;; Maintainer: Michael Albinus <[email protected]>
diff --git a/tramp.el b/tramp.el
index 1866c7dad6..a6be310f04 100644
--- a/tramp.el
+++ b/tramp.el
@@ -1,6 +1,6 @@
;;; tramp.el --- Transparent Remote Access, Multiple Protocol -*-
lexical-binding:t -*-
-;; Copyright (C) 1998-2025 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2026 Free Software Foundation, Inc.
;; Author: Kai Großjohann <[email protected]>
;; Michael Albinus <[email protected]>
@@ -296,9 +296,8 @@ pair of the form (KEY VALUE). The following KEYs are
defined:
- \"%a\" adds the pseudo-terminal allocation argument \"-t\" in
asynchronous processes, if the connection type is not `pipe'.
- The existence of `tramp-login-args', combined with the
- absence of `tramp-copy-args', is an indication that the
- method is capable of multi-hops.
+ The existence of `tramp-login-args' is an indication that the method
+ is capable of multi-hops.
* `tramp-async-args'
When an asynchronous process is started, we know already that
@@ -2137,7 +2136,7 @@ of `current-buffer'."
"Execute BODY and return the result.
In case of an error, raise a `file-missing' error if FILENAME
does not exist, otherwise propagate the error."
- (declare (indent 2) (debug (tramp-file-name-p form &rest body)))
+ (declare (indent 2) (debug t))
(let ((err (make-symbol "err")))
`(condition-case ,err
(let (signal-hook-function) ,@body)
@@ -2176,7 +2175,7 @@ Remaining args are Lisp expressions to be evaluated
(inside an implicit
If VAR is nil, then we bind `v' to the structure and `method', `user',
`domain', `host', `port', `localname', `hop' to the components."
- (declare (indent 2) (debug (form symbolp &rest body)))
+ (declare (indent 2) (debug t))
(let ((bindings
(mapcar
(lambda (elem)
@@ -3044,14 +3043,7 @@ BODY is the backend specific code."
tramp--last-hop-directory
(tramp-make-tramp-file-name (tramp-dissect-hop-name hop))))
- (let (;; When `tramp-syntax' is `simplified', we need a default method.
- (tramp-default-method
- (and (string-empty-p tramp-postfix-method-format)
- tramp-default-method))
- (tramp-default-method-alist
- (and (string-empty-p tramp-postfix-method-format)
- tramp-default-method-alist))
- tramp-default-user tramp-default-user-alist
+ (let (tramp-default-user tramp-default-user-alist
tramp-default-host tramp-default-host-alist)
;; Possible completion structures.
@@ -3592,7 +3584,7 @@ User is always nil."
;;; Skeleton macros for file name handler functions.
(defmacro tramp-skeleton-copy-directory
- (directory _newname &optional _keep-date _parents _copy-contents &rest body)
+ (directory newname &optional _keep-date _parents _copy-contents &rest body)
"Skeleton for `tramp-*-handle-copy-directory'.
BODY is the backend specific code."
(declare (indent 5) (debug t))
@@ -3603,7 +3595,12 @@ BODY is the backend specific code."
(unless (file-exists-p ,directory)
(tramp-error
(tramp-dissect-file-name ,directory) 'file-missing ,directory))
- ,@body))
+ ,@body
+
+ ;; NEWNAME has wrong cached values.
+ (when (tramp-tramp-file-p ,newname)
+ (with-parsed-tramp-file-name (expand-file-name ,newname) nil
+ (tramp-flush-file-properties v localname)))))
(defmacro tramp-skeleton-delete-directory (directory recursive trash &rest
body)
"Skeleton for `tramp-*-handle-delete-directory'.
@@ -5155,7 +5152,7 @@ Do not set it manually, it is used buffer-local in
`tramp-get-lock-pid'.")
"Whether the method of VEC is capable of multi-hops."
(let ((tramp-verbose 0))
(and (tramp-sh-file-name-handler-p vec)
- (not (tramp-get-method-parameter vec 'tramp-copy-program)))))
+ (tramp-get-method-parameter vec 'tramp-login-args))))
(defun tramp-add-hops (vec)
"Add ad-hoc proxy definitions to `tramp-default-proxies-alist'."
diff --git a/trampver.el b/trampver.el
index 51e04e0a1c..f813fe869d 100644
--- a/trampver.el
+++ b/trampver.el
@@ -1,7 +1,7 @@
;;; trampver.el --- Transparent Remote Access, Multiple Protocol -*-
lexical-binding:t -*-
;;; lisp/trampver.el. Generated from trampver.el.in by configure.
-;; Copyright (C) 2003-2025 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2026 Free Software Foundation, Inc.
;; Author: Kai Großjohann <[email protected]>
;; Maintainer: Michael Albinus <[email protected]>