"J.D. Smith" <[email protected]> writes:

Hi,

>> Tramp doesn't offer such a user option. But thinking about, I come back
>> to an old idea slumbering on my TODO: Make external methods (like scp,
>> rsync) multi-hop capable.
>>
>> It shouldn't be too hard. As you know, Tramp distinguishes between
>> inline and external methods, like ssh and scp. The major difference is
>> copying large files, which is performed by the scp command. For
>> everything else, both use the same code.
>>
>> In theory, it should be possible to add another check for external Tramp
>> methods: If they are used inside a multi-hop connection, don't use the
>> external command. Then, they should behave identically.
>
> That sounds like a better plan indeed!

I've compiled a small patch which should make this happen. Would you
like to check?

Best regards, Michael.

diff --git a/lisp/tramp-sh.el b/lisp/tramp-sh.el
index e7e21684..1aa114e7 100644
--- a/lisp/tramp-sh.el
+++ b/lisp/tramp-sh.el
@@ -5677,8 +5677,9 @@ raises an error."
 (defun tramp-method-out-of-band-p (vec size)
   "Return t if this is an out-of-band method, nil otherwise."
   (and
-   ;; It shall be an out-of-band method.
-   (tramp-get-method-parameter vec 'tramp-copy-program)
+   ;; 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.
    (numberp size)
    ;; Either the file size is large enough, or (in rare cases) there
diff --git a/lisp/tramp.el b/lisp/tramp.el
index ebbe6df0..39d3d073 100644
--- a/lisp/tramp.el
+++ b/lisp/tramp.el
@@ -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
@@ -5148,7 +5147,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'."

Reply via email to