aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/dired-aux.el
diff options
context:
space:
mode:
authorRichard M. Stallman <[email protected]>2005-05-19 15:42:01 +0000
committerRichard M. Stallman <[email protected]>2005-05-19 15:42:01 +0000
commit3b68c5062f4158dab9fb503ff352d1d342ec374b (patch)
treeb54691f9c82367ef354caabd608c13179130e1a9 /lisp/dired-aux.el
parentb4aefb19b7176c198d19f27285367486bb13271a (diff)
(dired-copy-file-recursive): Handle symlinks in recursive copy.
Diffstat (limited to 'lisp/dired-aux.el')
-rw-r--r--lisp/dired-aux.el40
1 files changed, 23 insertions, 17 deletions
diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el
index 66150968e6..eec3045b53 100644
--- a/lisp/dired-aux.el
+++ b/lisp/dired-aux.el
@@ -1135,23 +1135,29 @@ Special value `always' suppresses confirmation."
(defun dired-copy-file-recursive (from to ok-flag &optional
preserve-time top recursive)
- (if (and recursive
- (eq t (car (file-attributes from))) ; A directory, no symbolic link.
- (or (eq recursive 'always)
- (yes-or-no-p (format "Recursive copies of %s " from))))
- (let ((files (directory-files from nil dired-re-no-dot)))
- (if (eq recursive 'top) (setq recursive 'always)) ; Don't ask any more.
- (if (file-exists-p to)
- (or top (dired-handle-overwrite to))
- (make-directory to))
- (while files
- (dired-copy-file-recursive
- (expand-file-name (car files) from)
- (expand-file-name (car files) to)
- ok-flag preserve-time nil recursive)
- (setq files (cdr files))))
- (or top (dired-handle-overwrite to)) ; Just a file.
- (copy-file from to ok-flag dired-copy-preserve-time)))
+ (let ((attrs (file-attributes from)))
+ (if (and recursive
+ (eq t (car attrs))
+ (or (eq recursive 'always)
+ (yes-or-no-p (format "Recursive copies of %s " from))))
+ ;; This is a directory.
+ (let ((files (directory-files from nil dired-re-no-dot)))
+ (if (eq recursive 'top) (setq recursive 'always)) ; Don't ask any more.
+ (if (file-exists-p to)
+ (or top (dired-handle-overwrite to))
+ (make-directory to))
+ (while files
+ (dired-copy-file-recursive
+ (expand-file-name (car files) from)
+ (expand-file-name (car files) to)
+ ok-flag preserve-time nil recursive)
+ (setq files (cdr files))))
+ ;; Not a directory.
+ (or top (dired-handle-overwrite to))
+ (if (stringp (car attrs))
+ ;; It is a symlink
+ (make-symbolic-link (car attrs) to ok-flag)
+ (copy-file from to ok-flag dired-copy-preserve-time)))))
;;;###autoload
(defun dired-rename-file (file newname ok-if-already-exists)