diff options
| author | Andreas Schwab | 2020-10-31 16:30:04 +0100 |
|---|---|---|
| committer | Andreas Schwab | 2020-10-31 16:37:01 +0100 |
| commit | 596802c06301c28c21563a221dec759c50b99db6 (patch) | |
| tree | cff7683b5e7c21baac247ddbea0e91f243b0af59 | |
| parent | 283b8d274bd54192b3876ce8bf2930a096391839 (diff) | |
| download | emacs-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.el | 44 |
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))) |