[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#39057: 27.0.60; copy-file interactive VS from lisp disagreement

From: Tino Calancha
Subject: bug#39057: 27.0.60; copy-file interactive VS from lisp disagreement
Date: Fri, 10 Jan 2020 12:55:59 +0100 (CET)
User-agent: Alpine 2.21 (LSU 202 2017-01-01)

I cannot reproduce this, so there must be more here than meets the
So please step through the code and tell where it fails and why.

It seems NEWNAME, i.e., the second argument seeing by `copy-file' might be 
when called interactively; this is true even if the user introduces the same value.

I have printed out newname before the line
newname = expand_cp_target (file, newname);
at src/fileio.c

M-: (copy-file "/tmp/foo" "~/") RET
;; it shows "~/" as expected

M-x: copy-file RET /tmp/foo RET ~/ RET
;; it shows "~" (the '/' is missing)

Apparentely, this was unnoticed because before Emacs 26 we were using predicate
M-: (file-directory-p "~") RET
=> t

After commit 'Fix race with rename-file etc. with dir NEWNAME'
we use `directory-name-p`, and the issue is revealed.

(directory-name-p "~")
=> nil

Since you cannot reproduce the issue, it might be platform dependent.
I am able to reproduce it in this nice site, which runs Emacs 26.3 in a linux 

M-! touch /tmp/foo RET
M-x copy-file RET /tmp/foo RET RET
;; received prompt
;; FILE /home/runner already exists; copy to it anyway? (yes or no)

;; Eval following forms from the *ielm* buffer (file-exists-p "~/foo") RET
=> nil

(copy-file "/tmp/foo" "~/")
=> nil

(file-exists-p "~/foo") RET
=> t

reply via email to

[Prev in Thread] Current Thread [Next in Thread]