GNU bug report logs - #61926
29.0.60; [PATCH] Make tramp-remote-path behave like exec-path

Previous Next

Package: emacs;

Reported by: João Távora <joaotavora <at> gmail.com>

Date: Fri, 3 Mar 2023 00:19:01 UTC

Severity: normal

Found in version 29.0.60

To reply to this bug, email your comments to 61926 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to michael.albinus <at> gmx.de, bug-gnu-emacs <at> gnu.org:
bug#61926; Package emacs. (Fri, 03 Mar 2023 00:19:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to João Távora <joaotavora <at> gmail.com>:
New bug report received and forwarded. Copy sent to michael.albinus <at> gmx.de, bug-gnu-emacs <at> gnu.org. (Fri, 03 Mar 2023 00:19:01 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: João Távora <joaotavora <at> gmail.com>
To: bug-gnu-emacs <at> gnu.org
Subject: 29.0.60; [PATCH] Make tramp-remote-path behave like exec-path
Date: Fri, 03 Mar 2023 00:19:50 +0000
Hi maintainers, Michael,

This started in bug#61748.  There we discovered that while something
like this works and will correctly find '/home/user/bin/myscript'

    ~/Source/Emacs/emacs/src/emacs -Q --batch                \
    -l tramp                                                 \
    --eval '(add-to-list (quote tramp-remote-path) "~/bin")' \
    $REMOTE_FILE                                             \
    --eval '(message "%s" (executable-find "myscript" t))'

This subtly different incantation will _not_ work:

    ~/Source/Emacs/emacs/src/emacs -Q --batch                \
    -l tramp                                                 \
    $REMOTE_FILE                                             \
    --eval '(add-to-list (quote tramp-remote-path) "~/bin")' \
    --eval '(message "%s" (executable-find "myscript" t))'

This is because of a caching behaviour in tramp-get-remote-path.

The patch after my sig solves the problem: the above two incantations
produce the same value.  It will prevent confusion among users (as I
was) about the what seemed like unstable behaviour from executble-find
and program invocation.

Very few Emacs variables, if any, require a separate command (here M-x
tramp-cleanup-all-connections) to be issued after the variables value is
set.  This variable needn't belong to that group.  

There is a discussion about this caching somewhat deep in the Tramp
manual.  But I think it would be much nicer if simple things like this
worked out of the box, allowing users to experiment with value for
`tramp-remote-path' via M-: (setq ... ) or some other variable-setting
method, until they get it right.

Changing this variable's value doesn't alter the remote value of the
PATH environment variable, much like changing exec-path locally doesn't
change the local PATH environment variable.

João

commit c9d577b9ede6192af6db47442ab9709127e39fb2
Author: João Távora <joaotavora <at> gmail.com>
Date:   Wed Mar 1 11:03:23 2023 +0000

    Tramp: flush configuration if tramp-remote-path changed
    
    * lisp/net/tramp-sh.el (tramp-last-used-remote-path): New variable.
    (tramp-get-remote-path): Use it to decide to flush.

diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index ec8437176db..29d2dda6829 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -5571,10 +5571,18 @@ tramp-check-remote-uname
   "Check whether REGEXP matches the connection property \"uname\"."
   (string-match-p regexp (tramp-get-connection-property vec "uname" "")))
 
+(defvar tramp-last-used-remote-path nil)
+
 (defun tramp-get-remote-path (vec)
   "Compile list of remote directories for PATH.
 Nonexistent directories are removed from spec."
   (with-current-buffer (tramp-get-connection-buffer vec)
+    (when (not (equal tramp-last-used-remote-path tramp-remote-path))
+      ;; If user has tweaked `tramp-remote-path', flush any caches
+      ;; bug#61748.
+      (dolist (v (list vec (tramp-get-process vec)))
+        (tramp-flush-connection-property v "remote-path")))
+    (setq tramp-last-used-remote-path tramp-remote-path)
     ;; Expand connection-local variables.
     (tramp-set-connection-local-variables vec)
     (with-tramp-connection-property




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#61926; Package emacs. (Fri, 03 Mar 2023 07:25:02 GMT) Full text and rfc822 format available.

Message #8 received at 61926 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: João Távora <joaotavora <at> gmail.com>
Cc: michael.albinus <at> gmx.de, 61926 <at> debbugs.gnu.org
Subject: Re: bug#61926: 29.0.60;
 [PATCH] Make tramp-remote-path behave like exec-path
Date: Fri, 03 Mar 2023 09:23:58 +0200
> Cc: michael.albinus <at> gmx.de
> From: João Távora <joaotavora <at> gmail.com>
> Date: Fri, 03 Mar 2023 00:19:50 +0000
> 
> Very few Emacs variables, if any, require a separate command (here M-x
> tramp-cleanup-all-connections) to be issued after the variables value is
> set.  This variable needn't belong to that group.  
> 
> There is a discussion about this caching somewhat deep in the Tramp
> manual.  But I think it would be much nicer if simple things like this
> worked out of the box, allowing users to experiment with value for
> `tramp-remote-path' via M-: (setq ... ) or some other variable-setting
> method, until they get it right.
> 
> Changing this variable's value doesn't alter the remote value of the
> PATH environment variable, much like changing exec-path locally doesn't
> change the local PATH environment variable.

We nowadays have variable-watching feature in Emacs, see
add-variable-watcher.  Could that facility be used in this case to
allow a more elegant solution?




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#61926; Package emacs. (Fri, 03 Mar 2023 16:21:02 GMT) Full text and rfc822 format available.

Message #11 received at 61926 <at> debbugs.gnu.org (full text, mbox):

From: João Távora <joaotavora <at> gmail.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: michael.albinus <at> gmx.de, 61926 <at> debbugs.gnu.org
Subject: Re: bug#61926: 29.0.60;
 [PATCH] Make tramp-remote-path behave like exec-path
Date: Fri, 3 Mar 2023 16:20:29 +0000
On Fri, Mar 3, 2023 at 7:24 AM Eli Zaretskii <eliz <at> gnu.org> wrote:

> We nowadays have variable-watching feature in Emacs, see
> add-variable-watcher.  Could that facility be used in this case to
> allow a more elegant solution?

Yes, good idea.  But only if we have access to the cache
locations that we have to flush. These would be the "remote-path"
properties of every Tramp connection, and I _think_ there's
an accessor for that, but I have to check.

Which reminds me, that patch I sent has a big thinko :-)

If you re-set tramp-remote-path you get flushing for the
next call to tramp-get-remote-path, which will be for a given
connection.  At that moment you forget changes by setting
tramp-last-used-remote-path so and you will fail to flush for
the next connection.

Not hard to fix, we just have to make sure to flush _all_
connections when we detect the change, however we detect it.

João




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#61926; Package emacs. (Wed, 12 Feb 2025 04:39:01 GMT) Full text and rfc822 format available.

Message #14 received at 61926 <at> debbugs.gnu.org (full text, mbox):

From: Stefan Kangas <stefankangas <at> gmail.com>
To: João Távora <joaotavora <at> gmail.com>
Cc: Eli Zaretskii <eliz <at> gnu.org>, michael.albinus <at> gmx.de, 61926 <at> debbugs.gnu.org
Subject: Re: bug#61926: 29.0.60;
 [PATCH] Make tramp-remote-path behave like exec-path
Date: Tue, 11 Feb 2025 20:38:08 -0800
João Távora <joaotavora <at> gmail.com> writes:

> On Fri, Mar 3, 2023 at 7:24 AM Eli Zaretskii <eliz <at> gnu.org> wrote:
>
>> We nowadays have variable-watching feature in Emacs, see
>> add-variable-watcher.  Could that facility be used in this case to
>> allow a more elegant solution?
>
> Yes, good idea.  But only if we have access to the cache
> locations that we have to flush. These would be the "remote-path"
> properties of every Tramp connection, and I _think_ there's
> an accessor for that, but I have to check.
>
> Which reminds me, that patch I sent has a big thinko :-)
>
> If you re-set tramp-remote-path you get flushing for the
> next call to tramp-get-remote-path, which will be for a given
> connection.  At that moment you forget changes by setting
> tramp-last-used-remote-path so and you will fail to flush for
> the next connection.
>
> Not hard to fix, we just have to make sure to flush _all_
> connections when we detect the change, however we detect it.

What's the status here?  Did you make any progress with this?




Removed tag(s) patch. Request was from Stefan Kangas <stefankangas <at> gmail.com> to control <at> debbugs.gnu.org. (Wed, 12 Feb 2025 04:39:02 GMT) Full text and rfc822 format available.

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#61926; Package emacs. (Wed, 12 Feb 2025 08:28:01 GMT) Full text and rfc822 format available.

Message #19 received at 61926 <at> debbugs.gnu.org (full text, mbox):

From: João Távora <joaotavora <at> gmail.com>
To: Stefan Kangas <stefankangas <at> gmail.com>
Cc: Eli Zaretskii <eliz <at> gnu.org>, michael.albinus <at> gmx.de, 61926 <at> debbugs.gnu.org
Subject: Re: bug#61926: 29.0.60;
 [PATCH] Make tramp-remote-path behave like exec-path
Date: Wed, 12 Feb 2025 08:27:04 +0000
On Wed, Feb 12, 2025 at 4:38 AM Stefan Kangas <stefankangas <at> gmail.com> wrote:
>
> What's the status here?  Did you make any progress with this?

No.  If someone does and the patch touches Eglot please show
it to me.

João




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#61926; Package emacs. (Wed, 12 Feb 2025 14:43:02 GMT) Full text and rfc822 format available.

Message #22 received at 61926 <at> debbugs.gnu.org (full text, mbox):

From: Stefan Kangas <stefankangas <at> gmail.com>
To: João Távora <joaotavora <at> gmail.com>
Cc: Eli Zaretskii <eliz <at> gnu.org>, michael.albinus <at> gmx.de, 61926 <at> debbugs.gnu.org
Subject: Re: bug#61926: 29.0.60;
 [PATCH] Make tramp-remote-path behave like exec-path
Date: Wed, 12 Feb 2025 06:42:27 -0800
João Távora <joaotavora <at> gmail.com> writes:

> On Wed, Feb 12, 2025 at 4:38 AM Stefan Kangas <stefankangas <at> gmail.com> wrote:
>>
>> What's the status here?  Did you make any progress with this?
>
> No.  If someone does and the patch touches Eglot please show
> it to me.

Michael, any comments here?




This bug report was last modified 125 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.