X-Git-Url: https://code.delx.au/gnu-emacs-elpa/blobdiff_plain/c9ddbbcb7e1f723774bd4445a45625837896bf0f..2bfd6a0741cecfaacc83d69fb3e292c5f2053c53:/dired-async.el diff --git a/dired-async.el b/dired-async.el index 461e1ddb0..41f2b7955 100644 --- a/dired-async.el +++ b/dired-async.el @@ -255,19 +255,31 @@ ESC or `q' to not overwrite any of the remaining files, (require 'cl-lib) (require 'dired-aux) (require 'dired-x) ,(async-inject-variables dired-async-env-variables-regexp) (condition-case err - (let ((dired-recursive-copies (quote always))) + (let ((dired-recursive-copies (quote always)) + (dired-copy-preserve-time + ,dired-copy-preserve-time)) + ;; Inline `backup-file' as long as it is not + ;; available in emacs. (defalias 'backup-file ;; Same feature as "cp --backup=numbered from to" + ;; Symlinks are copied as file from source unlike + ;; `dired-copy-file' which is same as cp -d. + ;; Directories are omitted. (lambda (from to ok) - (when (null (nth 0 (file-attributes from))) - (let ((count 0)) - (while (let ((attrs (file-attributes to))) - (and attrs - (null (nth 0 (file-attributes to))))) - (cl-incf count) - (setq to (concat (file-name-sans-versions to) - (format ".~%s~" count))))) - (copy-file from to ok dired-copy-preserve-time)))) + (cond ((file-directory-p from) (ignore)) + (t (let ((count 0)) + (while (let ((attrs (file-attributes to))) + (and attrs (null (nth 0 attrs)))) + (cl-incf count) + (setq to (concat (file-name-sans-versions to) + (format ".~%s~" count))))) + (condition-case err + (copy-file from to ok dired-copy-preserve-time) + (file-date-error + (push (dired-make-relative from) + dired-create-files-failures) + (dired-log "Can't set date on %s:\n%s\n" from err))))))) + ;; Now run the FILE-CREATOR function on files. (cl-loop with fn = (quote ,file-creator) for (from . dest) in (quote ,async-fn-list) do (funcall fn from dest t)))