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

From: Christian Johansson <[email-masked]>
Date: Wed, 21 Feb 2018 17:51:37 +0100

Hi!

Great, how do I pull your changes?

I can't find them in master and I have trouble finding a branch, should 
I just apply the same changes on my local environment?

Regards
Christian

On 2018-02-21 14:31, Michael Albinus wrote:
> Christian Johansson <[email-masked]> writes:
>
> Hi Christian,
>
>> 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.
> Got it. In fact, ange-ftp has no file-regular-p implementation. I've
> added this, could you, pls, test:
>
>
>
> diff --git a/lisp/net/ange-ftp.el b/lisp/net/ange-ftp.el
> index e62bee4499..a267fc6448 100644
> --- a/lisp/net/ange-ftp.el
> +++ b/lisp/net/ange-ftp.el
> @@ -3373,6 +3373,13 @@ ange-ftp-file-symlink-p
>   	(file-error nil))
>       (ange-ftp-real-file-symlink-p file)))
>   
> +(defun ange-ftp-file-regular-p (file)
> +  ;; Reuse Tramp's implementation.
> +  (if (ange-ftp-ftp-name file)
> +      (and (file-exists-p file)
> +       (eq ?- (aref (file-attribute-modes (file-attributes file)) 0)))
> +    (ange-ftp-real-file-regular-p file)))
> +
>   (defun ange-ftp-file-exists-p (name)
>     (setq name (expand-file-name name))
>     (if (ange-ftp-ftp-name name)
> @@ -4389,6 +4396,7 @@ ange-ftp-hook-function
>   (put 'file-readable-p 'ange-ftp 'ange-ftp-file-readable-p)
>   (put 'file-executable-p 'ange-ftp 'ange-ftp-file-executable-p)
>   (put 'file-symlink-p 'ange-ftp 'ange-ftp-file-symlink-p)
> +(put 'file-regular-p 'ange-ftp 'ange-ftp-file-regular-p)
>   (put 'delete-file 'ange-ftp 'ange-ftp-delete-file)
>   (put 'verify-visited-file-modtime 'ange-ftp
>        'ange-ftp-verify-visited-file-modtime)
> @@ -4477,6 +4485,8 @@ ange-ftp-real-file-executable-p
>     (ange-ftp-run-real-handler 'file-executable-p args))
>   (defun ange-ftp-real-file-symlink-p (&rest args)
>     (ange-ftp-run-real-handler 'file-symlink-p args))
> +(defun ange-ftp-real-file-regular-p (&rest args)
> +  (ange-ftp-run-real-handler 'file-regular-p args))
>   (defun ange-ftp-real-delete-file (&rest args)
>     (ange-ftp-run-real-handler 'delete-file args))
>   (defun ange-ftp-real-verify-visited-file-modtime (&rest args)
>
>
> Best regards, Michael.