diff --git a/lisp/plstore.el b/lisp/plstore.el index 0964e6ccaf6..2fada5a308d 100644 --- a/lisp/plstore.el +++ b/lisp/plstore.el @@ -550,23 +550,36 @@ SECRET-KEYS is a plist containing secret data." (cons (cons name secret-plist) (plstore--get-secret-alist plstore))))) (plstore--merge-secret plstore))) +(defun plstore--has-secret-keys (plist) + "Return t if PLIST of a plstore entry has secret keys." + (string-match-p "\\`:secret-" (symbol-name (car plist)))) + (defun plstore-delete (plstore name) "Delete the first entry named NAME from PLSTORE." - (let ((entry (assoc name (plstore--get-alist plstore)))) - (if entry - (plstore--set-alist - plstore - (delq entry (plstore--get-alist plstore)))) - (setq entry (assoc name (plstore--get-secret-alist plstore))) - (if entry - (plstore--set-secret-alist - plstore - (delq entry (plstore--get-secret-alist plstore)))) - (setq entry (assoc name (plstore--get-merged-alist plstore))) - (if entry - (plstore--set-merged-alist - plstore - (delq entry (plstore--get-merged-alist plstore)))))) + (when-let* ((entry (assoc name (plstore--get-alist plstore))) + (plist (cdr entry))) + (when (plstore--has-secret-keys plist) + (plstore--decrypt plstore) + (setq entry (assoc name (plstore--get-alist plstore)))) + (plstore--set-alist + plstore + (delq entry (plstore--get-alist plstore)))) + (when-let* ((entry (assoc name (plstore--get-secret-alist plstore))) + (plist (cdr entry))) + (when (plstore--has-secret-keys plist) + (plstore--decrypt plstore) + (setq entry (assoc name (plstore--get-secret-alist plstore)))) + (plstore--set-secret-alist + plstore + (delq entry (plstore--get-secret-alist plstore)))) + (when-let* ((entry (assoc name (plstore--get-merged-alist plstore))) + (plist (cdr entry))) + (when (plstore--has-secret-keys plist) + (plstore--decrypt plstore) + (setq entry (assoc name (plstore--get-merged-alist plstore)))) + (plstore--set-merged-alist + plstore + (delq entry (plstore--get-merged-alist plstore))))) (defvar pp-escape-newlines) (defun plstore--insert-buffer (plstore)