Subject: Re: bug#30533: 26.0.60; (copy-file) over TRAMP FTP mistakes file for directory

From: Christian Johansson <[email-masked]>
Date: Wed, 21 Feb 2018 07:13:21 +0100

Here are two cases that display different tramp errors related to 
copy-file, but only if you don't open the remote path using dired-mode 
first.

;; Case 1
(let ((remote-path "/ftp:[email-masked]:/1KB.zip")
       (local-path "~/Downloads/1KB.zip"))
   (if (file-directory-p remote-path)
       (progn
         (message "File %s is a directory" remote-path)
         (copy-directory remote-path local-path t t t))
     (progn
       (message "File %s is not a directory" remote-path)
       (copy-file remote-path local-path t t t t))))

;; Case 2
(let ((remote-path "/ftp:[email-masked]:/1KB.zip")
       (local-path "~/Downloads/1KB.zip"))
   (if (file-regular-p remote-path)
       (progn
         (message "File %s is a regular file" remote-path)
         (copy-file remote-path local-path t t t t))
     (progn
       (message "File %s is not a regular file" remote-path)
       (copy-directory remote-path local-path t t t))))

If I first open the path in dired mode 
(/ftp:[email-masked]) then the operations work as 
expected. It seems that tramp stores information about remote 
file-system when accessing it in dired-mode.

Even after restarting the problem seems to be gone when the remote path 
has been opened once in dired-mode. Is there some cache to this?

On 2018-02-20 16:49, Christian Johansson wrote:
> (let ((remote-path "/ftp:[email-masked]:/1KB.zip")
>       (local-path "~/Downloads/1KB.zip"))
>   (if (file-regular-p remote-path)
>       (progn
>     (message "File %s is a regular file" remote-path)
>     (copy-file remote-path local-path t t t t))
>     (progn
>       (message "File %s is a directory" remote-path)
>       (copy-directory remote-path local-path t t t))))