From d5f97f62956d942b1c92802e0a632abb471359b2 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Wed, 5 Dec 2012 15:06:06 +0100 Subject: [PATCH] * net/tramp-sh.el (tramp-do-copy-or-rename-file-out-of-band): Check return code of copy command. --- lisp/ChangeLog | 3 +++ lisp/net/tramp-sh.el | 30 +++++++++++++++++++++++++++--- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 42cd1dca308..cbc0e743183 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2012-12-05 Michael Albinus + * net/tramp-sh.el (tramp-do-copy-or-rename-file-out-of-band): + Check return code of copy command. + * net/tramp-adb.el (tramp-adb-sdk-dir, tramp-adb-prompt): Use group `tramp'. Add version. diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index 340b7ad353d..28a06b2a647 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -2379,17 +2379,41 @@ The method used must be an out-of-band method." ;; last longer than 60 secs. (let ((p (let ((default-directory (tramp-compat-temporary-file-directory))) - (apply 'start-process + (apply 'start-process-shell-command (tramp-get-connection-name v) (tramp-get-connection-buffer v) copy-program - (append copy-args (list source target)))))) + (append + copy-args + (list + (shell-quote-argument source) + (shell-quote-argument target)) + (unless (memq system-type '(windows-nt)) + '(";" "echo" + "tramp_exit_status" "$?"))))))) (tramp-message orig-vec 6 "%s" (mapconcat 'identity (process-command p) " ")) (tramp-compat-set-process-query-on-exit-flag p nil) (tramp-process-actions - p v nil tramp-actions-copy-out-of-band))) + p v nil tramp-actions-copy-out-of-band) + + ;; Check the return code. This does not work under + ;; MS Windows. + (unless (memq system-type '(windows-nt)) + (goto-char (point-max)) + (unless + (re-search-backward "tramp_exit_status [0-9]+" nil t) + (tramp-error + orig-vec 'file-error + "Couldn't find exit status of `%s'" (process-command p))) + (skip-chars-forward "^ ") + (unless (zerop (read (current-buffer))) + (forward-line -1) + (tramp-error + orig-vec 'file-error + "Error copying: `%s'" + (buffer-substring (point-min) (point-at-eol))))))) ;; Reset the transfer process properties. (tramp-message orig-vec 6 "\n%s" (buffer-string)) -- 2.39.5