]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix Bug#31941
authorMichael Albinus <michael.albinus@gmx.de>
Sun, 24 Jun 2018 08:24:26 +0000 (10:24 +0200)
committerMichael Albinus <michael.albinus@gmx.de>
Sun, 24 Jun 2018 08:24:26 +0000 (10:24 +0200)
* lisp/net/tramp-sh.el (tramp-do-copy-or-rename-file): In case of
FILENAME being a directory, check whether `copy-directory' could
be avoided.  Suggested by Stephen Nutt <stnutt@gmail.com>.  (Bug#31941)
(tramp-do-copy-or-rename-file-directly): Call "cp" with "-r".

lisp/net/tramp-sh.el

index 02fb8648d809dd88b209fb8aa85568e06ee05e3f..3e99ab567f0522f517343b9d9d5cc7e6c39fb348 100644 (file)
@@ -2038,7 +2038,9 @@ file names."
   (unless (memq op '(copy rename))
     (error "Unknown operation `%s', must be `copy' or `rename'" op))
 
-  (if (file-directory-p filename)
+  (if (and
+       (file-directory-p filename)
+       (not (tramp-equal-remote filename newname)))
       (progn
        (copy-directory filename newname keep-date t)
        (when (eq op 'rename) (delete-directory filename 'recursive)))
@@ -2187,8 +2189,8 @@ the uid and gid from FILENAME."
                     (file-attributes filename)))
        (file-modes (tramp-default-file-modes filename)))
     (with-parsed-tramp-file-name (if t1 filename newname) nil
-      (let* ((cmd (cond ((and (eq op 'copy) preserve-uid-gid) "cp -f -p")
-                       ((eq op 'copy) "cp -f")
+      (let* ((cmd (cond ((and (eq op 'copy) preserve-uid-gid) "cp -f -r -p")
+                       ((eq op 'copy) "cp -f -r")
                        ((eq op 'rename) "mv -f")
                        (t (tramp-error
                            v 'file-error