Subject: Re: bug#79356: 31.0.50; 'C-x p r' fails when there are .gpg files EPA can't decrypt

From: Stefan Monnier <[email-masked]>
Date: Mon, 01 Sep 2025 00:00:01 -0400

> --8<---------------cut here---------------start------------->8---
> diff --git a/lisp/fileloop.el b/lisp/fileloop.el
> index d7d2aa7e0d5..fd749353753 100644
> --- a/lisp/fileloop.el
> +++ b/lisp/fileloop.el
> @@ -121,10 +121,17 @@ fileloop-next-file
>          (kill-all-local-variables)
>          (erase-buffer)
>          (setq new next)
> -        (condition-case nil
> +        (condition-case err
>              (insert-file-contents new nil)
>            (file-missing
> -           (fileloop-next-file novisit))))
> +           (fileloop-next-file novisit))
> +          (file-error
> +           (unless
> +               (and (equal (caddr err) "Can't decrypt")
> +                    (y-or-n-p (substitute-quotes
> +                               (format "Couldn't decrypt `%s'; skip it?"
> +                                       (abbreviate-file-name new)))))
> +             (signal (car err) (cdr err))))))
>        new)))

The (equal (caddr err) "Can't decrypt") is rather hideous and brittle,
especially given that `fileloop` is a generic operation that shouldn't
know about EPA.

How 'bout we just prompt for all `file-error`s?  After all, the same
kind of reasoning applies to invalid .gz files, or files for which we
don't have read access, ...

        Stefan