aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Schwab2020-10-31 16:30:04 +0100
committerAndreas Schwab2020-10-31 16:37:01 +0100
commit596802c06301c28c21563a221dec759c50b99db6 (patch)
treecff7683b5e7c21baac247ddbea0e91f243b0af59
parent283b8d274bd54192b3876ce8bf2930a096391839 (diff)
downloademacs-596802c06301c28c21563a221dec759c50b99db6.tar.gz
emacs-596802c06301c28c21563a221dec759c50b99db6.zip
wdired: fix error handling of set-file-modes
* lisp/wdired.el (wdired-perms-to-number): Return decimal number. (wdired-do-perm-changes): Handle error from set-file-modes. (wdired-finish-edit): Remove `rename' from error message. (Bug#44343)
-rw-r--r--lisp/wdired.el44
1 files changed, 21 insertions, 23 deletions
diff --git a/lisp/wdired.el b/lisp/wdired.el
index da162b7bb29..bb32da3e3a2 100644
--- a/lisp/wdired.el
+++ b/lisp/wdired.el
@@ -482,7 +482,7 @@ non-nil means return old filename."
482 (when files-deleted 482 (when files-deleted
483 (wdired-flag-for-deletion files-deleted)) 483 (wdired-flag-for-deletion files-deleted))
484 (when (> errors 0) 484 (when (> errors 0)
485 (dired-log-summary (format "%d rename actions failed" errors) nil))) 485 (dired-log-summary (format "%d actions failed" errors) nil)))
486 (set-buffer-modified-p nil) 486 (set-buffer-modified-p nil)
487 (setq buffer-undo-list nil)) 487 (setq buffer-undo-list nil))
488 488
@@ -911,26 +911,26 @@ Like original function but it skips read-only words."
911 (mouse-set-point event) 911 (mouse-set-point event)
912 (wdired-toggle-bit)) 912 (wdired-toggle-bit))
913 913
914;; Allowed chars for 4000 bit are Ss in position 3 914;; Allowed chars for #o4000 bit are Ss in position 3
915;; Allowed chars for 2000 bit are Ssl in position 6 915;; Allowed chars for #o2000 bit are Ssl in position 6
916;; Allowed chars for 1000 bit are Tt in position 9 916;; Allowed chars for #o1000 bit are Tt in position 9
917(defun wdired-perms-to-number (perms) 917(defun wdired-perms-to-number (perms)
918 (let ((nperm 0777)) 918 (let ((nperm #o0777))
919 (if (= (elt perms 1) ?-) (setq nperm (- nperm 400))) 919 (if (= (elt perms 1) ?-) (setq nperm (- nperm #o400)))
920 (if (= (elt perms 2) ?-) (setq nperm (- nperm 200))) 920 (if (= (elt perms 2) ?-) (setq nperm (- nperm #o200)))
921 (let ((p-bit (elt perms 3))) 921 (let ((p-bit (elt perms 3)))
922 (if (memq p-bit '(?- ?S)) (setq nperm (- nperm 100))) 922 (if (memq p-bit '(?- ?S)) (setq nperm (- nperm #o100)))
923 (if (memq p-bit '(?s ?S)) (setq nperm (+ nperm 4000)))) 923 (if (memq p-bit '(?s ?S)) (setq nperm (+ nperm #o4000))))
924 (if (= (elt perms 4) ?-) (setq nperm (- nperm 40))) 924 (if (= (elt perms 4) ?-) (setq nperm (- nperm #o40)))
925 (if (= (elt perms 5) ?-) (setq nperm (- nperm 20))) 925 (if (= (elt perms 5) ?-) (setq nperm (- nperm #o20)))
926 (let ((p-bit (elt perms 6))) 926 (let ((p-bit (elt perms 6)))
927 (if (memq p-bit '(?- ?S ?l)) (setq nperm (- nperm 10))) 927 (if (memq p-bit '(?- ?S ?l)) (setq nperm (- nperm #o10)))
928 (if (memq p-bit '(?s ?S ?l)) (setq nperm (+ nperm 2000)))) 928 (if (memq p-bit '(?s ?S ?l)) (setq nperm (+ nperm #o2000))))
929 (if (= (elt perms 7) ?-) (setq nperm (- nperm 4))) 929 (if (= (elt perms 7) ?-) (setq nperm (- nperm 4)))
930 (if (= (elt perms 8) ?-) (setq nperm (- nperm 2))) 930 (if (= (elt perms 8) ?-) (setq nperm (- nperm 2)))
931 (let ((p-bit (elt perms 9))) 931 (let ((p-bit (elt perms 9)))
932 (if (memq p-bit '(?- ?T)) (setq nperm (- nperm 1))) 932 (if (memq p-bit '(?- ?T)) (setq nperm (- nperm 1)))
933 (if (memq p-bit '(?t ?T)) (setq nperm (+ nperm 1000)))) 933 (if (memq p-bit '(?t ?T)) (setq nperm (+ nperm #o1000))))
934 nperm)) 934 nperm))
935 935
936;; Perform the changes in the permissions of the files that have 936;; Perform the changes in the permissions of the files that have
@@ -940,7 +940,7 @@ Like original function but it skips read-only words."
940 (errors 0) 940 (errors 0)
941 (prop-wanted (if (eq wdired-allow-to-change-permissions 'advanced) 941 (prop-wanted (if (eq wdired-allow-to-change-permissions 'advanced)
942 'old-perm 'perm-changed)) 942 'old-perm 'perm-changed))
943 filename perms-ori perms-new perm-tmp) 943 filename perms-ori perms-new)
944 (goto-char (next-single-property-change (point-min) prop-wanted 944 (goto-char (next-single-property-change (point-min) prop-wanted
945 nil (point-max))) 945 nil (point-max)))
946 (while (not (eobp)) 946 (while (not (eobp))
@@ -951,14 +951,12 @@ Like original function but it skips read-only words."
951 (setq changes t) 951 (setq changes t)
952 (setq filename (wdired-get-filename nil t)) 952 (setq filename (wdired-get-filename nil t))
953 (if (= (length perms-new) 10) 953 (if (= (length perms-new) 10)
954 (progn 954 (condition-case nil
955 (setq perm-tmp 955 (set-file-modes filename (wdired-perms-to-number perms-new))
956 (string-to-number 956 (error
957 (int-to-string (wdired-perms-to-number perms-new)) 8)) 957 (setq errors (1+ errors))
958 (unless (set-file-modes filename perm-tmp) 958 (dired-log "Setting mode of `%s' to `%s' failed\n\n"
959 (setq errors (1+ errors)) 959 filename perms-new)))
960 (dired-log "%s %s `%s' failed\n\n"
961 dired-chmod-program perm-tmp filename)))
962 (setq errors (1+ errors)) 960 (setq errors (1+ errors))
963 (dired-log "Cannot parse permission `%s' for file `%s'\n\n" 961 (dired-log "Cannot parse permission `%s' for file `%s'\n\n"
964 perms-new filename))) 962 perms-new filename)))