From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Michael Albinus Newsgroups: gmane.emacs.bugs Subject: bug#10489: 24.0.92; dired-do-copy may create infinite directory hierarchy Date: Fri, 24 Feb 2012 17:21:33 +0100 Message-ID: <87ty2gdwxe.fsf@gmx.de> References: <87mx9su32g.fsf@web.de> <871uqzn3bc.fsf@gmx.de> <871uqz651u.fsf@gmx.de> <87pqd89lh4.fsf@gmail.com> <87mx8b3nvb.fsf@gmail.com> <87pqd6wnvv.fsf@gmail.com> <87d395y1w0.fsf@gmail.com> <87zkc8x04p.fsf@gmail.com> <87vcmwwvk7.fsf@gmail.com> <834nugtwqf.fsf@gnu.org> <87r4xkwhky.fsf@gmail.com> <83vcmws3bs.fsf@gnu.org> <87ehtkwaiz.fsf@gmail.com> <87wr7cgsm3.fsf@gmx.de> <8762eww77b.fsf@gmail.com> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: dough.gmane.org 1330100561 15105 80.91.229.3 (24 Feb 2012 16:22:41 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Fri, 24 Feb 2012 16:22:41 +0000 (UTC) Cc: 10489@debbugs.gnu.org To: Thierry Volpiatto Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Fri Feb 24 17:22:40 2012 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([140.186.70.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1S0xum-00041Z-JR for geb-bug-gnu-emacs@m.gmane.org; Fri, 24 Feb 2012 17:22:36 +0100 Original-Received: from localhost ([::1]:50206 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1S0xum-0000NW-3Q for geb-bug-gnu-emacs@m.gmane.org; Fri, 24 Feb 2012 11:22:36 -0500 Original-Received: from eggs.gnu.org ([208.118.235.92]:49594) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1S0xui-0000NC-J9 for bug-gnu-emacs@gnu.org; Fri, 24 Feb 2012 11:22:33 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1S0xue-00057O-B0 for bug-gnu-emacs@gnu.org; Fri, 24 Feb 2012 11:22:32 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:52460) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1S0xue-00057I-0S for bug-gnu-emacs@gnu.org; Fri, 24 Feb 2012 11:22:28 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1S0xx8-0002se-62 for bug-gnu-emacs@gnu.org; Fri, 24 Feb 2012 11:25:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Michael Albinus Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 24 Feb 2012 16:25:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 10489 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 10489-submit@debbugs.gnu.org id=B10489.133010066311026 (code B ref 10489); Fri, 24 Feb 2012 16:25:02 +0000 Original-Received: (at 10489) by debbugs.gnu.org; 24 Feb 2012 16:24:23 +0000 Original-Received: from localhost ([127.0.0.1]:54357 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1S0xwV-0002rn-9W for submit@debbugs.gnu.org; Fri, 24 Feb 2012 11:24:23 -0500 Original-Received: from mailout-de.gmx.net ([213.165.64.23]:57935) by debbugs.gnu.org with smtp (Exim 4.72) (envelope-from ) id 1S0xwT-0002rb-Kk for 10489@debbugs.gnu.org; Fri, 24 Feb 2012 11:24:22 -0500 Original-Received: (qmail invoked by alias); 24 Feb 2012 16:21:40 -0000 Original-Received: from p57BB94C0.dip0.t-ipconnect.de (EHLO detlef.gmx.de) [87.187.148.192] by mail.gmx.net (mp035) with SMTP; 24 Feb 2012 17:21:40 +0100 X-Authenticated: #3708877 X-Provags-ID: V01U2FsdGVkX19oF2FWA7NovxQ/Ah35pQwJxOU5v1Z5Z7hrGtEPzh mo7NVj8Q6kf06E In-Reply-To: <8762eww77b.fsf@gmail.com> (Thierry Volpiatto's message of "Fri, 24 Feb 2012 17:02:16 +0100") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.93 (gnu/linux) X-Y-GMX-Trusted: 0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:57179 Archived-At: Thierry Volpiatto writes: > (defun files-equal-p (file1 file2) > "Return non-nil if FILE1 and FILE2 name the same file." > (let ((handler (or (find-file-name-handler file1 'files-equal-p) > (find-file-name-handler file2 'files-equal-p)))) > (if handler > (funcall handler 'files-equal-p file1 file2) > (and (equal (file-remote-p file1) (file-remote-p file2)) Not needed anymore, you have called the handler already. > (equal (file-attributes (file-truename file1)) > (file-attributes (file-truename file2))))))) Here we have the discussion about the inode numbers. But this is an edge case; let's go this way. Eli will fix it for Windows :-) > (defun file-subdir-of-p (dir1 dir2) > "Return non-nil if DIR1 is a subdirectory of DIR2. > Note that a directory is treated by this function as a subdirectory of itself. > This function only works when its two arguments already exist, > when they don't, it returns nil." > (let ((handler (or (find-file-name-handler dir1 'file-subdir-of-p) > (find-file-name-handler dir2 'file-subdir-of-p)))) > (if handler > (funcalll handler 'file-subdir-of-p dir1 dir2) > (when (and (file-directory-p dir1) > (file-directory-p dir2)) > (loop with f1 = (file-truename dir1) > with f2 = (file-truename dir2) > with ls1 = (or (split-string f1 "/" t) (list "/")) > with ls2 = (or (split-string f2 "/" t) (list "/")) > for p = (string-match "^/" f1) > for i in ls1 > for j in ls2 > when (string= i j) > concat (if p (concat "/" i) (concat i "/")) > into root > finally return > (files-equal-p (file-truename root) f2)))))) Looks OK on the first glance. > BTW I have added the COPY-CONTENTS arg to your handler in > `copy-directory'. Thanks. Best regards, Michael.