emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/plz 797963c035 02/40: WIP: Use separate buffer for STDE


From: ELPA Syncer
Subject: [elpa] externals/plz 797963c035 02/40: WIP: Use separate buffer for STDERR
Date: Mon, 26 Jun 2023 06:59:31 -0400 (EDT)

branch: externals/plz
commit 797963c0359ada41e9d8bb206bc27f4031427c61
Author: Adam Porter <adam@alphapapa.net>
Commit: Adam Porter <adam@alphapapa.net>

    WIP: Use separate buffer for STDERR
---
 plz.el | 46 +++++++++++++++++++++++++---------------------
 1 file changed, 25 insertions(+), 21 deletions(-)

diff --git a/plz.el b/plz.el
index 40c35050e7..232823e6f9 100644
--- a/plz.el
+++ b/plz.el
@@ -407,6 +407,7 @@ NOQUERY is passed to `make-process', which see."
                    (_ decode)))
          (default-directory temporary-file-directory)
          (process-buffer (generate-new-buffer " *plz-request-curl*"))
+         (stderr-buffer (generate-new-buffer " *plz-request-curl-stderr*"))
          (process (make-process :name "plz-request-curl"
                                 :buffer process-buffer
                                 :coding 'binary
@@ -416,7 +417,7 @@ NOQUERY is passed to `make-process', which see."
                                 ;; FIXME: Set the stderr process sentinel to 
ignore to prevent
                                 ;; "process finished" garbage in the buffer 
(response body).  See:
                                 ;; 
<https://stackoverflow.com/questions/42810755/how-to-remove-process-finished-message-from-make-process-or-start-process-in-e>.
-                                :stderr process-buffer
+                                :stderr stderr-buffer
                                 :noquery noquery))
          sync-p)
     (when (eq 'sync then)
@@ -499,26 +500,29 @@ NOQUERY is passed to `make-process', which see."
                       (process-send-region process (point-min) (point-max))))))
         (process-send-eof process)
         (if sync-p
-            (progn
-              (while
-                  ;; According to the Elisp manual, blocking on a process's
-                  ;; output is really this simple.  And it seems to work.
-                  (accept-process-output process))
-              (unless (process-get process :plz-result)
-                (plz--sentinel process "finished\n")
-                (unless (process-get process :plz-result)
-                  (error "NO RESULT FROM PROCESS:%S  BUFFER-STRING:%S" process
-                         (buffer-string))))
-              (pcase (process-get process :plz-result)
-                ((pred plz-error-p)
-                 ;; FIXME: ...signal correct error  type
-                 (if plz-else
-                     (funcall plz-else (process-get process :plz-result))
-                   (signal 'plz-http-error (process-get process :plz-result))))
-                (_                 
-                 (prog1 (process-get process :plz-result) ;; plz-result
-                   (unless (eq as 'buffer)
-                     (kill-buffer))))))
+            (unwind-protect
+                (progn
+                  ;; See Info node `(elisp)Accepting Output'.
+                  (unless (and process (get-buffer-process stderr-buffer))
+                    (error "Process unexpectedly nil"))
+                  (while (accept-process-output process))
+                  (while (accept-process-output (get-buffer-process 
stderr-buffer)))
+                  (unless (process-get process :plz-result)
+                    (plz--sentinel process "finished\n")
+                    (unless (process-get process :plz-result)
+                      (error "NO RESULT FROM PROCESS:%S  BUFFER-STRING:%S" 
process
+                             (buffer-string))))
+                  (pcase (process-get process :plz-result)
+                    ((pred plz-error-p)
+                     ;; FIXME: ...signal correct error  type
+                     (if plz-else
+                         (funcall plz-else (process-get process :plz-result))
+                       (signal 'plz-http-error (process-get process 
:plz-result))))
+                    (_
+                     (process-get process :plz-result))))
+              (unless (eq as 'buffer)
+                (kill-buffer process-buffer))
+              (kill-buffer stderr-buffer))
           process)))))
 
 ;;;;; Queue



reply via email to

[Prev in Thread] Current Thread [Next in Thread]