emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 1d3fe25690 2/2: Tramp code cleanup


From: Michael Albinus
Subject: master 1d3fe25690 2/2: Tramp code cleanup
Date: Sun, 14 Aug 2022 11:01:38 -0400 (EDT)

branch: master
commit 1d3fe256907d5e78a4acedd194e55db8ab952952
Author: Michael Albinus <michael.albinus@gmx.de>
Commit: Michael Albinus <michael.albinus@gmx.de>

    Tramp code cleanup
    
    * lisp/net/tramp-adb.el
    (tramp-adb-handle-directory-files-and-attributes): Use it.
    
    * lisp/net/tramp-compat.el (tramp-compat-replace-regexp-in-region):
    New defalias.
    
    * lisp/net/tramp-crypt.el (tramp-crypt-do-encrypt-or-decrypt-file-name):
    Fix root filename for cache.
    
    * lisp/net/tramp-gvfs.el (tramp-gvfs-do-copy-or-rename-file):
    Adapt check for proper remote command.
    
    * lisp/net/tramp-sh.el (tramp-open-shell): Add sanity check for
    shell prompt.
    (tramp-get-ls-command): Check, that argument "--color=never" has
    the intended effect.
---
 lisp/net/tramp-adb.el    |  2 +-
 lisp/net/tramp-compat.el | 23 +++++++++++++++++++++++
 lisp/net/tramp-crypt.el  |  2 +-
 lisp/net/tramp-gvfs.el   |  7 ++++---
 lisp/net/tramp-sh.el     | 47 ++++++++++++++++++++++++++++++++++-------------
 5 files changed, 63 insertions(+), 18 deletions(-)

diff --git a/lisp/net/tramp-adb.el b/lisp/net/tramp-adb.el
index d033667e87..170583f608 100644
--- a/lisp/net/tramp-adb.el
+++ b/lisp/net/tramp-adb.el
@@ -324,7 +324,7 @@ arguments to pass to the OPERATION."
                      (tramp-compat-file-name-concat localname "."))
                     (tramp-shell-quote-argument
                      (tramp-compat-file-name-concat localname ".."))))
-         (replace-regexp-in-region
+         (tramp-compat-replace-regexp-in-region
           (regexp-quote
            (tramp-compat-file-name-unquote
             (file-name-as-directory localname)))
diff --git a/lisp/net/tramp-compat.el b/lisp/net/tramp-compat.el
index b83f9f0724..203d3ede98 100644
--- a/lisp/net/tramp-compat.el
+++ b/lisp/net/tramp-compat.el
@@ -330,6 +330,29 @@ CONDITION can also be a list of error conditions."
       (autoload 'netrc-parse "netrc")
       (netrc-parse file))))
 
