diff options
-rw-r--r-- | lisp/ChangeLog | 18 | ||||
-rw-r--r-- | lisp/net/tramp-cmds.el | 9 | ||||
-rw-r--r-- | lisp/net/tramp-sh.el | 66 |
3 files changed, 65 insertions, 28 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index a9c7ec6f916..40c32784f9a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,21 @@ +2011-07-04 Michael Albinus <michael.albinus@gmx.de> + + * net/tramp-cmds.el (tramp-cleanup-this-connection): New command. + + * net/tramp-sh.el (tramp-color-escape-sequence-regexp): New defconst. + (tramp-sh-handle-insert-directory, tramp-convert-file-attributes): + Use it. + (tramp-remote-path): Add "/bin" and "/usr/bin". On busyboxes, + `tramp-default-remote-path' does not exist. + (tramp-send-command-and-read): New optional argument NOERROR. + (tramp-open-connection-setup-interactive-shell) + (tramp-get-remote-path, tramp-get-remote-stat): Use it. + (tramp-get-remote-readlink): Do not mask with `ignore-errors'. + (tramp-process-sentinel): Flush also process' connection property. + (tramp-sh-handle-start-file-process): Do not set process + sentinel. It is done now ... + (tramp-maybe-open-connection): ... here. (Bug#8929) + 2011-07-04 MON KEY <monkey@sandpframing.com> * play/animate.el (animate-string): Doc fixes and allow changing diff --git a/lisp/net/tramp-cmds.el b/lisp/net/tramp-cmds.el index 764ee35d45b..fcf523a7068 100644 --- a/lisp/net/tramp-cmds.el +++ b/lisp/net/tramp-cmds.el @@ -100,6 +100,15 @@ When called interactively, a Tramp connection has to be selected." (when (bufferp buf) (kill-buffer buf))))) ;;;###tramp-autoload +(defun tramp-cleanup-this-connection () + "Flush all connection related objects of the current buffer's connection." + (interactive) + (and (stringp default-directory) + (file-remote-p default-directory) + (tramp-cleanup-connection + (tramp-dissect-file-name default-directory 'noexpand)))) + +;;;###tramp-autoload (defun tramp-cleanup-all-connections () "Flush all Tramp internal objects. This includes password cache, file cache, connection cache, buffers." diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index acba48b8374..f342b005c4c 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -66,6 +66,9 @@ files conditionalize this setup based on the TERM environment variable." :group 'tramp :type 'string) +(defconst tramp-color-escape-sequence-regexp "\e[[;0-9]+m" + "Escape sequences produced by the \"ls\" command.") + ;; ksh on OpenBSD 4.5 requires that $PS1 contains a `#' character for ;; root users. It uses the `$' character for other users. In order ;; to guarantee a proper prompt, we use "#$ " for the prompt. @@ -484,7 +487,7 @@ detected as prompt when being sent on echoing hosts, therefore.") ;; FreeBSD: /usr/bin:/bin:/usr/sbin:/sbin: - beware trailing ":"! ;; IRIX64: /usr/bin (defcustom tramp-remote-path - '(tramp-default-remote-path "/usr/sbin" "/usr/local/bin" + '(tramp-default-remote-path "/bin" "/usr/bin" "/usr/sbin" "/usr/local/bin" "/local/bin" "/local/freeware/bin" "/local/gnu/bin" "/usr/freeware/bin" "/usr/pkg/bin" "/usr/contrib/bin") "*List of directories to search for executables on remote host. @@ -2582,6 +2585,12 @@ This is like `dired-recursive-delete-directory' for Tramp files." (forward-line 1) (delete-region (match-beginning 0) (point))) + ;; Some busyboxes are reluctant to discard colors. + (unless (string-match "color" (tramp-get-connection-property v "ls" "")) + (goto-char beg) + (while (re-search-forward tramp-color-escape-sequence-regexp nil t) + (replace-match ""))) + ;; The inserted file could be from somewhere else. (when (and (not wildcard) (not full-directory-p)) (goto-char (point-max)) @@ -2669,6 +2678,7 @@ the result will be a local, non-Tramp, filename." (let ((vec (tramp-get-connection-property proc "vector" nil))) (when vec (tramp-message vec 5 "Sentinel called: `%s' `%s'" proc event) + (tramp-flush-connection-property proc) (tramp-flush-directory-property vec ""))))) ;; We use BUFFER also as connection buffer during setup. Because of @@ -2721,9 +2731,7 @@ the result will be a local, non-Tramp, filename." v 'file-error "pty association is not supported for `%s'" name))))) (let ((p (tramp-get-connection-process v))) - ;; Set sentinel and query flag for this process. - (tramp-set-connection-property p "vector" v) - (set-process-sentinel p 'tramp-process-sentinel) + ;; Set query flag for this process. (tramp-compat-set-process-query-on-exit-flag p t) ;; Return process. p))) @@ -3834,10 +3842,9 @@ process to set up. VEC specifies the connection." (tramp-send-command vec "stty -oxtabs" t)) ;; Set `remote-tty' process property. - (ignore-errors - (let ((tty (tramp-send-command-and-read vec "echo \\\"`tty`\\\""))) - (unless (zerop (length tty)) - (tramp-compat-process-put proc 'remote-tty tty)))) + (let ((tty (tramp-send-command-and-read vec "echo \\\"`tty`\\\"" 'noerror))) + (unless (zerop (length tty)) + (tramp-compat-process-put proc 'remote-tty tty))) ;; Dump stty settings in the traces. (when (>= tramp-verbose 9) @@ -4300,11 +4307,15 @@ connection if a previous connection has died for some reason." tramp-encoding-command-interactive) (list tramp-encoding-shell)))))) + ;; Set sentinel and query flag. + (tramp-set-connection-property p "vector" vec) + (set-process-sentinel p 'tramp-process-sentinel) + (tramp-compat-set-process-query-on-exit-flag p nil) + (tramp-message vec 6 "%s" (mapconcat 'identity (process-command p) " ")) ;; Check whether process is alive. - (tramp-compat-set-process-query-on-exit-flag p nil) (tramp-barf-if-no-shell-prompt p 60 "Couldn't find local shell prompt %s" tramp-encoding-shell) @@ -4492,9 +4503,10 @@ FMT and ARGS which are passed to `error'." (unless (tramp-send-command-and-check vec command) (apply 'tramp-error vec 'file-error fmt args))) -(defun tramp-send-command-and-read (vec command) +(defun tramp-send-command-and-read (vec command &optional noerror) "Run COMMAND and return the output, which must be a Lisp expression. -In case there is no valid Lisp expression, it raises an error" +In case there is no valid Lisp expression and NOERROR is nil, it +raises an error." (tramp-barf-unless-okay vec command "`%s' returns with error" command) (with-current-buffer (tramp-get-connection-buffer vec) ;; Read the expression. @@ -4504,16 +4516,21 @@ In case there is no valid Lisp expression, it raises an error" ;; Error handling. (when (re-search-forward "\\S-" (point-at-eol) t) (error nil))) - (error (tramp-error - vec 'file-error - "`%s' does not return a valid Lisp expression: `%s'" - command (buffer-string)))))) + (error (unless noerror + (tramp-error + vec 'file-error + "`%s' does not return a valid Lisp expression: `%s'" + command (buffer-string))))))) (defun tramp-convert-file-attributes (vec attr) "Convert file-attributes ATTR generated by perl script, stat or ls. Convert file mode bits to string and set virtual device number. Return ATTR." (when attr + ;; Remove color escape sequences from symlink. + (when (stringp (car attr)) + (while (string-match tramp-color-escape-sequence-regexp (car attr)) + (setcar attr (replace-match "" nil nil (car attr))))) ;; Convert last access time. (unless (listp (nth 4 attr)) (setcar (nthcdr 4 attr) @@ -4691,8 +4708,7 @@ This is used internally by `tramp-file-mode-from-int'." (when elt1 (or (tramp-send-command-and-read - vec - "x=`getconf PATH 2>/dev/null` && echo \\\"$x\\\" || echo nil") + vec "echo \\\"`getconf PATH 2>/dev/null`\\\"" 'noerror) ;; Default if "getconf" is not available. (progn (tramp-message @@ -4854,15 +4870,12 @@ This is used internally by `tramp-file-mode-from-int'." (let ((result (tramp-find-executable vec "stat" (tramp-get-remote-path vec))) tmp) - ;; Check whether stat(1) returns usable syntax. %s does not + ;; Check whether stat(1) returns usable syntax. "%s" does not ;; work on older AIX systems. (when result (setq tmp - ;; We don't want to display an error message. - (tramp-compat-with-temp-message (or (current-message) "") - (ignore-errors - (tramp-send-command-and-read - vec (format "%s -c '(\"%%N\" %%s)' /" result))))) + (tramp-send-command-and-read + vec (format "%s -c '(\"%%N\" %%s)' /" result) 'noerror)) (unless (and (listp tmp) (stringp (car tmp)) (string-match "^./.$" (car tmp)) (integerp (cadr tmp))) @@ -4875,11 +4888,8 @@ This is used internally by `tramp-file-mode-from-int'." (let ((result (tramp-find-executable vec "readlink" (tramp-get-remote-path vec)))) (when (and result - ;; We don't want to display an error message. - (tramp-compat-with-temp-message (or (current-message) "") - (ignore-errors - (tramp-send-command-and-check - vec (format "%s --canonicalize-missing /" result))))) + (tramp-send-command-and-check + vec (format "%s --canonicalize-missing /" result))) result)))) (defun tramp-get-remote-trash (vec) |