]> git.eshelyaron.com Git - emacs.git/commitdiff
Tramp code cleanup
authorMichael Albinus <michael.albinus@gmx.de>
Sun, 14 Aug 2022 15:01:25 +0000 (17:01 +0200)
committerMichael Albinus <michael.albinus@gmx.de>
Sun, 14 Aug 2022 15:01:25 +0000 (17:01 +0200)
* 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
lisp/net/tramp-compat.el
lisp/net/tramp-crypt.el
lisp/net/tramp-gvfs.el
lisp/net/tramp-sh.el

index d033667e87f0f98ac21eca6009e31a25926f717d..170583f608c3ac22bf11107beaa9a8529455b33f 100644 (file)
@@ -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)))
index b83f9f0724ecc505731b503354e74cde5c7606fa..203d3ede98f978bc505e795fe1fb264d9de0e49a 100644 (file)
@@ -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))
 
index 7f385292626775c22518e3f8cd87c182dcf85fc2..27b359d439ba51719efe2c40afe04fff725d7973 100644 (file)
@@ -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
index 0b40ff867f2e8b79ca4dbd5700e1851862c773c0..ca5e959bea5f418c6c2709ef54a83ad09a7fbd3c 100644 (file)
@@ -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
index a2b675cf88530da64c316a85b33f8c726130c55a..f2e3c48235a980beafbecbf2a2a312cc1b85bf29 100644 (file)
@@ -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))))))