* net/tramp.el (tramp-do-copy-or-rename-file-directly): Make direct

copy more robust, especially when "chown" is not applicable.
This commit is contained in:
Michael Albinus 2009-06-07 16:17:03 +00:00
parent 630100ea9f
commit 917b89a691
2 changed files with 39 additions and 15 deletions

View file

@ -1,3 +1,8 @@
2009-06-07 Michael Albinus <michael.albinus@gmx.de>
* net/tramp.el (tramp-do-copy-or-rename-file-directly): Make direct
copy more robust, especially when "chown" is not applicable.
2009-06-07 Martin Rudalics <rudalics@gmx.at>
* emacs-lisp/lisp-mode.el (lisp-mode-variables): Fix doc-string.

View file

@ -3270,16 +3270,26 @@ the uid and gid from FILENAME."
(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 @@ the uid and gid from FILENAME."
'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 @@ the uid and gid from FILENAME."
;; 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.