Subject: bug#20662: 25.0.50; Remote copy through Dired fails

From: Manuel Uberti <[email-masked]>
Date: Thu, 28 May 2015 14:39:00 +0200

On 28/05/15 12:12, Michael Albinus wrote:
> Manuel Uberti <[email-masked]> writes:
> 
> Hi Manuel,
> 
>> I already tried leaving out everything after line 92. To be more
>> precise, first I tried living out only my Dired-related settings, then
>> everything in my ~/.emacs.d/lisp directory. The error still happens.
> 
> And it doesn't happen to. So it seems to depend on the file/directory
> you intend to copy.
> 
>> I will try toggle debug-on-error on, but I am pretty sure I already
>> tried that way and there was no stacktrace for that error. That is why I
>> debugged line-by-line and narrowed the problem down to the line I
>> mentioned in my first message.
> 
> You have said
> 
> | After some debugging, I nailed down the issue to this line of
> | dired-copy-file-recursive:
> |
> | (copy-file from to ok-flag preserve-time)
> 
> That is not sufficient information; I don't know how
> dired-copy-file-recursive was called, and I don't know the values of the
> arguments.
> 
> I guess you have used edebug for debugging. When you have reached the
> point you've mentioned, please press 'd'. This produces a backtrace.
> 
>> Manuel Uberti
> 
> Best regards, Michael.
> 

Thanks for your patience.
I turn debug-on-error on, and press 'd' as you suggested, right before
(copy-file from to ok-flag preserve-time) throws an error.

