From: Stephen Berman <stephen.berman@gmx.net>
To: 5343@debbugs.gnu.org
Subject: bug#5343: 23.1.91; recursive directory copying is broken
Date: Sat, 09 Jan 2010 22:53:58 +0100 [thread overview]
Message-ID: <878wc754i1.fsf@escher.home> (raw)
In-Reply-To: <87fx6gkx3h.fsf@escher.home> (Stephen Berman's message of "Sat, 09 Jan 2010 00:14:58 +0100")
On Sat, 09 Jan 2010 00:14:58 +0100 Stephen Berman <stephen.berman@gmx.net> wrote:
> 1. emacs -Q
> 2. Make a directory /tmp/test, add to it a file named "a" and a
> directory named "test", and add to /tmp/test/test a file named "b".
> 3. Type `M-x copy-directory RET /tmp/test RET ~ RET' to copy /tmp/test
> recursively to ~.
> 4. Type `C-x d' and at the prompt `~' to visit ~ in Dired, put the
> cursor on the directory "test" and type `i' to open "test" as a
> subdirectory. This is the result:
>
> /home/steve/test:
> total used in directory 16 available 7794948
> -rw-r--r-- 1 steve users 4 2010-01-08 23:57 a
> -rw-r--r-- 1 steve users 7 2010-01-08 23:57 b
This is due to the following code in copy-directory:
(if (and (file-directory-p newname)
(not (string-equal (file-name-nondirectory directory)
(file-name-nondirectory newname))))
(setq newname
(expand-file-name (file-name-nondirectory directory) newname)))
Specifically, the equality check prevents newname from being changed
from "home/steve/test" to "home/steve/test/test". Removing this check,
as in the below patch, fixes the above breakage. I don't see any real
problem this check prevents, but maybe I'm overlooking something.
Steve Berman
2010-01-09 Stephen Berman <stephen.berman@gmx.net>
* files.el (copy-directory): Don't check equality of source and
target nondirectory names (bug#5343).
*** /tmp/ediff7644I7H 2010-01-09 22:23:07.000000000 +0100
--- /home/steve/bzr/emacs/quickfixes/lisp/files.el 2010-01-09 21:41:52.000000000 +0100
***************
*** 4714,4722 ****
;; Compute target name.
(setq directory (directory-file-name (expand-file-name directory))
newname (directory-file-name (expand-file-name newname)))
! (if (and (file-directory-p newname)
! (not (string-equal (file-name-nondirectory directory)
! (file-name-nondirectory newname))))
(setq newname
(expand-file-name (file-name-nondirectory directory) newname)))
(if (not (file-directory-p newname)) (make-directory newname parents))
--- 4714,4720 ----
;; Compute target name.
(setq directory (directory-file-name (expand-file-name directory))
newname (directory-file-name (expand-file-name newname)))
! (if (file-directory-p newname)
(setq newname
(expand-file-name (file-name-nondirectory directory) newname)))
(if (not (file-directory-p newname)) (make-directory newname parents))
next prev parent reply other threads:[~2010-01-09 21:53 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <nqljg2tgsl.fsf@alcatel-lucent.com>
2010-01-08 23:14 ` bug#5343: 23.1.91; recursive directory copying is broken Stephen Berman
2010-01-09 21:53 ` Stephen Berman [this message]
2010-01-10 2:14 ` Lennart Borgman
2010-01-12 22:07 ` Michael Albinus
2010-01-13 10:52 ` Stephen Berman
2010-01-13 10:56 ` bug#5343: marked as done (23.1.91; recursive directory copying is broken) Emacs bug Tracking System
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=878wc754i1.fsf@escher.home \
--to=stephen.berman@gmx.net \
--cc=5343@debbugs.gnu.org \
/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.