branch: elpa/magit
commit b64be35cd6e1bf54afd2aa3814629193020f896a
Author: Jonas Bernoulli <[email protected]>
Commit: Jonas Bernoulli <[email protected]>

    magit-file-delete: Require confirmation for directories
---
 lisp/magit-files.el | 23 +++++++++++++++--------
 1 file changed, 15 insertions(+), 8 deletions(-)

diff --git a/lisp/magit-files.el b/lisp/magit-files.el
index 1abc036a27..9b1e841876 100644
--- a/lisp/magit-files.el
+++ b/lisp/magit-files.el
@@ -691,14 +691,21 @@ Git, then fallback to using `delete-file'."
                          (magit-confirm-files 'delete files "Delete")
                        (list (magit-read-file "Delete file" nil t)))
                      current-prefix-arg))
-  (if (magit-file-tracked-p (car files))
-      (magit-call-git "rm" (and force "--force") "--" files)
-    (let ((topdir (magit-toplevel)))
-      (dolist (file files)
-        (setq file (expand-file-name file topdir))
-        (if (file-directory-p file)
-            (delete-directory file t t)
-          (delete-file file t)))))
+  (let ((args (and force (list "--force"))))
+    (when-let ((dirs (seq-filter #'file-directory-p files)))
+      (if (yes-or-no-p (format "Recursively delete %s %S:"
+                               (if (length= dirs 1) "directory" "directories")
+                               (string-join dirs ",")))
+          (push "-r" args)
+        (user-error "Abort")))
+    (if (magit-file-tracked-p (car files))
+        (magit-call-git "rm" args "--" files)
+      (let ((topdir (magit-toplevel)))
+        (dolist (file files)
+          (setq file (expand-file-name file topdir))
+          (if (file-directory-p file)
+              (delete-directory file t t)
+            (delete-file file t))))))
   (magit-refresh))
 
 ;;;###autoload

Reply via email to