changeset 103934:33e088977519

* net/tramp.el (tramp-wait-for-output): Handle the case when commands do not return a newline but a null byte before the shell prompt. (Bug#3858)
author Michael Albinus <michael.albinus@gmx.de>
date Thu, 16 Jul 2009 10:23:46 +0000
parents 836edd2c1365
children 73ee844b3bb6
files lisp/net/tramp.el
diffstat 1 files changed, 13 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/net/tramp.el	Thu Jul 16 08:25:21 2009 +0000
+++ b/lisp/net/tramp.el	Thu Jul 16 10:23:46 2009 +0000
@@ -3898,15 +3898,15 @@
 
       ;; Determine output.
       (cond
-       ;; Just a buffer
+       ;; Just a buffer.
        ((bufferp destination)
 	(setq outbuf destination))
-       ;; A buffer name
+       ;; A buffer name.
        ((stringp destination)
 	(setq outbuf (get-buffer-create destination)))
        ;; (REAL-DESTINATION ERROR-DESTINATION)
        ((consp destination)
-	;; output
+	;; output.
 	(cond
 	 ((bufferp (car destination))
 	  (setq outbuf (car destination)))
@@ -3914,7 +3914,7 @@
 	  (setq outbuf (get-buffer-create (car destination))))
 	 ((car destination)
 	  (setq outbuf (current-buffer))))
-	;; stderr
+	;; stderr.
 	(cond
 	 ((stringp (cadr destination))
 	  (setcar (cdr destination) (expand-file-name (cadr destination)))
@@ -3927,7 +3927,7 @@
 	    (setq stderr (tramp-make-tramp-temp-file v)
 		  tmpstderr (tramp-make-tramp-file-name
 			     method user host stderr))))
-	 ;; stderr to be discarded
+	 ;; stderr to be discarded.
 	 ((null (cadr destination))
 	  (setq stderr "/dev/null"))))
        ;; 't
@@ -6660,10 +6660,14 @@
 (defun tramp-wait-for-output (proc &optional timeout)
   "Wait for output from remote rsh command."
   (with-current-buffer (process-buffer proc)
-    ;; Initially, `tramp-end-of-output' is "$ ".  There might be
-    ;; leading escape sequences, which must be ignored.
-    (let* ((regexp (format "^[^$\n]*%s\r?$" (regexp-quote tramp-end-of-output)))
-	   (found (tramp-wait-for-regexp proc timeout regexp)))
+    (let* (;; Initially, `tramp-end-of-output' is "$ ".  There might
+	   ;; be leading escape sequences, which must be ignored.
+	   (regexp (format "[^$\n]*%s\r?$" (regexp-quote tramp-end-of-output)))
+	   ;; Sometimes, the commands do not return a newline but a
+	   ;; null byte before the shell prompt, for example "git
+	   ;; ls-files -c -z ...".
+	   (regexp1 (format "\\(^\\|\000\\)%s" regexp))
+	   (found (tramp-wait-for-regexp proc timeout regexp1)))
       (if found
 	  (let (buffer-read-only)
 	    (goto-char (point-max))