mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-16 17:24:23 +00:00
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.
This commit is contained in:
parent
9d52617935
commit
1d3fe25690
5 changed files with 63 additions and 18 deletions
|
|
@ -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)))
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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))))))
|
||||
|
|
|
|||
Loading…
Reference in a new issue