+;; Function `replace-regexp-in-region' is new in Emacs 28.1.
+(defalias 'tramp-compat-replace-regexp-in-region
+  (if (fboundp 'replace-regexp-in-region)
+      #'replace-regexp-in-region
+    (lambda (regexp replacement &optional start end)
+      (if start
+         (when (< start (point-min))
+            (error "Start before start of buffer"))
+       (setq start (point)))
+      (if end
+         (when (> end (point-max))
+            (error "End after end of buffer"))
+       (setq end (point-max)))
+      (save-excursion
+       (let ((matches 0)
+              (case-fold-search nil))
+         (goto-char start)
+         (while (re-search-forward regexp end t)
+            (replace-match replacement t)
+            (setq matches (1+ matches)))
+         (and (not (zerop matches))
+               matches))))))
+
 (dolist (elt (all-completions "tramp-compat-" obarray 'functionp))
   (put (intern elt) 'tramp-suppress-trace t))
 
diff --git a/lisp/net/tramp-crypt.el b/lisp/net/tramp-crypt.el
index 7f38529262..27b359d439 100644
--- a/lisp/net/tramp-crypt.el
+++ b/lisp/net/tramp-crypt.el
@@ -426,7 +426,7 @@ Otherwise, return NAME."
        (if (directory-name-p name) #'file-name-as-directory #'identity)
        (concat
        dir
-       (unless (string-equal localname "/")
+       (unless (string-match-p (rx (seq bos (opt "/") eos)) localname)
          (with-tramp-file-property
              crypt-vec localname (concat (symbol-name op) "-file-name")
            (unless (tramp-crypt-send-command
diff --git a/lisp/net/tramp-gvfs.el b/lisp/net/tramp-gvfs.el
index 0b40ff867f..ca5e959bea 100644
--- a/lisp/net/tramp-gvfs.el
+++ b/lisp/net/tramp-gvfs.el
@@ -1055,9 +1055,10 @@ file names."
                         ;; code in case of direct copy/move.  Apply
                         ;; sanity checks.
                         (or (not equal-remote)
-                            (tramp-gvfs-info newname)
-                            (eq op 'copy)
-                            (not (tramp-gvfs-info filename))))
+                            (and
+                             (tramp-gvfs-info newname)
+                             (or (eq op 'copy)
+                                 (not (tramp-gvfs-info filename))))))
 
                  (if (or (not equal-remote)
                          (and equal-remote
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index a2b675cf88..f2e3c48235 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -4205,14 +4205,17 @@ file exists and nonzero exit status otherwise."
     ;; by some sh implementations (eg, bash when called as sh) on
     ;; startup; this way, we avoid the startup file clobbering $PS1.
     ;; $PROMPT_COMMAND is another way to set the prompt in /bin/bash,
-    ;; it must be discarded as well.  $HISTFILE is set according to
-    ;; `tramp-histfile-override'.  $TERM and $INSIDE_EMACS set here to
-    ;; ensure they have the correct values when the shell starts, not
-    ;; just processes run within the shell.  (Which processes include
-    ;; our initial probes to ensure the remote shell is usable.)
-    ;; For the time being, we assume that all shells interpret -i as
-    ;; interactive shell.  Must be the last argument, because (for
-    ;; example) bash expects long options first.
+    ;; it must be discarded as well.  Some ssh daemons (for example,
+    ;; on Android devices) do not acknowledge the $PS1 setting in
+    ;; that call, so we make a further sanity check.  (Bug#57044)
+    ;; $HISTFILE is set according to `tramp-histfile-override'.  $TERM
+    ;; and $INSIDE_EMACS set here to ensure they have the correct
+    ;; values when the shell starts, not just processes run within the
+    ;; shell.  (Which processes include our initial probes to ensure
+    ;; the remote shell is usable.)  For the time being, we assume
+    ;; that all shells interpret -i as interactive shell.  Must be the
+    ;; last argument, because (for example) bash expects long options
+    ;; first.
     (tramp-send-command
      vec (format
          (concat
@@ -4228,7 +4231,21 @@ file exists and nonzero exit status otherwise."
              ""))
          (tramp-shell-quote-argument tramp-end-of-output)
          shell (or (tramp-get-sh-extra-args shell) ""))
-     t)
+     t t)
+
+    ;; Sanity check.
+    (tramp-barf-if-no-shell-prompt
+     (tramp-get-connection-process vec) 10
+     "Couldn't find remote shell prompt for %s" shell)
+    (unless
+       (tramp-check-for-regexp
+        (tramp-get-connection-process vec) (regexp-quote tramp-end-of-output))
+      (tramp-message vec 5 "Setting shell prompt")
+      (tramp-send-command
+       vec (format "PS1=%s PS2='' PS3='' PROMPT_COMMAND=''"
+                  (tramp-shell-quote-argument tramp-end-of-output))
+       t))
+
     ;; Check proper HISTFILE setting.  We give up when not working.
     (when (and (stringp tramp-histfile-override)
               (file-name-directory tramp-histfile-override))
@@ -5524,10 +5541,14 @@ Nonexistent directories are removed from spec."
             ;; "--color=never" argument (for example on FreeBSD).
             (when (tramp-send-command-and-check
                    vec (format "%s -lnd /" result))
-              (when (tramp-send-command-and-check
-                     vec (format
-                          "%s --color=never -al %s"
-                           result (tramp-get-remote-null-device vec)))
+              (when (and (tramp-send-command-and-check
+                          vec (format
+                               "%s --color=never -al %s"
+                               result (tramp-get-remote-null-device vec)))
+                         (not (string-match-p
+                               (regexp-quote "\e")
+                               (tramp-get-buffer-string
+                                (tramp-get-buffer vec)))))
                 (setq result (concat result " --color=never")))
               (throw 'ls-found result))
             (setq dl (cdr dl))))))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]