Mercurial > emacs
changeset 103333:01d7b6369496
* net/tramp.el (tramp-do-copy-or-rename-file-directly): Make direct
copy more robust, especially when "chown" is not applicable.
author | Michael Albinus <michael.albinus@gmx.de> |
---|---|
date | Sun, 07 Jun 2009 16:16:05 +0000 |
parents | 0b2973597cd5 |
children | f97d17e432eb |
files | lisp/net/tramp.el |
diffstat | 1 files changed, 34 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/net/tramp.el Sun Jun 07 07:35:55 2009 +0000 +++ b/lisp/net/tramp.el Sun Jun 07 16:16:05 2009 +0000 @@ -3270,16 +3270,26 @@ (t ;; Create the temporary file. (let ((tmpfile (tramp-compat-make-temp-file localname1))) - (condition-case err + (unwind-protect (progn (cond (t1 - (tramp-send-command - v (format - "%s %s %s" cmd - (tramp-shell-quote-argument localname1) - (tramp-shell-quote-argument tmpfile))) + (or + (zerop + (tramp-send-command-and-check + v (format + "%s %s %s" cmd + (tramp-shell-quote-argument localname1) + (tramp-shell-quote-argument tmpfile)))) + (tramp-error-with-buffer + nil v 'file-error + "Copying directly failed, see buffer `%s' for details." + (tramp-get-buffer v))) ;; We must change the ownership as remote user. + ;; Since this does not work reliable, we also + ;; give read permissions. + (set-file-modes + (concat prefix tmpfile) (tramp-octal-to-decimal "0777")) (tramp-set-file-uid-gid (concat prefix tmpfile) (tramp-get-local-uid 'integer) @@ -3293,6 +3303,9 @@ 'rename-file (list localname1 tmpfile t))) ;; We must change the ownership as local user. + ;; Since this does not work reliable, we also + ;; give read permissions. + (set-file-modes tmpfile (tramp-octal-to-decimal "0777")) (tramp-set-file-uid-gid tmpfile (tramp-get-remote-uid v 'integer) @@ -3301,20 +3314,26 @@ ;; Move the temporary file to its destination. (cond (t2 - (tramp-send-command - v (format - "mv -f %s %s" - (tramp-shell-quote-argument tmpfile) - (tramp-shell-quote-argument localname2)))) + (or + (zerop + (tramp-send-command-and-check + v (format + "cp -f -p %s %s" + (tramp-shell-quote-argument tmpfile) + (tramp-shell-quote-argument localname2)))) + (tramp-error-with-buffer + nil v 'file-error + "Copying directly failed, see buffer `%s' for details." + (tramp-get-buffer v)))) (t1 (tramp-run-real-handler 'rename-file (list tmpfile localname2 ok-if-already-exists))))) - ;; Error handling. - ((error quit) - (delete-file tmpfile) - (signal (car err) (cdr err)))))))))) + ;; Save exit. + (condition-case nil + (delete-file tmpfile) + (error))))))))) ;; Set the time and mode. Mask possible errors. ;; Won't be applied for 'rename.