[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] emacs-24 2616307 1/2: * net/tramp-sh.el (tramp-send-comman
From: |
Michael Albinus |
Subject: |
[Emacs-diffs] emacs-24 2616307 1/2: * net/tramp-sh.el (tramp-send-command-and-read): New optional arg MARKER. |
Date: |
Fri, 19 Dec 2014 11:52:52 +0000 |
branch: emacs-24
commit 2616307f5c517124715b4d20bdd23c6c70366ac9
Author: Michael Albinus <address@hidden>
Commit: Michael Albinus <address@hidden>
* net/tramp-sh.el (tramp-send-command-and-read): New optional arg MARKER.
(tramp-get-remote-path): Use it.
---
lisp/ChangeLog | 6 ++++++
lisp/net/tramp-sh.el | 33 ++++++++++++++++++++-------------
2 files changed, 26 insertions(+), 13 deletions(-)
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index a7fe332..599290a 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,9 @@
+2014-12-19 Michael Albinus <address@hidden>
+
+ * net/tramp-sh.el (tramp-send-command-and-read): New optional
+ arg MARKER.
+ (tramp-get-remote-path): Use it.
+
2014-12-17 Michael Albinus <address@hidden>
* net/tramp.el (tramp-error-with-buffer): Call `message' properly.
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index bb1a813..dc78ace 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -2856,7 +2856,7 @@ the result will be a local, non-Tramp, file name."
(name1 name)
(i 0)
;; We do not want to raise an error when
- ;; `start-file-process' has been started several time in
+ ;; `start-file-process' has been started several times in
;; `eshell' and friends.
(tramp-current-connection nil))
@@ -4865,8 +4865,9 @@ FMT and ARGS which are passed to `error'."
(or (tramp-send-command-and-check vec command)
(apply 'tramp-error vec 'file-error fmt args)))
-(defun tramp-send-command-and-read (vec command &optional noerror)
+(defun tramp-send-command-and-read (vec command &optional noerror marker)
"Run COMMAND and return the output, which must be a Lisp expression.
+If MARKER is a regexp, read the output after that string.
In case there is no valid Lisp expression and NOERROR is nil, it
raises an error."
(when (if noerror
@@ -4874,8 +4875,17 @@ 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.
(goto-char (point-min))
+ ;; Read the marker.
+ (when (stringp marker)
+ (condition-case nil
+ (re-search-forward marker)
+ (error (unless noerror
+ (tramp-error
+ vec 'file-error
+ "`%s' does not return the marker `%s': `%s'"
+ command marker (buffer-string))))))
+ ;; Read the expression.
(condition-case nil
(prog1 (read (current-buffer))
;; Error handling.
@@ -5027,25 +5037,22 @@ Return ATTR."
"/bin:/usr/bin")
"/bin:/usr/bin"))))
(own-remote-path
- ;; We cannot apply `tramp-send-command-and-read' because
- ;; the login shell could return more than just the $PATH
- ;; string. So we emulate that function.
+ ;; The login shell could return more than just the $PATH
+ ;; string. So we use `tramp-end-of-heredoc' as marker.
(when elt2
- (tramp-send-command
+ (tramp-send-command-and-read
vec
(format
- "%s -l %s 'echo \\\"$PATH\\\"'"
+ "%s -l %s 'echo %s \\\"$PATH\\\"'"
(tramp-get-method-parameter
(tramp-file-name-method vec) 'tramp-remote-shell)
(mapconcat
'identity
(tramp-get-method-parameter
(tramp-file-name-method vec) 'tramp-remote-shell-args)
- " ")))
- (with-current-buffer (tramp-get-connection-buffer vec)
- (goto-char (point-max))
- (forward-line -1)
- (read (current-buffer))))))
+ " ")
+ (tramp-shell-quote-argument tramp-end-of-heredoc))
+ nil (regexp-quote tramp-end-of-heredoc)))))
;; Replace place holder `tramp-default-remote-path'.
(when elt1
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] emacs-24 2616307 1/2: * net/tramp-sh.el (tramp-send-command-and-read): New optional arg MARKER.,
Michael Albinus <=