From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Thierry Volpiatto Newsgroups: gmane.emacs.bugs Subject: bug#58919: 28.2; dired-copy-file-recursive fails to overwrite directory Date: Mon, 31 Oct 2022 08:54:28 +0000 Message-ID: <87y1sws6eq.fsf@posteo.net> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="26168"; mail-complaints-to="usenet@ciao.gmane.io" To: 58919@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Mon Oct 31 10:13:20 2022 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1opQr9-0006eu-Q8 for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 31 Oct 2022 10:13:19 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1opQqu-0004Jq-Rp; Mon, 31 Oct 2022 05:13:04 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1opQqt-0004IW-4h for bug-gnu-emacs@gnu.org; Mon, 31 Oct 2022 05:13:03 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1opQqs-0008S8-TU for bug-gnu-emacs@gnu.org; Mon, 31 Oct 2022 05:13:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1opQqs-0003TU-JW for bug-gnu-emacs@gnu.org; Mon, 31 Oct 2022 05:13:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Thierry Volpiatto Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 31 Oct 2022 09:13:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 58919 X-GNU-PR-Package: emacs X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.166720757913345 (code B ref -1); Mon, 31 Oct 2022 09:13:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 31 Oct 2022 09:12:59 +0000 Original-Received: from localhost ([127.0.0.1]:39524 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1opQqo-0003TA-WD for submit@debbugs.gnu.org; Mon, 31 Oct 2022 05:12:59 -0400 Original-Received: from lists.gnu.org ([209.51.188.17]:46138) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1opQqn-0003T3-6L for submit@debbugs.gnu.org; Mon, 31 Oct 2022 05:12:57 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1opQqm-0004FL-SX for bug-gnu-emacs@gnu.org; Mon, 31 Oct 2022 05:12:57 -0400 Original-Received: from mout01.posteo.de ([185.67.36.65]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1opQqj-0008Mm-22 for bug-gnu-emacs@gnu.org; Mon, 31 Oct 2022 05:12:56 -0400 Original-Received: from submission (posteo.de [185.67.36.169]) by mout01.posteo.de (Postfix) with ESMTPS id A503D240026 for ; Mon, 31 Oct 2022 10:12:48 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1667207569; bh=VXjIh4/5MUOWdXOxJz7vGlBzh6ZpW4Uo9yxvJY9CAW4=; h=From:To:Subject:Date:Autocrypt:OpenPGP:From; b=Udu6So1JfzyO595hU8cjHgAkZ8m7sQWV7p0Zi/dHl1Sr3rRs35IS63lgmLqmI9QvW nMojtgp5IDaRNBI/AmgXAvg0ZrfGNi72h2GmYlpEyGQ4haFWTFHDUhBl1DLc9PDQrI MvPE6J6H4tGN/LY224qLK+LpI7mFYjIEuepK+x+sODyw0cAcuuG5FX/5lm44XdaELL P7YmndRL4FzssVkTGHksyrnaYTmJka3e6eBGyTw2mcubTh6hOgXvSIjxI3WsHQMDSH Tb19pjYMGI3Fb+Y7PsRaykVqu8LEiQ5/15PDLEI9sCgzNc8NZfleTKQJSdYRnUJj0t P/djd/+jeuCIQ== Original-Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4N16qz6LHGz6tnG for ; Mon, 31 Oct 2022 10:12:47 +0100 (CET) Autocrypt: addr=thievol@posteo.net; prefer-encrypt=mutual; keydata= mQGNBF8ylcIBDADG+hy+zR6L4/vbdDDZuSaMmSrU3A5QZJpeBCvxTr7MpzzruZbhLPW1K3R6N2MA edi8Y+C8o27FVRIjpdbaKMGu9je7JV/TbUQYo3SOwCK1vM4LUn4V6ZLzSYkuiEt4eyMoiDdyvN0p kcK6P9x9DCetcEVszXzQg+yzCVrQ2hXWDXWT4M18EC3wtO7RHPouMqGiwBFhBAYErCqFWFxQHkfb tG/4yGyJ58rglb65O3qijjMWvYwcWZun9/7qm8Z4/4mHopmo2zgU+OrptnLSZfkZGz3Y7Uf452xQ GVq0Fv75NPvQru7y+DYVhuVXXyAmGxt+vf4rIiixMBbhKEPjcxEPAa2LTzex2IsTZR+QVG9uDnqC WcgaOEQ58fzXNvNhtwwF/Rgio2XWAJVdmFWS59/k9W58CIUSNKBMZh2XeGdEmtHvDtCxW3z6FJha 36RzOM3fMNNiAGdFZJA84gcdloJR+sHCDTTPT3784fjr+V8An7sI581NGFzkRQqPvEQCZbUAEQEA AbQSdGhpZXZvbEBwb3N0ZW8ubmV0iQHOBBMBCgA4AhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheA FiEEI9twfRN7r3nig/xwDsVtFB0W75MFAmL3HCoACgkQDsVtFB0W75OVEAv/f6XxmtIFz08fUb8h Bp/zJP6IC4/rhhh+0GMRIRzLN8DK0jV8JCzYdFHiRJOy2lNIOpmrrCmjRRxferc2G42+ePFIsslx hU46VSz1Z83NwIG3mpdYNV5WUTUdgzxExHTNTFCd7NKv0nlHKQa OpenPGP: url=https://posteo.de/keys/thievol@posteo.net.asc; preference=encrypt Received-SPF: pass client-ip=185.67.36.65; envelope-from=thievol@posteo.net; helo=mout01.posteo.de X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list 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: , Original-Sender: "bug-gnu-emacs" Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:246671 Archived-At: This is a followup of this report on reddit: https://www.reddit.com/r/emacs/comments/yha104/merging_directories_in_dired= _am_i_doing_it_wrong/ When using dired-copy to copy a directory to another directory containing a directory with the same name overwriting fails. e.g. copy ~/tmp/test/foo/ to ~/tmp/test1/ fails when test1 contain foo/ The bug is IMHO in copy-directory 3th clause of this cond: (cond ((not (directory-name-p newname)) ;; If NEWNAME is not a directory name, create it; ;; that is where we will copy the files of DIRECTORY. (make-directory newname parents)) ;; NEWNAME is a directory name. If COPY-CONTENTS is non-nil, ;; create NEWNAME if it is not already a directory; ;; otherwise, create NEWNAME/[DIRECTORY-BASENAME]. ((if copy-contents (or parents (not (file-directory-p newname))) (setq newname (concat newname (file-name-nondirectory directory)))) (make-directory (directory-file-name newname) parents)) (t (setq follow t))) This change was introduced here: commit 047f02f00f602b9aef63ae8938e12f3f0ab481eb Author: Paul Eggert Date: Wed Sep 20 11:49:12 2017 -0700 Fix new copy-directory bug with empty dirs =20=20=20=20 Problem reported by Afdam Plaice (Bug#28520) and by Eli Zaretskii (Bug#28483#34). This is another bug that I introduced in my recent copy-directory changes. * lisp/files.el (copy-directory): Work with empty subdirectories, too. * test/lisp/files-tests.el (files-tests--copy-directory): Test for this bug. Reverting this change fix the bug. Using this should also fix the bug (based on my 2012 changes), not sure though if it fix the bug described in the above commit. (cond ((not (directory-name-p newname)) ;; If NEWNAME is not a directory name, create it; ;; that is where we will copy the files of DIRECTORY. (make-directory newname parents)) ;; NEWNAME is a directory name. If COPY-CONTENTS is non-nil, ;; create NEWNAME if it is not already a directory; ;; otherwise, create NEWNAME/[DIRECTORY-BASENAME]. ((and copy-contents (or parents (not (file-directory-p newname)))) (make-directory (directory-file-name newname) parents)) ((not copy-contents) (setq newname (concat newname (file-name-nondirectory directory))) (and (file-exists-p newname) (not (file-directory-p newname)) (error "Cannot overwrite non-directory %s with a directory" newname)) (make-directory newname t)) (t (setq follow t))) It also make readable the clauses handling copy-contents... In GNU Emacs 28.2 (build 1, x86_64-pc-linux-gnu, Motif Version 2.3.8, cairo= version 1.16.0) of 2022-09-12 built on IPad-S340 Windowing system distributor 'The X.Org Foundation', version 11.0.12013000 System Description: Linux Mint 20.3 Configured using: 'configure CFLAGS=3D-O8 --with-mailutils --with-cairo --without-dbus --without-gconf --without-gsettings --with-x-toolkit=3Dmotif' Configured features: ACL CAIRO FREETYPE GIF GLIB GMP GNUTLS GPM HARFBUZZ JPEG JSON LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 M17N_FLT MODULES NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SOUND THREADS TIFF TOOLKIT_SCROLL_BARS X11 XDBE XIM XPM MOTIF ZLIB Important settings: value of $LANG: fr_FR.UTF-8 locale-coding-system: utf-8-unix Major mode: =C6=90=C4=BD Minor modes in effect: bug-reference-prog-mode: t global-undo-tree-mode: t undo-tree-mode: t psession-mode: t psession-savehist-mode: t global-git-gutter-mode: t git-gutter-mode: t display-time-mode: t winner-mode: t helm-epa-mode: t helm-descbinds-mode: t helm-adaptive-mode: t helm-mode: t helm-minibuffer-history-mode: t helm-ff-icon-mode: t shell-dirtrack-mode: t helm-popup-tip-mode: t async-bytecomp-package-mode: t minibuffer-depth-indicate-mode: t override-global-mode: t tooltip-mode: t global-eldoc-mode: t eldoc-mode: t show-paren-mode: t mouse-wheel-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t column-number-mode: t line-number-mode: t auto-fill-function: do-auto-fill transient-mark-mode: t Load-path shadows: None found. Features: (shadow epa-mail face-remap emacsbug vc-annotate sort gnus-cite w3m-form w3m-symbol w3m doc-view jka-compr timezone w3m-hist w3m-fb bookmark-w3m w3m-ems w3m-favicon w3m-image tab-line w3m-proc w3m-util mm-archive qp smiley mail-extr addressbook-bookmark tv-mu4e-config mu4e-contrib eshell esh-cmd esh-ext esh-opt esh-proc esh-io esh-arg esh-module esh-groups esh-util mu4e-patch mu4e mu4e-org mu4e-main mu4e-view gnus-art mm-uu mml2015 mm-view mml-smime smime dig gnus-sum gnus-group gnus-undo gnus-start gnus-dbus gnus-cloud nnimap nnmail mail-source utf7 netrc nnoo gnus-spec gnus-int gnus-range gnus-win mu4e-headers mu4e-compose mu4e-draft mu4e-actions smtpmail sendmail mu4e-search mu4e-lists mu4e-bookmarks mu4e-mark mu4e-message shr kinsoku svg flow-fill hl-line mu4e-contacts mu4e-update mu4e-folders mu4e-server mu4e-context mu4e-obsolete mu4e-vars mu4e-helpers mu4e-config ido helm-firefox helm-dabbrev help-fns radix-tree debug cl-print cus-start helm-command helm-x-files helm-for-files dired-x image-file image-converter char-fold tramp-archive tramp-gvfs dbus bug-reference naquadah-theme view solar cal-dst holidays hol-loaddefs tv-utils osm dom yaml-mode undo-tree diff queue psession frameset log-view pcvs-util bash-completion cl-indent pcase ffap thingatpt autocrypt-message message rmc puny rfc822 mml mml-sec mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader autocrypt-gnus gnus nnheader gnus-util rmail rmail-loaddefs rfc2047 rfc2045 mail-utils mm-util mail-prsvr autocrypt-mu4e autocrypt ietf-drums config-w3m git-gutter mule-util appt diary-lib diary-loaddefs gud wdired dired-extension org-config ob-gnuplot org-crypt net-utils time winner autotest-mode autoconf-mode woman man ediff ediff-merg ediff-mult ediff-wind ediff-diff ediff-help ediff-init ediff-util init-helm helm-ls-git vc-git diff-mode vc vc-dispatcher helm-fd epa derived epg rfc6068 epg-config helm-epa helm-imenu imenu helm-elisp-package helm-find helm-org org ob ob-tangle ob-ref ob-lob ob-table ob-exp org-macro org-footnote org-src ob-comint org-pcomplete org-list org-faces org-entities noutline outline org-version ob-emacs-lisp ob-core ob-eval org-table oc-basic bibtex ol rx org-keys oc org-compat advice org-macs org-loaddefs cal-menu calendar cal-loaddefs helm-external isl helm-descbinds helm-wikipedia all-the-icons all-the-icons-faces data-material data-weathericons data-octicons data-fileicons data-faicons data-alltheicons wfnames cus-edit wid-edit helm-ipython helm-elisp helm-eval edebug backtrace find-func python tramp-sh popup helm-bookmark helm-net xml helm-info bookmark pp helm-adaptive helm-mode helm-misc helm-files image-dired image-mode exif filenotify tramp tramp-loaddefs trampver tramp-integration files-x tramp-compat shell pcomplete parse-time iso8601 time-date ls-lisp helm-buffers helm-occur helm-tags helm-locate helm-grep wgrep-helm wgrep grep compile text-property-search comint ring helm-regexp format-spec ansi-color helm-utils helm-help helm-types helm-extensions-autoloads helm-config helm-autoloads helm helm-global-bindings helm-easymenu helm-core async-bytecomp helm-source helm-multi-match helm-lib dired-async dired-aux dired dired-loaddefs async diminish cl-extra help-mode mb-depth server edmacro kmacro avoid cus-load use-package use-package-ensure use-package-delight use-package-diminish use-package-bind-key bind-key easy-mmode use-package-core finder-inf package browse-url url url-proxy url-privacy url-expand url-methods url-history url-cookie url-domsuf url-util mailcap url-handlers url-parse auth-source cl-seq eieio eieio-core cl-macs eieio-loaddefs password-cache json subr-x map url-vars seq byte-opt gv bytecomp byte-compile cconv cl-loaddefs cl-lib info w3m-load iso-transl tooltip eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors frame minibuffer cl-generic cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite emoji-zwj charscript charprop case-table epa-hook jka-cmpr-hook help simple abbrev obarray cl-preloaded nadvice button loaddefs faces cus-face macroexp files window text-properties overlay sha1 md5 base64 format env code-pages mule custom widget hashtable-print-readable backquote threads inotify lcms2 dynamic-setting font-render-setting cairo motif x-toolkit x multi-tty make-network-process emacs) Memory information: ((conses 16 824596 90080) (symbols 48 43448 5) (strings 32 266727 16954) (string-bytes 1 8033636) (vectors 16 86864) (vector-slots 8 1908060 113478) (floats 8 2769 951) (intervals 56 23817 13089) (buffers 992 107)) <#secure method=3Dpgpmime mode=3Dsign> --=20 Thierry