Mercurial > emacs
changeset 107320:d2bfe26756ed
* net/tramp.el (tramp-do-copy-or-rename-file-out-of-band): Fix an
error when FILENAME and NEWNAME are existing remote directories.
* net/tramp-compat.el (tramp-compat-make-temp-file): Add optional
parameter DIR-FLAG.
author | Michael Albinus <michael.albinus@gmx.de> |
---|---|
date | Tue, 02 Mar 2010 10:32:45 +0100 |
parents | 7a74731f53f0 |
children | 9b814b3ee348 |
files | lisp/ChangeLog lisp/net/tramp-compat.el lisp/net/tramp.el |
diffstat | 3 files changed, 31 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Tue Mar 02 13:55:33 2010 +0900 +++ b/lisp/ChangeLog Tue Mar 02 10:32:45 2010 +0100 @@ -1,3 +1,11 @@ +2010-03-02 Michael Albinus <michael.albinus@gmx.de> + + * net/tramp.el (tramp-do-copy-or-rename-file-out-of-band): Fix an + error when FILENAME and NEWNAME are existing remote directories. + + * net/tramp-compat.el (tramp-compat-make-temp-file): Add optional + parameter DIR-FLAG. + 2010-03-02 Glenn Morris <rgm@gnu.org> * calendar/cal-hebrew.el (holiday-hebrew-passover): Fix date
--- a/lisp/net/tramp-compat.el Tue Mar 02 13:55:33 2010 +0900 +++ b/lisp/net/tramp-compat.el Tue Mar 02 10:32:45 2010 +0100 @@ -215,7 +215,7 @@ ;; has been introduced with Emacs 22. We try it, if it fails, we fall ;; back to `make-temp-name', creating the temporary file immediately ;; in order to avoid a security hole. -(defsubst tramp-compat-make-temp-file (filename) +(defsubst tramp-compat-make-temp-file (filename &optional dir-flag) "Create a temporary file (compat function). Add the extension of FILENAME, if existing." (let* (file-name-handler-alist @@ -226,21 +226,24 @@ result) (condition-case nil (setq result - (funcall (symbol-function 'make-temp-file) prefix nil extension)) + (funcall + (symbol-function 'make-temp-file) prefix dir-flag extension)) (error ;; We use our own implementation, taken from files.el. (while (condition-case () (progn (setq result (concat (make-temp-name prefix) extension)) - (write-region - "" nil result nil 'silent nil - ;; 7th parameter is MUSTBENEW in Emacs, and - ;; CODING-SYSTEM in XEmacs. It is not a security - ;; hole in XEmacs if we cannot use this parameter, - ;; because XEmacs uses a user-specific subdirectory - ;; with 0700 permissions. - (when (not (featurep 'xemacs)) 'excl)) + (if dir-flag + (make-directory result) + (write-region + "" nil result nil 'silent nil + ;; 7th parameter is MUSTBENEW in Emacs, and + ;; CODING-SYSTEM in XEmacs. It is not a security + ;; hole in XEmacs if we cannot use this parameter, + ;; because XEmacs uses a user-specific + ;; subdirectory with 0700 permissions. + (when (not (featurep 'xemacs)) 'excl))) nil) (file-already-exists t)) ;; The file was somehow created by someone else between
--- a/lisp/net/tramp.el Tue Mar 02 13:55:33 2010 +0900 +++ b/lisp/net/tramp.el Tue Mar 02 10:32:45 2010 +0100 @@ -3798,13 +3798,12 @@ ;; Both are Tramp files. We shall optimize it, when the ;; methods for filename and newname are the same. - (let ((tmpfile - (if (file-regular-p filename) - (tramp-compat-make-temp-file localname) - (make-temp-name - (expand-file-name - tramp-temp-name-prefix - (tramp-compat-temporary-file-directory)))))) + (let* ((dir-flag (file-directory-p filename)) + (tmpfile (tramp-compat-make-temp-file localname dir-flag))) + (if dir-flag + (setq tmpfile + (expand-file-name + (file-name-nondirectory newname) tmpfile))) (unwind-protect (progn (tramp-do-copy-or-rename-file-out-of-band @@ -3813,9 +3812,10 @@ 'rename tmpfile newname keep-date)) ;; Save exit. (condition-case nil - (if (file-regular-p tmpfile) - (delete-file tmpfile) - (delete-directory tmpfile 'recursive)) + (if dir-flag + (delete-directory + (expand-file-name ".." tmpfile) 'recursive) + (delete-file tmpfile)) (error)))) ;; Expand hops. Might be necessary for gateway methods.