# HG changeset patch # User Thierry Volpiatto # Date 1333042420 -7200 # Node ID c2de4670a69cefd92095caca612f8b1e4fd0c217 # Parent 0c4996976cc3ded487b93f71a27641a48c127767 * lisp/files.el (copy-directory): Check if file is a directory but a symlink. diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el --- a/lisp/dired-aux.el +++ b/lisp/dired-aux.el @@ -1264,7 +1264,8 @@ (defun dired-copy-file-recursive (from to ok-flag &optional preserve-time top recursive) - (when (file-subdir-of-p to from) + (when (and (eq t (car (file-attributes from))) + (file-subdir-of-p to from)) (error "Cannot copy `%s' into its subdirectory `%s'" from to)) (let ((attrs (file-attributes from))) (if (and recursive @@ -1452,10 +1453,14 @@ (eq file-creator 'dired-copy-file)) (setq to destname)) ;; If DESTNAME and FROM are the same directory or - ;; If DESTNAME is a subdirectory of FROM, return error. - (and (file-subdir-of-p destname from) - (error "Cannot copy `%s' into its subdirectory `%s'" - from to))) + ;; If DESTNAME is a subdirectory of FROM, not a symlink, + ;; and the method in use is copying return error. + (when (and (eq t ; A dir but not a symlink. + (car (file-attributes destname))) + (eq file-creator 'dired-copy-file) + (file-subdir-of-p destname from)) + (error "Here:Cannot copy `%s' into its subdirectory `%s'" + from to))) (condition-case err (progn (funcall file-creator from to dired-overwrite-confirmed) diff --git a/lisp/files.el b/lisp/files.el --- a/lisp/files.el +++ b/lisp/files.el @@ -5102,10 +5102,10 @@ ;; We do not want to copy "." and "..". (directory-files directory 'full directory-files-no-dot-files-regexp)) - (if (file-directory-p file) - (copy-directory file newname keep-time parents) - (let ((target (expand-file-name (file-name-nondirectory file) newname)) - (attrs (file-attributes file))) + (let ((target (expand-file-name (file-name-nondirectory file) newname)) + (attrs (file-attributes file))) + (if (eq t (car attrs)) ; A directory but not a symlink. + (copy-directory file newname keep-time parents) (if (stringp (car attrs)) ; Symbolic link (make-symbolic-link (car attrs) target t) (copy-file file target t keep-time)))))