emacs: Improve error handling for notmuch-call-notmuch-json

This checks for non-zero exit status from JSON CLI calls and pops up
an error buffer with stderr and stdout.  A consequence of this is that
show and reply now handle errors, rather than ignoring them.
This commit is contained in:
Austin Clements 2012-12-15 15:04:17 -05:00 committed by David Bremner
parent 66c935cff3
commit e1d5e88156

View file

@ -375,15 +375,23 @@ contents of ERR-FILE will be included in the error message."
"Invoke `notmuch-command' with `args' and return the parsed JSON output. "Invoke `notmuch-command' with `args' and return the parsed JSON output.
The returned output will represent objects using property lists The returned output will represent objects using property lists
and arrays as lists." and arrays as lists. If notmuch exits with a non-zero status,
this will pop up a buffer containing notmuch's output and signal
an error."
(with-temp-buffer (with-temp-buffer
(apply #'call-process notmuch-command nil (list t nil) nil args) (let ((err-file (make-temp-file "nmerr")))
(goto-char (point-min)) (unwind-protect
(let ((json-object-type 'plist) (let ((status (apply #'call-process
(json-array-type 'list) notmuch-command nil (list t err-file) nil args)))
(json-false 'nil)) (notmuch-check-exit-status status (cons notmuch-command args)
(json-read)))) (buffer-string) err-file)
(goto-char (point-min))
(let ((json-object-type 'plist)
(json-array-type 'list)
(json-false 'nil))
(json-read)))
(delete-file err-file)))))
;; Compatibility functions for versions of emacs before emacs 23. ;; Compatibility functions for versions of emacs before emacs 23.
;; ;;