From: Thierry Volpiatto <thierry.volpiatto@gmail.com>
To: Michael Albinus <michael.albinus@gmx.de>
Cc: 10489@debbugs.gnu.org
Subject: bug#10489: 24.0.92; dired-do-copy may create infinite directory hierarchy
Date: Sun, 15 Jan 2012 20:09:06 +0100 [thread overview]
Message-ID: <8762gckckt.fsf@gmail.com> (raw)
In-Reply-To: <87ty3w9639.fsf@gmx.de> (Michael Albinus's message of "Sun, 15 Jan 2012 19:24:42 +0100")
Michael Albinus <michael.albinus@gmx.de> writes:
> Thierry Volpiatto <thierry.volpiatto@gmail.com> writes:
>
>> Thierry Volpiatto <thierry.volpiatto@gmail.com> writes:
>>
>>> Many examples given here, so if everybody is ok with The function given
>>> by Drew, we could commit the attached patch to fix this bug:
>> Note also that the bug is still here with this code
>> when copying on same system "/sudo::/foo" to "/foo"
>
> One could also add it to Tramp for Emacs 24.1. But this sounds like a
> new feature to me, and I would like to postpone it to Emacs 24.2. There
> must be robust testing, if we start to handle such use cases.
IMHO we should fix this bug for most use cases with a compare function
maybe not perfect in many points but ok for most basic usages.
The function shown by Drew and I put in last patch as you said isn't
sufficient and fail in many cases even on local filesystem:
(defun bmkp-same-file-p (file1 file2)
"Return non-nil if FILE1 and FILE2 name the same file.
If either name is not absolute, then it is expanded relative to
`default-directory' for the test."
(and (equal (file-remote-p file1) (file-remote-p file2))
(string= (file-truename (expand-file-name file1))
(file-truename (expand-file-name file2)))))
(bmkp-same-file-p "~/Test" "/home/thierry/Test/") => nil
That would be for Emacs24.1, and we could work on the real thing in
tramp for 24.2
Here is my last work on this based on precedent example i sent and your
last advices; it doesn't cover many use cases as you point before, test
user, method etc... but works for all the use cases below:
#+BEGIN_SRC emacs-lisp
(defun file-equal-p (name1 name2)
(if (or (file-remote-p name1)
(file-remote-p name2))
(let* ((n1 (file-name-as-directory
(expand-file-name name1)))
(n2 (file-name-as-directory
(expand-file-name name2)))
(rhost1 (file-remote-p n1 'host))
(rhost2 (file-remote-p n2 'host))
(lname1 (file-remote-p n1 'localname))
(lname2 (file-remote-p n2 'localname))
rem-n1 rem-n2)
(cond ((and rhost1 (not rhost2))
(setq rem-n1 (list (cons rhost1 (file-truename lname1))))
(setq rem-n2 (list (cons (system-name) (file-truename n2)))))
((and (not rhost1) rhost2)
(setq rem-n1 (list (cons (system-name) (file-truename n1))))
(setq rem-n2 (list (cons rhost2 (file-truename lname2)))))
((and rhost1 rhost2)
(setq rem-n1 (list (cons rhost1 (file-truename lname1))))
(setq rem-n2 (list (cons rhost2 (file-truename lname2))))))
(loop for (x1 . y1) in rem-n1
for (x2 . y2) in rem-n2
always (and (equal x1 x2)
(equal y1 y2))))
(string= (file-name-as-directory
(file-truename (expand-file-name name1)))
(file-name-as-directory
(file-truename (expand-file-name name2))))))
#+END_SRC
--8<---------------cut here---------------start------------->8---
(dont-compile
(when (fboundp 'expectations)
(expectations
(desc "Local file name comparison: Symlink<=>truefile")
(expect t
(file-equal-p "~/.emacs.el" "~/.emacs.d/emacs-config-laptop/.emacs.el"))
(desc "Local file name comparison")
(expect t
(file-equal-p "/home/thierry/Test" "~/Test"))
(expect t
(file-equal-p "/home/thierry/Test" "~/Test/"))
(expect nil
(file-equal-p "/home/thierry/Test" "/home/thierry/tmp/Test"))
(expect t
(file-equal-p "./save-scratch.el" "~/labo/tmp/save-scratch.el"))
(expect nil
(file-equal-p "/home/thierry/tmp" "/tmp"))
(expect nil
(file-equal-p "/home/thierry/test" "/home/thierry/Test"))
(desc "Sudo file against local")
(expect nil
(file-equal-p "/sudo::/home/thierry/Test" "/sudo::~/Test"))
(expect t
(file-equal-p "/sudo::/home/thierry/Test" "~/Test"))
(desc "Remote file name comparison with different methods")
(expect t
(file-equal-p "/ssh:thievol:/home/thierry/Test" "/scpc:thievol:/home/thierry/Test"))
(desc "Remote file name with localfile")
(expect nil
(file-equal-p "/ssh:thievol:/home/thierry/Test" "/home/thierry/Test"))
(desc "Remote file name comparison with same methods same files")
(expect t
(file-equal-p "/scpc:thievol:/home/thierry/Test" "/scpc:thievol:/home/thierry/Test")))))
--8<---------------cut here---------------end--------------->8---
22 expectations, 0 failures, 0 errors
Expectations finished at Sun Jan 15 20:04:10 2012
--
Thierry
Get my Gnupg key:
gpg --keyserver pgp.mit.edu --recv-keys 59F29997
next prev parent reply other threads:[~2012-01-15 19:09 UTC|newest]
Thread overview: 174+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-01-12 19:35 bug#10489: 24.0.92; dired-do-copy may create infinite directory hierarchy Michael Heerdegen
2012-01-12 21:33 ` Thierry Volpiatto
2012-01-13 7:23 ` Eli Zaretskii
2012-01-13 8:38 ` Thierry Volpiatto
2012-01-13 10:31 ` Eli Zaretskii
2012-01-13 11:19 ` Thierry Volpiatto
2012-01-13 12:01 ` Juanma Barranquero
2012-01-13 12:41 ` Eli Zaretskii
2012-01-13 13:01 ` Michael Albinus
2012-01-13 13:11 ` Juanma Barranquero
2012-01-13 13:13 ` Juanma Barranquero
2012-01-13 13:18 ` Juanma Barranquero
2012-01-13 13:32 ` Michael Albinus
2012-01-13 13:27 ` Stefan Monnier
2012-01-13 14:06 ` Thierry Volpiatto
2012-01-13 14:44 ` Michael Albinus
2012-01-13 15:13 ` Stefan Monnier
2012-01-13 15:17 ` Juanma Barranquero
2012-01-13 15:29 ` Michael Albinus
2012-01-13 16:59 ` Drew Adams
2012-01-13 9:38 ` Thierry Volpiatto
2012-01-13 9:49 ` Michael Albinus
2012-01-13 11:00 ` Thierry Volpiatto
2012-01-13 12:48 ` Michael Albinus
2012-01-13 13:55 ` Thierry Volpiatto
2012-01-13 14:14 ` Drew Adams
2012-01-13 15:06 ` Juanma Barranquero
2012-01-13 15:14 ` Michael Albinus
2012-01-13 18:43 ` Thierry Volpiatto
2012-01-13 18:57 ` Drew Adams
2012-01-13 19:11 ` Thierry Volpiatto
2012-01-13 19:21 ` Drew Adams
2012-01-13 19:35 ` Michael Albinus
2012-01-13 20:56 ` Drew Adams
2012-01-13 18:59 ` Thierry Volpiatto
2012-01-13 19:04 ` Michael Albinus
2012-01-13 19:17 ` Thierry Volpiatto
2012-01-14 8:00 ` Eli Zaretskii
2012-01-14 10:25 ` Thierry Volpiatto
2012-01-15 12:50 ` Michael Albinus
2012-01-15 17:20 ` Thierry Volpiatto
2012-01-15 17:31 ` Thierry Volpiatto
2012-01-15 18:24 ` Michael Albinus
2012-01-15 19:09 ` Thierry Volpiatto [this message]
2012-01-15 19:49 ` Michael Albinus
2012-01-15 21:01 ` Thierry Volpiatto
2012-01-16 8:58 ` Thierry Volpiatto
2012-01-16 13:56 ` Stefan Monnier
2012-01-16 14:13 ` Michael Albinus
2012-01-16 15:18 ` Stefan Monnier
2012-01-16 15:27 ` Michael Albinus
2012-01-16 21:40 ` Stefan Monnier
2012-02-21 16:53 ` Thierry Volpiatto
2012-02-21 17:59 ` Stefan Monnier
2012-02-21 19:46 ` Michael Albinus
2012-02-21 20:58 ` Thierry Volpiatto
2012-02-21 22:51 ` Stefan Monnier
2012-02-22 21:37 ` Thierry Volpiatto
2012-02-22 22:00 ` Stefan Monnier
2012-02-23 6:15 ` Thierry Volpiatto
2012-02-23 16:01 ` Thierry Volpiatto
2012-02-23 17:18 ` Stefan Monnier
2012-02-23 22:10 ` Thierry Volpiatto
2012-02-24 5:37 ` Thierry Volpiatto
2012-02-24 7:16 ` Thierry Volpiatto
2012-02-24 9:19 ` Eli Zaretskii
2012-02-24 9:49 ` Thierry Volpiatto
2012-02-24 12:18 ` Thierry Volpiatto
2012-02-24 12:54 ` Michael Albinus
2012-02-24 13:36 ` Thierry Volpiatto
2012-02-24 15:00 ` Michael Albinus
2012-02-24 14:33 ` Eli Zaretskii
2012-02-24 15:19 ` Michael Albinus
2012-02-24 19:42 ` Eli Zaretskii
2012-02-24 20:35 ` Michael Albinus
2012-02-25 6:21 ` Eli Zaretskii
2012-02-27 8:39 ` Michael Albinus
2012-02-27 17:40 ` Eli Zaretskii
2012-02-24 14:45 ` Thierry Volpiatto
2012-02-24 15:23 ` Michael Albinus
2012-02-24 14:39 ` Eli Zaretskii
2012-02-24 14:50 ` Thierry Volpiatto
2012-02-24 15:26 ` Michael Albinus
2012-02-24 15:52 ` Thierry Volpiatto
2012-02-24 16:17 ` Michael Albinus
2012-02-24 16:02 ` Thierry Volpiatto
2012-02-24 16:15 ` Drew Adams
2012-02-24 16:25 ` Michael Albinus
2012-02-24 16:42 ` Drew Adams
2012-02-24 17:04 ` Michael Albinus
2012-02-24 16:21 ` Michael Albinus
2012-02-24 17:23 ` Thierry Volpiatto
2012-02-24 18:43 ` Michael Albinus
2012-02-24 20:06 ` Thierry Volpiatto
2012-02-24 20:04 ` Eli Zaretskii
2012-02-24 20:33 ` Michael Albinus
2012-02-24 21:54 ` Thierry Volpiatto
2012-02-25 8:56 ` Michael Albinus
2012-02-25 9:08 ` Thierry Volpiatto
2012-02-26 9:48 ` Michael Albinus
2012-02-26 19:48 ` Thierry Volpiatto
2012-02-26 21:40 ` Stefan Monnier
2012-02-27 6:45 ` Thierry Volpiatto
2012-02-27 7:45 ` Stefan Monnier
2012-02-27 8:04 ` Thierry Volpiatto
2012-02-27 10:34 ` Stefan Monnier
2012-02-27 11:06 ` Thierry Volpiatto
2012-02-27 11:10 ` Michael Albinus
2012-02-27 11:34 ` Thierry Volpiatto
2012-02-27 13:24 ` Stefan Monnier
2012-02-27 14:59 ` Thierry Volpiatto
2012-02-27 17:38 ` Stefan Monnier
2012-02-27 18:34 ` Thierry Volpiatto
2012-02-27 19:08 ` Michael Albinus
2012-02-27 19:33 ` Thierry Volpiatto
2012-02-27 19:49 ` Michael Albinus
2012-02-27 21:58 ` Stefan Monnier
2012-02-27 22:11 ` Thierry Volpiatto
2012-02-28 6:12 ` Thierry Volpiatto
2012-02-28 7:14 ` Thierry Volpiatto
2012-02-28 7:34 ` Michael Albinus
2012-02-28 8:15 ` Thierry Volpiatto
2012-02-28 8:31 ` Michael Albinus
2012-02-28 9:34 ` Thierry Volpiatto
2012-02-28 10:15 ` Michael Albinus
2012-02-28 19:29 ` Stefan Monnier
2012-02-28 19:53 ` Michael Albinus
2012-02-29 2:01 ` Stefan Monnier
2012-02-29 11:04 ` Michael Albinus
2012-02-29 16:48 ` Stefan Monnier
2012-02-29 17:52 ` Thierry Volpiatto
2012-03-01 2:33 ` Stefan Monnier
2012-03-01 8:37 ` Michael Albinus
2012-02-27 10:40 ` Thierry Volpiatto
2012-02-27 11:03 ` Michael Albinus
2012-02-27 11:29 ` Thierry Volpiatto
2012-02-27 14:19 ` Drew Adams
2012-02-27 13:54 ` Chong Yidong
2012-02-27 15:15 ` Thierry Volpiatto
2012-02-25 7:05 ` Eli Zaretskii
2012-02-25 9:56 ` Stefan Monnier
2012-02-25 13:05 ` Michael Albinus
2012-02-25 15:36 ` Michael Albinus
2012-02-25 15:53 ` Thierry Volpiatto
2012-02-25 22:41 ` Stefan Monnier
2012-02-26 9:21 ` Michael Albinus
2012-02-26 21:38 ` Stefan Monnier
2012-02-27 8:19 ` Michael Albinus
2012-02-27 10:39 ` Stefan Monnier
2012-02-25 13:03 ` Michael Albinus
2012-02-25 14:35 ` Stefan Monnier
2012-02-25 14:56 ` Lennart Borgman
2012-02-21 19:43 ` Michael Albinus
2012-02-21 21:03 ` Thierry Volpiatto
2012-01-16 14:09 ` Andreas Schwab
2012-01-16 19:14 ` Thierry Volpiatto
2012-01-17 6:06 ` Thierry Volpiatto
2012-01-21 13:01 ` Thierry Volpiatto
2012-01-21 16:02 ` Thierry Volpiatto
2012-01-13 19:43 ` Stefan Monnier
2012-01-13 22:51 ` Michael Albinus
2012-01-14 1:55 ` Stefan Monnier
2012-01-14 8:59 ` Eli Zaretskii
2012-01-14 14:19 ` Stefan Monnier
2012-01-14 15:55 ` Eli Zaretskii
2012-01-15 5:59 ` Thierry Volpiatto
2012-01-15 12:40 ` Michael Albinus
2012-01-15 17:28 ` Thierry Volpiatto
2012-01-13 15:31 ` Drew Adams
2012-01-13 15:41 ` Eli Zaretskii
2012-01-13 16:56 ` Drew Adams
2012-01-15 18:42 ` Drew Adams
2012-01-13 10:32 ` Eli Zaretskii
2012-03-22 2:18 ` Michael Heerdegen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=8762gckckt.fsf@gmail.com \
--to=thierry.volpiatto@gmail.com \
--cc=10489@debbugs.gnu.org \
--cc=michael.albinus@gmx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.