mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-12-26 10:49:33 +00:00
epg: Collect output lines sent to stderr
* epg.el (epg-context): Add new slot ERROR-OUTPUT. (epg-error-output): New buffer-local variable. (epg--start): Initialize epg-error-output. (epg--process-filter): Record output lines sent to stderr, in epg-error-output. (epg-wait-for-completion): Copy epg-error-output to ERROR-OUTPUT slot of context. * epa-file.el (epa-file-insert-file-contents): On error, display output sent to stderr. (epa-file-write-region): Likewise.
This commit is contained in:
parent
b6e66a5cc7
commit
5e28461482
@ -1,3 +1,16 @@
|
||||
2014-11-05 Daiki Ueno <ueno@gnu.org>
|
||||
|
||||
* epg.el (epg-context): Add new slot ERROR-OUTPUT.
|
||||
(epg-error-output): New buffer-local variable.
|
||||
(epg--start): Initialize epg-error-output.
|
||||
(epg--process-filter): Record output lines sent to stderr, in
|
||||
epg-error-output.
|
||||
(epg-wait-for-completion): Copy epg-error-output to ERROR-OUTPUT
|
||||
slot of context.
|
||||
* epa-file.el (epa-file-insert-file-contents): On error, display
|
||||
output sent to stderr.
|
||||
(epa-file-write-region): Likewise.
|
||||
|
||||
2014-11-05 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* jit-lock.el (jit-lock-stealth-fontify): Be tolerant to nil being
|
||||
|
@ -162,6 +162,11 @@ encryption is used."
|
||||
(add-hook 'find-file-not-found-functions
|
||||
'epa-file--find-file-not-found-function
|
||||
nil t))
|
||||
(if (epg-context-error-output context)
|
||||
(epa-display-info
|
||||
(concat (format "Error while executing \"%s\":\n\n"
|
||||
epg-gpg-program)
|
||||
(epg-context-error-output context))))
|
||||
(signal 'file-error
|
||||
(cons "Opening input file" (cdr error)))))
|
||||
(set-buffer buf) ;In case timer/filter changed/killed it (bug#16029)!
|
||||
@ -257,6 +262,11 @@ If no one is selected, symmetric encryption will be performed. "
|
||||
(error
|
||||
(if (setq entry (assoc file epa-file-passphrase-alist))
|
||||
(setcdr entry nil))
|
||||
(if (epg-context-error-output context)
|
||||
(epa-display-info
|
||||
(concat (format "Error while executing \"%s\":\n\n"
|
||||
epg-gpg-program)
|
||||
(epg-context-error-output context))))
|
||||
(signal 'file-error (cons "Opening output file" (cdr error)))))
|
||||
(epa-file-run-real-handler
|
||||
#'write-region
|
||||
|
22
lisp/epg.el
22
lisp/epg.el
@ -40,6 +40,7 @@
|
||||
(defvar epg-debug-buffer nil)
|
||||
(defvar epg-agent-file nil)
|
||||
(defvar epg-agent-mtime nil)
|
||||
(defvar epg-error-output nil)
|
||||
|
||||
;; from gnupg/include/cipher.h
|
||||
(defconst epg-cipher-algorithm-alist
|
||||
@ -210,7 +211,8 @@
|
||||
output-file
|
||||
result
|
||||
operation
|
||||
pinentry-mode)
|
||||
pinentry-mode
|
||||
error-output)
|
||||
|
||||
;; This is not an alias, just so we can mark it as autoloaded.
|
||||
;;;###autoload
|
||||
@ -639,7 +641,9 @@ callback data (if any)."
|
||||
(make-local-variable 'epg-agent-file)
|
||||
(setq epg-agent-file agent-file)
|
||||
(make-local-variable 'epg-agent-mtime)
|
||||
(setq epg-agent-mtime agent-mtime))
|
||||
(setq epg-agent-mtime agent-mtime)
|
||||
(make-local-variable 'epg-error-output)
|
||||
(setq epg-error-output nil))
|
||||
(with-file-modes 448
|
||||
(setq process (apply #'start-process "epg" buffer
|
||||
(epg-context-program context) args)))
|
||||
@ -673,7 +677,14 @@ callback data (if any)."
|
||||
(if (and symbol
|
||||
(fboundp symbol))
|
||||
(funcall symbol epg-context string))
|
||||
(setq epg-last-status (cons status string))))
|
||||
(setq epg-last-status (cons status string)))
|
||||
;; Record other lines sent to stderr. This assumes
|
||||
;; that the process-filter receives output only from
|
||||
;; stderr and the FD specified with --status-fd.
|
||||
(setq epg-error-output
|
||||
(cons (buffer-substring (point)
|
||||
(line-end-position))
|
||||
epg-error-output)))
|
||||
(forward-line)
|
||||
(setq epg-read-point (point)))))))))
|
||||
|
||||
@ -715,7 +726,10 @@ callback data (if any)."
|
||||
(redraw-frame))
|
||||
(epg-context-set-result-for
|
||||
context 'error
|
||||
(nreverse (epg-context-result-for context 'error))))
|
||||
(nreverse (epg-context-result-for context 'error)))
|
||||
(with-current-buffer (process-buffer (epg-context-process context))
|
||||
(setf (epg-context-error-output context)
|
||||
(mapconcat #'identity (nreverse epg-error-output) "\n"))))
|
||||
|
||||
(defun epg-reset (context)
|
||||
"Reset the CONTEXT."
|
||||
|
Loading…
Reference in New Issue
Block a user