aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Ingebrigtsen2022-06-17 14:47:16 +0200
committerLars Ingebrigtsen2022-06-17 14:48:31 +0200
commit7daa552c681bb14fa97428e5888cfb545108ce1d (patch)
tree5d8210aa74f26b8f15601f838fd87faff544985b
parent4aca0d818f2d0b7dd7dc511907cc19f63758e482 (diff)
downloademacs-7daa552c681bb14fa97428e5888cfb545108ce1d.tar.gz
emacs-7daa552c681bb14fa97428e5888cfb545108ce1d.zip
Fix wdired marking of unsuccessfully renamed files
* lisp/wdired.el (wdired-finish-edit): Don't mark non-renamed files as renamed (bug#46438).
-rw-r--r--lisp/wdired.el17
1 files changed, 14 insertions, 3 deletions
diff --git a/lisp/wdired.el b/lisp/wdired.el
index d2a6bad0f28..a5858ed190e 100644
--- a/lisp/wdired.el
+++ b/lisp/wdired.el
@@ -521,7 +521,15 @@ non-nil means return old filename."
521 files-renamed)))) 521 files-renamed))))
522 (forward-line -1))) 522 (forward-line -1)))
523 (when files-renamed 523 (when files-renamed
524 (setq errors (+ errors (wdired-do-renames files-renamed)))) 524 (pcase-let ((`(,errs . ,successful-renames)
525 (wdired-do-renames files-renamed)))
526 (cl-incf errors errs)
527 ;; Some of the renames may fail -- in that case, don't mark an
528 ;; already-existing file with the same name as renamed.
529 (pcase-dolist (`(,file . _) wdired--old-marks)
530 (unless (member file successful-renames)
531 (setq wdired--old-marks
532 (assoc-delete-all file wdired--old-marks #'equal))))))
525 ;; We have to be in wdired-mode when wdired-do-renames is executed 533 ;; We have to be in wdired-mode when wdired-do-renames is executed
526 ;; so that wdired--restore-properties runs, but we have to change 534 ;; so that wdired--restore-properties runs, but we have to change
527 ;; back to dired-mode before reverting the buffer to avoid using 535 ;; back to dired-mode before reverting the buffer to avoid using
@@ -566,7 +574,8 @@ non-nil means return old filename."
566 (errors 0) 574 (errors 0)
567 (total (1- (length renames))) 575 (total (1- (length renames)))
568 (prep (make-progress-reporter "Renaming" 0 total)) 576 (prep (make-progress-reporter "Renaming" 0 total))
569 (overwrite (or (not wdired-confirm-overwrite) 1))) 577 (overwrite (or (not wdired-confirm-overwrite) 1))
578 (successful-renames nil))
570 (while (or renames 579 (while (or renames
571 ;; We've done one round through the renames, we have found 580 ;; We've done one round through the renames, we have found
572 ;; some residue, but we also made some progress, so maybe 581 ;; some residue, but we also made some progress, so maybe
@@ -617,13 +626,15 @@ non-nil means return old filename."
617 (wdired-create-parentdirs file-new)) 626 (wdired-create-parentdirs file-new))
618 (dired-rename-file file-ori file-new 627 (dired-rename-file file-ori file-new
619 overwrite)) 628 overwrite))
629 (:success
630 (push file-new successful-renames))
620 (error 631 (error
621 (setq errors (1+ errors)) 632 (setq errors (1+ errors))
622 (dired-log "Rename `%s' to `%s' failed:\n%s\n" 633 (dired-log "Rename `%s' to `%s' failed:\n%s\n"
623 file-ori file-new 634 file-ori file-new
624 err))))))))) 635 err)))))))))
625 (progress-reporter-done prep) 636 (progress-reporter-done prep)
626 errors)) 637 (cons errors successful-renames)))
627 638
628(defun wdired-create-parentdirs (file-new) 639(defun wdired-create-parentdirs (file-new)
629 "Create parent directories for FILE-NEW if they don't exist." 640 "Create parent directories for FILE-NEW if they don't exist."