This is the stacktrace:

  (copy-file (edebug-after 0 68 from) (edebug-after 0 69 to)
(edebug-after 0 70 ok-flag) (edebug-after 0 71 preserve-time))
  (if (edebug-after (edebug-before 55) 59 (stringp (edebug-after
(edebug-before 56) 58 (car (edebug-after 0 57 attrs))))) (edebug-after
(edebug-before 60) 66 (make-symbolic-link (edebug-after (edebug-before
61) 63 (car (edebug-after 0 62 attrs))) (edebug-after 0 64 to)
(edebug-after 0 65 ok-flag))) (edebug-after (edebug-before 67) 72
(copy-file (edebug-after 0 68 from) (edebug-after 0 69 to) (edebug-after
0 70 ok-flag) (edebug-after 0 71 preserve-time))))
  (condition-case err (edebug-after (edebug-before 54) 73 (if
(edebug-after (edebug-before 55) 59 (stringp (edebug-after
(edebug-before 56) 58 (car (edebug-after 0 57 attrs))))) (edebug-after
(edebug-before 60) 66 (make-symbolic-link (edebug-after (edebug-before
61) 63 (car (edebug-after 0 62 attrs))) (edebug-after 0 64 to)
(edebug-after 0 65 ok-flag))) (edebug-after (edebug-before 67) 72
(copy-file (edebug-after 0 68 from) (edebug-after 0 69 to) (edebug-after
0 70 ok-flag) (edebug-after 0 71 preserve-time))))) (file-date-error
(edebug-after (edebug-before 74) 79 (let* ((v (edebug-after
(edebug-before 75) 77 (dired-make-relative ...)))) (setq
dired-create-files-failures (cons v (edebug-after 0 78
dired-create-files-failures))))) (edebug-after (edebug-before 80) 83
(dired-log "Can't set date on %s:\n%s\n" (edebug-after 0 81 from)
(edebug-after 0 82 err)))))
  (if (edebug-after (edebug-before 24) 41 (and (edebug-after 0 25
recursive) (edebug-after (edebug-before 26) 30 (eq t (edebug-after
(edebug-before 27) 29 (car (edebug-after 0 28 attrs))))) (edebug-after
(edebug-before 31) 40 (or (edebug-after (edebug-before 32) 34 (eq
(edebug-after 0 33 recursive) (quote always))) (edebug-after
(edebug-before 35) 39 (yes-or-no-p (edebug-after ... 38 ...)))))))
(edebug-after (edebug-before 42) 46 (copy-directory (edebug-after 0 43
from) (edebug-after 0 44 to) (edebug-after 0 45 preserve-time)))
(edebug-after (edebug-before 47) 52 (or (edebug-after 0 48 top)
(edebug-after (edebug-before 49) 51 (dired-handle-overwrite
(edebug-after 0 50 to))))) (edebug-after (edebug-before 53) 84
(condition-case err (edebug-after (edebug-before 54) 73 (if
(edebug-after (edebug-before 55) 59 (stringp (edebug-after ... 58 ...)))
(edebug-after (edebug-before 60) 66 (make-symbolic-link (edebug-after
... 63 ...) (edebug-after 0 64 to) (edebug-after 0 65 ok-flag)))
(edebug-after (edebug-before 67) 72 (copy-file (edebug-after 0 68 from)
(edebug-after 0 69 to) (edebug-after 0 70 ok-flag) (edebug-after 0 71
preserve-time))))) (file-date-error (edebug-after (edebug-before 74) 79
(let* ((v ...)) (setq dired-create-files-failures (cons v ...))))
(edebug-after (edebug-before 80) 83 (dired-log "Can't set date on
%s:\n%s\n" (edebug-after 0 81 from) (edebug-after 0 82 err)))))))
  (let ((attrs (edebug-after (edebug-before 20) 22 (file-attributes
(edebug-after 0 21 from))))) (edebug-after (edebug-before 23) 85 (if
(edebug-after (edebug-before 24) 41 (and (edebug-after 0 25 recursive)
(edebug-after (edebug-before 26) 30 (eq t (edebug-after ... 29 ...)))
(edebug-after (edebug-before 31) 40 (or (edebug-after ... 34 ...)
(edebug-after ... 39 ...))))) (edebug-after (edebug-before 42) 46
(copy-directory (edebug-after 0 43 from) (edebug-after 0 44 to)
(edebug-after 0 45 preserve-time))) (edebug-after (edebug-before 47) 52
(or (edebug-after 0 48 top) (edebug-after (edebug-before 49) 51
(dired-handle-overwrite (edebug-after 0 50 to))))) (edebug-after
(edebug-before 53) 84 (condition-case err (edebug-after (edebug-before
54) 73 (if (edebug-after ... 59 ...) (edebug-after ... 66 ...)
(edebug-after ... 72 ...))) (file-date-error (edebug-after
(edebug-before 74) 79 (let* ... ...)) (edebug-after (edebug-before 80)
83 (dired-log "Can't set date on %s:\n%s\n" ... ...))))))))

dired-copy-file-recursive("/ssh:[email-masked]#2130:/home/admin/boccaperta/contabilita/fattureods/078_crowdknitting.ods"
"/home/manuel/documents/boccaperta/contabilita/boccaperta/reddito2015/fattureods/078_crowdknitting.ods"
nil t t always)

dired-copy-file("/ssh:[email-masked]#2130:/home/admin/boccaperta/contabilita/fattureods/078_crowdknitting.ods"
"/home/manuel/documents/boccaperta/contabilita/boccaperta/reddito2015/fattureods/078_crowdknitting.ods"
nil)
  dired-create-files(dired-copy-file "Copy"
("/ssh:[email-masked]#2130:/home/admin/boccaperta/contabilita/fattureods/078_crowdknitting.ods")
(lambda (_from) (edebug-enter (quote edebug-anon97303) (list _from)
(function (lambda nil (edebug-after 0 0 target))))) 67)
  (if (edebug-after (edebug-before 116) 125 (and (edebug-after
(edebug-before 117) 119 (consp (edebug-after 0 118 into-dir)))
(edebug-after (edebug-before 120) 124 (functionp (edebug-after
(edebug-before 121) 123 (car (edebug-after 0 122 into-dir)))))))
(edebug-after (edebug-before 126) 137 (apply (edebug-after
(edebug-before 127) 129 (car (edebug-after 0 128 into-dir)))
(edebug-after 0 130 operation) (edebug-after 0 131 rfn-list)
(edebug-after 0 132 fn-list) (edebug-after 0 133 target) (edebug-after
(edebug-before 134) 136 (cdr (edebug-after 0 135 into-dir)))))
(edebug-after (edebug-before 138) 149 (if (edebug-after (edebug-before
139) 144 (not (edebug-after (edebug-before 140) 143 (or (edebug-after 0
141 dired-one-file) (edebug-after 0 142 into-dir))))) (edebug-after
(edebug-before 145) 148 (error "Marked %s: target must be a directory:
%s" (edebug-after 0 146 operation) (edebug-after 0 147 target)))))
(edebug-after (edebug-before 150) 157 (or (edebug-after 0 151 into-dir)
(edebug-after (edebug-before 152) 156 (setq target (edebug-after
(edebug-before 153) 155 (directory-file-name (edebug-after 0 154
target))))))) (edebug-after (edebug-before 158) 170 (dired-create-files
(edebug-after 0 159 file-creator) (edebug-after 0 160 operation)
(edebug-after 0 161 fn-list) (edebug-after (edebug-before 162) 168 (if
(edebug-after 0 163 into-dir) (edebug-after (edebug-before 164) 165
(function (lambda ... ...))) (edebug-after (edebug-before 166) 167
(function (lambda ... ...))))) (edebug-after 0 169 marker-char))))
  (let* ((fn-list (edebug-after (edebug-before 7) 9
(dired-get-marked-files nil (edebug-after 0 8 arg)))) (rfn-list
(edebug-after (edebug-before 10) 14 (mapcar (edebug-after (edebug-before
11) 12 (function dired-make-relative)) (edebug-after 0 13 fn-list))))
(dired-one-file (edebug-after (edebug-before 15) 27 (and (edebug-after
(edebug-before 16) 18 (consp (edebug-after 0 17 fn-list))) (edebug-after
(edebug-before 19) 23 (null (edebug-after ... 22 ...))) (edebug-after
(edebug-before 24) 26 (car (edebug-after 0 25 fn-list)))))) (target-dir
(edebug-after (edebug-before 28) 29 (dired-dwim-target-directory)))
(default (edebug-after (edebug-before 30) 40 (and (edebug-after 0 31
dired-one-file) (edebug-after (edebug-before 32) 39 (expand-file-name
(edebug-after ... 37 ...) (edebug-after 0 38 target-dir)))))) (defaults
(edebug-after (edebug-before 41) 44 (dired-dwim-target-defaults
(edebug-after 0 42 fn-list) (edebug-after 0 43 target-dir)))) (target
(edebug-after (edebug-before 45) 62 (expand-file-name (edebug-after
(edebug-before 46) 61 (let (... setup-hook) (setq setup-hook ...)
(unwind-protect ... ...)))))) (into-dir (edebug-after (edebug-before 63)
114 (cond ((edebug-after (edebug-before 64) 66 (null ...)) (edebug-after
(edebug-before 67) 106 (if ... nil ...))) ((edebug-after (edebug-before
107) 109 (eq ... t)) nil) (t (edebug-after (edebug-before 110) 113
(funcall ... ...))))))) (edebug-after (edebug-before 115) 171 (if
(edebug-after (edebug-before 116) 125 (and (edebug-after (edebug-before
117) 119 (consp (edebug-after 0 118 into-dir))) (edebug-after
(edebug-before 120) 124 (functionp (edebug-after ... 123 ...)))))
(edebug-after (edebug-before 126) 137 (apply (edebug-after
(edebug-before 127) 129 (car (edebug-after 0 128 into-dir)))
(edebug-after 0 130 operation) (edebug-after 0 131 rfn-list)
(edebug-after 0 132 fn-list) (edebug-after 0 133 target) (edebug-after
(edebug-before 134) 136 (cdr (edebug-after 0 135 into-dir)))))
(edebug-after (edebug-before 138) 149 (if (edebug-after (edebug-before
139) 144 (not (edebug-after ... 143 ...))) (edebug-after (edebug-before
145) 148 (error "Marked %s: target must be a directory: %s"
(edebug-after 0 146 operation) (edebug-after 0 147 target)))))
(edebug-after (edebug-before 150) 157 (or (edebug-after 0 151 into-dir)
(edebug-after (edebug-before 152) 156 (setq target (edebug-after ... 155
...))))) (edebug-after (edebug-before 158) 170 (dired-create-files
(edebug-after 0 159 file-creator) (edebug-after 0 160 operation)
(edebug-after 0 161 fn-list) (edebug-after (edebug-before 162) 168 (if
(edebug-after 0 163 into-dir) (edebug-after ... 165 ...) (edebug-after
... 167 ...))) (edebug-after 0 169 marker-char))))))
  dired-do-create-files(copy dired-copy-file "Copy" nil 67 nil nil)
  (let ((dired-recursive-copies (edebug-after 0 1
dired-recursive-copies))) (edebug-after (edebug-before 2) 8
(dired-do-create-files (quote copy) (edebug-after (edebug-before 3) 4
(function dired-copy-file)) "Copy" (edebug-after 0 5 arg) (edebug-after
0 6 dired-keep-marker-copy) nil (edebug-after 0 7 dired-copy-how-to-fn))))
  dired-do-copy(nil)
  funcall-interactively(dired-do-copy nil)
  call-interactively(dired-do-copy nil nil)
  command-execute(dired-do-copy)

Hope it can be of any help. If you need to do some other tests/debug,
please ask.

Regards,
Manuel