]> git.eshelyaron.com Git - emacs.git/commitdiff
* net/tramp.el (tramp-do-copy-or-rename-file-out-of-band): Fix an
authorMichael Albinus <michael.albinus@gmx.de>
Tue, 2 Mar 2010 09:32:45 +0000 (10:32 +0100)
committerMichael Albinus <michael.albinus@gmx.de>
Tue, 2 Mar 2010 09:32:45 +0000 (10:32 +0100)
error when FILENAME and NEWNAME are existing remote directories.

* net/tramp-compat.el (tramp-compat-make-temp-file): Add optional
parameter DIR-FLAG.

lisp/ChangeLog
lisp/net/tramp-compat.el
lisp/net/tramp.el

index ca850a4db591a78f1b887ac370036a6bd52af5d9..7beebd130b11a1fc08854558328d21afa06ad3d5 100644 (file)
@@ -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
index 4f930d58cdc3f238f4574bddfc6550d300c994e2..9bcbe21116dc8a515cfa09798e4e9d2f48ca5e89 100644 (file)
@@ -215,7 +215,7 @@ this is the function `temp-directory'."
 ;; 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 @@ Add the extension of FILENAME, if existing."
         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
index 0957c78eddf0b590c6ece7ddb72682ae4a17d17c..c029f073724162f713bada160d8311a54d276303 100644 (file)
@@ -3798,13 +3798,12 @@ The method used must be an out-of-band method."
 
          ;; 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 @@ The method used must be an out-of-band method."
                   '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.