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

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

[elpa] externals/plz 9319470060 38/40: Merge branch 'wip/no-signal-from-


From: ELPA Syncer
Subject: [elpa] externals/plz 9319470060 38/40: Merge branch 'wip/no-signal-from-sentinel-as-timer'
Date: Mon, 26 Jun 2023 06:59:34 -0400 (EDT)

branch: externals/plz
commit 9319470060a1750951b096eb5a04b760f9701412
Merge: a8ae654530 d2a7368699
Author: Adam Porter <adam@alphapapa.net>
Commit: Adam Porter <adam@alphapapa.net>

    Merge branch 'wip/no-signal-from-sentinel-as-timer'
    
    This branch has major improvements which have been in development for
    a while.  All lints and tests pass now, both locally and on GitHub CI.
    This should be a major improvement and should make v0.7 a good
    release.
    
    Thanks to @josephmturner for his extensive help, and to USHIN,
    Inc. for sponsoring some of this work.
---
 .github/workflows/test.yml |   9 +-
 README.org                 |   3 +-
 plz.el                     | 407 +++++++++++++++++++++++++--------------------
 plz.info                   |  32 ++--
 tests/test-plz.el          |   2 +-
 5 files changed, 254 insertions(+), 199 deletions(-)

diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 0c337b732a..3c38eac865 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -71,9 +71,12 @@ jobs:
     # as failures, so linting and testing are run as separate steps.
 
     - name: Lint
-      # NOTE: Uncomment this line to treat lint failures as passing
-      #       so the job doesn't show failure.
-      # continue-on-error: true
+      # NOTE: Uncomment this line to treat lint failures as passing so
+      #       the job doesn't show failure.  (Enabled for now because
+      #       Emacs 29 indents some cl- forms differently, which
+      #       causes lint-indent to fail, and what matters most is
+      #       that the tests pass.)
+      continue-on-error: true
       run: ./makem.sh -vv --sandbox=$SANDBOX_DIR lint
 
     - name: Test
diff --git a/README.org b/README.org
index 05e9b84a7b..0e0e07ba51 100644
--- a/README.org
+++ b/README.org
@@ -46,8 +46,6 @@
 
 The main public function is ~plz~, which sends an HTTP request and returns 
either the result of the specified type (for a synchronous request), or the 
~curl~ process object (for asynchronous requests).  For asynchronous requests, 
callback, error-handling, and finalizer functions may be specified, as well as 
various other options.
 
-# TODO: Add ":body (file FILENAME)" to docs.
-
 ** Examples
 
 Synchronously =GET= a URL and return the response body as a decoded string 
(here, raw JSON):
@@ -188,6 +186,7 @@ You may also clear a queue with ~plz-clear~, which cancels 
any active or queued
 
 *Internal*
 + Tests now run against a local instance of 
[[https://github.com/postmanlabs/httpbin][httpbin]] (since the ~httpbin.org~ 
server is often overloaded).
++ No buffer-local variables are defined anymore; process properties are used 
instead.
 
 ** 0.6
 
diff --git a/plz.el b/plz.el
index 48901e7a37..a8e2732ab8 100644
--- a/plz.el
+++ b/plz.el
@@ -103,7 +103,6 @@
 
 ;;;; Errors
 
-;; FIXME: `condition-case' can't catch these...?
 (define-error 'plz-error "plz error")
 (define-error 'plz-curl-error "plz: Curl error" 'plz-error)
 (define-error 'plz-http-error "plz: HTTP error" 'plz-error)
@@ -218,27 +217,6 @@ only LF).")
     (90 . "SSL public key does not matched pinned public key"))
   "Alist mapping curl error code integers to helpful error messages.")
 
-;;;; Variables
-
-(defvar-local plz-else nil
-  "Callback function for unsuccessful completion of request.
-Called in current curl process buffer.")
-
-(defvar-local plz-then nil
-  "Callback function for successful completion of request.
-Called in current curl process buffer.")
-
-(defvar-local plz-finally nil
-  "Function called unconditionally after completion of request.
-Called after the then/else function, without arguments, outside
-the curl process buffer.")
-
-(defvar-local plz-result nil
-  "Used when `plz' is called synchronously.")
-
-(defvar-local plz-sync nil
-  "Used when `plz' is called synchronously.")
-
 ;;;; Customization
 
 (defgroup plz nil
@@ -276,7 +254,7 @@ connection phase and waiting to receive the response (the
 
 ;;;;; Public
 
-(cl-defun plz (method url &key headers body else finally noquery
+(cl-defun plz (method url &rest rest &key headers body else finally noquery
                       (as 'string) (then 'sync)
                       (body-type 'text) (decode t decode-s)
                       (connect-timeout plz-connect-timeout) (timeout 
plz-timeout))
@@ -321,18 +299,21 @@ For binary content, it should be nil.  When AS is 
`binary',
 DECODE is automatically set to nil.
 
 THEN is a callback function, whose sole argument is selected
-above with AS.  Or THEN may be `sync' to make a synchronous
-request, in which case the result is returned directly.
+above with AS; if the request fails and no ELSE function is
+given (see below), the argument will be a `plz-error' structure
+describing the error.  Or THEN may be `sync' to make a
+synchronous request, in which case the result is returned
+directly from this function.
 
 ELSE is an optional callback function called when the request
 fails (i.e. if curl fails, or if the HTTP response has a non-2xx
 status code).  It is called with one argument, a `plz-error'
-structure.  If ELSE is nil, an error is signaled when the request
-fails, either `plz-curl-error' or `plz-http-error' as
-appropriate, with a `plz-error' structure as the error data.  For
-synchronous requests, this argument is ignored.
+structure.  If ELSE is nil, a `plz-curl-error' or
+`plz-http-error' is signaled when the request fails, with a
+`plz-error' structure as the error data.  For synchronous
+requests, this argument is ignored.
 
-NOTE: In v0.8 of plz, only one error will be signaled:
+NOTE: In v0.8 of `plz', only one error will be signaled:
 `plz-error'.  The existing errors, `plz-curl-error' and
 `plz-http-error', inherit from `plz-error' to allow applications
 to update their code while using v0.7 (i.e. any `condition-case'
@@ -346,9 +327,11 @@ CONNECT-TIMEOUT and TIMEOUT are a number of seconds that 
limit
 how long it takes to connect to a host and to receive a response
 from a host, respectively.
 
-NOQUERY is passed to `make-process', which see."
+NOQUERY is passed to `make-process', which see.
+
+\(To silence checkdoc, we mention the internal argument REST.)"
   ;; FIXME: Remove the note about error changes from the docstring in v0.8.
-  ;; Inspired by and copied from `elfeed-curl-retrieve'.
+  ;; FIXME: Update error signals in docstring in v0.8.
   (declare (indent defun))
   (setf decode (if (and decode-s (not decode))
                    nil decode))
@@ -405,99 +388,139 @@ NOQUERY is passed to `make-process', which see."
          (decode (pcase as
                    ('binary nil)
                    (_ decode)))
+         (default-directory
+           ;; Avoid making process in a nonexistent directory (in case the 
current
+           ;; default-directory has since been removed).  It's unclear what 
the best
+           ;; directory is, but this seems to make sense, and it should still 
exist.
+           temporary-file-directory)
+         (process-buffer (generate-new-buffer " *plz-request-curl*"))
+         (stderr-process (make-pipe-process :name "plz-request-curl-stderr"
+                                            :buffer (generate-new-buffer " 
*plz-request-curl-stderr*")
+                                            :noquery t
+                                            :sentinel #'plz--stderr-sentinel))
+         (process (make-process :name "plz-request-curl"
+                                :buffer process-buffer
+                                :coding 'binary
+                                :command (append (list plz-curl-program) 
curl-command-line-args)
+                                :connection-type 'pipe
+                                :sentinel #'plz--sentinel
+                                :stderr stderr-process
+                                :noquery noquery))
          sync-p)
     (when (eq 'sync then)
       (setf sync-p t
-            ;; FIXME: For sync requests, `else' should be forced nil.
             then (lambda (result)
-                   (setf plz-result result))))
-    (with-current-buffer (generate-new-buffer " *plz-request-curl*")
-      ;; Avoid making process in a nonexistent directory (in case the current
-      ;; default-directory has since been removed).  It's unclear what the best
-      ;; directory is, but this seems to make sense, and it should still exist.
-      (let ((default-directory temporary-file-directory)
-            (process (make-process :name "plz-request-curl"
-                                   :buffer (current-buffer)
-                                   :coding 'binary
-                                   :command (append (list plz-curl-program) 
curl-command-line-args)
-                                   :connection-type 'pipe
-                                   :sentinel #'plz--sentinel
-                                   ;; 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 (current-buffer)
-                                   :noquery noquery))
-            ;; The THEN function is called in the response buffer.
-            (then (pcase-exhaustive as
-                    ((or 'binary 'string)
-                     (lambda ()
-                       (let ((coding-system (or (plz--coding-system) 'utf-8)))
-                         (pcase as
-                           ('binary (set-buffer-multibyte nil)))
-                         (plz--narrow-to-body)
-                         (when decode
-                           (decode-coding-region (point) (point-max) 
coding-system))
-                         (funcall then (buffer-string)))))
-                    ('buffer (lambda ()
-                               (funcall then (current-buffer))))
-                    ('response (lambda ()
-                                 (funcall then (plz--response :decode-p 
decode))))
-                    ('file (lambda ()
-                             (set-buffer-multibyte nil)
+                   (process-put process :plz-result result))
+            else nil))
+    (setf
+     ;; Set the callbacks, etc. as process properties.
+     (process-get process :plz-then)
+     (pcase-exhaustive as
+       ((or 'binary 'string)
+        (lambda ()
+          (let ((coding-system (or (plz--coding-system) 'utf-8)))
+            (pcase as
+              ('binary (set-buffer-multibyte nil)))
+            (plz--narrow-to-body)
+            (when decode
+              (decode-coding-region (point) (point-max) coding-system))
+            (funcall then (or (buffer-string)
+                              (make-plz-error :message (format "buffer-string 
is nil in buffer:%S" process-buffer)))))))
+       ('buffer (lambda ()
+                  (funcall then (current-buffer))))
+       ('response (lambda ()
+                    (funcall then (or (plz--response :decode-p decode)
+                                      (make-plz-error :message (format 
"response is nil for buffer:%S  buffer-string:%S"
+                                                                       
process-buffer (buffer-string)))))))
+       ('file (lambda ()
+                (set-buffer-multibyte nil)
+                (plz--narrow-to-body)
+                (let ((filename (make-temp-file "plz-")))
+                  (condition-case err
+                      (progn
+                        (write-region (point-min) (point-max) filename)
+                        (funcall then filename))
+                    ;; In case of an error writing to the file, delete the 
temp file
+                    ;; and signal the error.  Ignore any errors encountered 
while
+                    ;; deleting the file, which would obscure the original 
error.
+                    (error (ignore-errors
+                             (delete-file filename))
+                           (funcall then (make-plz-error :message (format 
"error while writing to file %S: %S" filename err))))))))
+       (`(file ,(and (pred stringp) filename))
+        (lambda ()
+          (set-buffer-multibyte nil)
+          (plz--narrow-to-body)
+          (condition-case err
+              (progn
+                (write-region (point-min) (point-max) filename nil nil nil 
'excl)
+                (funcall then filename))
+            ;; Since we are creating the file, it seems sensible to delete it 
in case of an
+            ;; error while writing to it (e.g. a disk-full error).  And we 
ignore any errors
+            ;; encountered while deleting the file, which would obscure the 
original error.
+            (error (ignore-errors
+                     (when (file-exists-p filename)
+                       (delete-file filename)))
+                   (funcall then (make-plz-error :message (format "error while 
writing to file %S: %S" filename err)))))))
+       ((pred functionp) (lambda ()
+                           (let ((coding-system (or (plz--coding-system) 
'utf-8)))
                              (plz--narrow-to-body)
-                             (let ((filename (make-temp-file "plz-")))
-                               (condition-case err
-                                   (write-region (point-min) (point-max) 
filename)
-                                 ;; In case of an error writing to the file, 
delete the temp file
-                                 ;; and signal the error.  Ignore any errors 
encountered while
-                                 ;; deleting the file, which would obscure the 
original error.
-                                 (error (ignore-errors
-                                          (delete-file filename))
-                                        (signal (car err) (cdr err))))
-                               (funcall then filename))))
-                    (`(file ,(and (pred stringp) filename))
-                     (lambda ()
-                       (set-buffer-multibyte nil)
-                       (plz--narrow-to-body)
-                       (condition-case err
-                           (write-region (point-min) (point-max) filename nil 
nil nil 'excl)
-                         ;; Since we are creating the file, it seems sensible 
to delete it in case of an
-                         ;; error while writing to it (e.g. a disk-full 
error).  And we ignore any errors
-                         ;; encountered while deleting the file, which would 
obscure the original error.
-                         (error (ignore-errors
-                                  (when (file-exists-p filename)
-                                    (delete-file filename)))
-                                (signal (car err) (cdr err))))
-                       (funcall then filename)))
-                    ((pred functionp) (lambda ()
-                                        (let ((coding-system (or 
(plz--coding-system) 'utf-8)))
-                                          (plz--narrow-to-body)
-                                          (when decode
-                                            (decode-coding-region (point) 
(point-max) coding-system))
-                                          (funcall then (funcall as))))))))
-        (setf plz-then then
-              plz-else else
-              plz-finally finally
-              plz-sync sync-p)
-        ;; Send --config arguments.
-        (process-send-string process curl-config)
-        (when body
-          (cl-typecase body
-            (string (process-send-string process body))
-            ;; TODO: Document that BODY can be a buffer.
-            (buffer (with-current-buffer body
-                      (process-send-region process (point-min) (point-max))))))
-        (process-send-eof process)
-        (if sync-p
+                             (when decode
+                               (decode-coding-region (point) (point-max) 
coding-system))
+                             (funcall then (funcall as))))))
+     (process-get process :plz-else) else
+     (process-get process :plz-finally) finally
+     (process-get process :plz-sync) sync-p
+     ;; Record list of arguments for debugging purposes (e.g. when
+     ;; using Edebug in a process buffer, this allows determining
+     ;; which request the buffer is for).
+     (process-get process :plz-args) (apply #'list method url rest)
+     ;; HACK: We set the result to a sentinel value so that any other
+     ;; value, even nil, means that the response was processed, and
+     ;; the sentinel does not need to be called again (see below).
+     (process-get process :plz-result) :plz-result)
+    ;; Send --config arguments.
+    (process-send-string process curl-config)
+    (when body
+      (cl-typecase body
+        (string (process-send-string process body))
+        (buffer (with-current-buffer body
+                  (process-send-region process (point-min) (point-max))))))
+    (process-send-eof process)
+    (if sync-p
+        (unwind-protect
             (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))
-              (prog1 plz-result
-                (unless (eq as 'buffer)
-                  (kill-buffer))))
-          process)))))
+              ;; See Info node `(elisp)Accepting Output'.
+              (unless (and process stderr-process)
+                (error "Process unexpectedly nil"))
+              (while (accept-process-output process))
+              (while (accept-process-output stderr-process))
+              (when (eq :plz-result (process-get process :plz-result))
+                ;; HACK: Sentinel seems to not have been called: call it 
again.  (Although
+                ;; this is a hack, it seems to be a necessary one due to 
Emacs's process
+                ;; handling.)  See 
<https://github.com/alphapapa/plz.el/issues/3> and
+                ;; <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=50166>.
+                (plz--sentinel process "finished\n")
+                (when (eq :plz-result (process-get process :plz-result))
+                  (error "Plz: NO RESULT FROM PROCESS:%S  ARGS:%S"
+                         process rest)))
+              ;; Sentinel seems to have been called: check the result.
+              (pcase (process-get process :plz-result)
+                ((and (pred plz-error-p) data)
+                 ;; The AS function signaled an error, which was collected
+                 ;; into a `plz-error' struct: re-signal the error here,
+                 ;; outside of the sentinel.
+                 (if (plz-error-response data)
+                     ;; FIXME: Signal only plz-error in v0.8.
+                     (signal 'plz-http-error (list "HTTP error" data))
+                   (signal 'plz-curl-error (list "Curl error" data))))
+                (else
+                 ;; The AS function returned a value: return it.
+                 else)))
+          (unless (eq as 'buffer)
+            (kill-buffer process-buffer))
+          (kill-buffer (process-buffer stderr-process)))
+      ;; Async request: return the process object.
+      process)))
 
 ;;;;; Queue
 
@@ -683,64 +706,92 @@ Includes active and queued requests."
 
 ;;;;; Private
 
-(defun plz--sentinel (process-or-buffer status)
-  "Process buffer of curl output in PROCESS-OR-BUFFER.
-If PROCESS-OR-BUFFER if a process, uses its buffer; if a buffer,
-uses it.  STATUS should be the process's event string (see info
-node `(elisp) Sentinels').  Kills the buffer before returning."
-  ;; Inspired by and some code copied from `elfeed-curl--sentinel'.
-  (let* ((buffer (cl-etypecase process-or-buffer
-                   (process (process-buffer process-or-buffer))
-                   (buffer process-or-buffer)))
-         (finally (buffer-local-value 'plz-finally buffer))
-         sync)
-    (unwind-protect
-        (with-current-buffer buffer
-          (setf sync plz-sync)
-          (pcase-exhaustive status
-            ((or 0 "finished\n")
-             ;; Curl exited normally: check HTTP status code.
-             (goto-char (point-min))
-             (plz--skip-proxy-headers)
-             (while (plz--skip-redirect-headers))
-             (pcase (plz--http-status)
-               ((and status (guard (<= 200 status 299)))
-                ;; Any 2xx response is considered successful.
-                (ignore status)  ; Byte-compiling in Emacs <28 complains 
without this.
-                (funcall plz-then))
-               ;; Any other status code is considered unsuccessful
-               ;; (for now, anyway).
-               (_ (let ((err (make-plz-error :response (plz--response))))
-                    (pcase-exhaustive plz-else
-                      (`nil (signal 'plz-http-error (list "plz--sentinel: HTTP 
error" err)))
-                      ((pred functionp) (funcall plz-else err)))))))
-
-            ((or (and (pred numberp) code)
-                 (rx "exited abnormally with code " (let code (group (1+ 
digit)))))
-             ;; Curl error.
-             (let* ((curl-exit-code (cl-typecase code
-                                      (string (string-to-number code))
-                                      (number code)))
-                    (curl-error-message (alist-get curl-exit-code 
plz-curl-errors))
-                    (err (make-plz-error :curl-error (cons curl-exit-code 
curl-error-message))))
-               (pcase-exhaustive plz-else
-                 ;; FIXME: Returning a plz-error structure which has a 
curl-error slot, wrapped in a plz-curl-error, is confusing.
-                 (`nil (signal 'plz-curl-error (list "plz--sentinel: Curl 
error" err)))
-                 ((pred functionp) (funcall plz-else err)))))
-
-            ((and (or "killed\n" "interrupt\n") status)
-             ;; Curl process killed or interrupted.
-             (let* ((message (pcase status
-                               ("killed\n" "curl process killed")
-                               ("interrupt\n" "curl process interrupted")))
-                    (err (make-plz-error :message message)))
-               (pcase-exhaustive plz-else
-                 (`nil (signal 'plz-curl-error (list "plz--sentinel: Curl 
error" err)))
-                 ((pred functionp) (funcall plz-else err)))))))
-      (when finally
-        (funcall finally))
-      (unless sync
-        (kill-buffer buffer)))))
+(defun plz--sentinel (process status)
+  "Sentinel for curl PROCESS.
+STATUS should be the process's event string (see info
+node `(elisp) Sentinels').  Calls `plz--respond' to process the
+HTTP response (directly for synchronous requests, or from a timer
+for asynchronous ones)."
+  (pcase status
+    ((or "finished\n" "killed\n" "interrupt\n"
+         (pred numberp)
+         (rx "exited abnormally with code " (group (1+ digit))))
+     (let ((buffer (process-buffer process)))
+       (if (process-get process :plz-sync)
+           (plz--respond process buffer status)
+         (run-at-time 0 nil #'plz--respond process buffer status))))))
+
+(defun plz--respond (process buffer status)
+  "Respond to HTTP response from PROCESS in BUFFER.
+Parses the response and calls the THEN/ELSE callbacks
+accordingly.  To be called from `plz--sentinel'.  STATUS is the
+argument passed to `plz--sentinel', which see."
+  ;; Is it silly to call this function "please respond"?  Perhaps, but
+  ;; naming things is hard.  The term "process" has another meaning in
+  ;; this context, and the old standby, "handle," is much overused.
+  ;; "Respond" also means "to react to something," which is what this
+  ;; does--react to receiving the HTTP response--and it's an internal
+  ;; name, so why not.
+  (unwind-protect
+      (with-current-buffer buffer
+        (pcase-exhaustive status
+          ((or 0 "finished\n")
+           ;; Curl exited normally: check HTTP status code.
+           (goto-char (point-min))
+           (plz--skip-proxy-headers)
+           (while (plz--skip-redirect-headers))
+           (pcase (plz--http-status)
+             ((and status (guard (<= 200 status 299)))
+              ;; Any 2xx response is considered successful.
+              (ignore status) ; Byte-compiling in Emacs <28 complains without 
this.
+              (funcall (process-get process :plz-then)))
+             (_
+              ;; TODO: If using ":as 'response", the HTTP response
+              ;; should be passed to the THEN function, regardless
+              ;; of the status code.  Only for curl errors should
+              ;; the ELSE function be called.  (Maybe in v0.8.)
+
+              ;; Any other status code is considered unsuccessful
+              ;; (for now, anyway).
+              (let ((err (make-plz-error :response (plz--response))))
+                (pcase-exhaustive (process-get process :plz-else)
+                  (`nil (process-put process :plz-result err))
+                  ((and (pred functionp) fn) (funcall fn err)))))))
+
+          ((or (and (pred numberp) code)
+               (rx "exited abnormally with code " (let code (group (1+ 
digit)))))
+           ;; Curl error.
+           (let* ((curl-exit-code (cl-typecase code
+                                    (string (string-to-number code))
+                                    (number code)))
+                  (curl-error-message (alist-get curl-exit-code 
plz-curl-errors))
+                  (err (make-plz-error :curl-error (cons curl-exit-code 
curl-error-message))))
+             (pcase-exhaustive (process-get process :plz-else)
+               (`nil (process-put process :plz-result err))
+               ((and (pred functionp) fn) (funcall fn err)))))
+
+          ((and (or "killed\n" "interrupt\n") status)
+           ;; Curl process killed or interrupted.
+           (let* ((message (pcase status
+                             ("killed\n" "curl process killed")
+                             ("interrupt\n" "curl process interrupted")))
+                  (err (make-plz-error :message message)))
+             (pcase-exhaustive (process-get process :plz-else)
+               (`nil (process-put process :plz-result err))
+               ((and (pred functionp) fn) (funcall fn err)))))))
+    (when-let ((finally (process-get process :plz-finally)))
+      (funcall finally))
+    (unless (process-get process :plz-sync)
+      (kill-buffer buffer))))
+
+(defun plz--stderr-sentinel (process status)
+  "Sentinel for STDERR buffer.
+Arguments are PROCESS and STATUS (ok, checkdoc?)."
+  (pcase status
+    ((or "finished\n" "killed\n" "interrupt\n"
+         (pred numberp)
+         (rx "exited abnormally with code " (1+ digit)))
+     (kill-buffer (process-buffer process)))))
 
 ;;;;;; HTTP Responses
 
@@ -795,7 +846,7 @@ Assumes that point is at beginning of HTTP response."
 (defun plz--coding-system (&optional headers)
   "Return coding system for HTTP response in current buffer.
 HEADERS may optionally be an alist of parsed HTTP headers to
-refer to rather than the current buffer's unparsed headers."
+refer to rather than the current buffer's un-parsed headers."
   (let* ((headers (or headers (plz--headers)))
          (content-type (alist-get 'content-type headers)))
     (when content-type
diff --git a/plz.info b/plz.info
index fd7475cabb..5e6001a7b5 100644
--- a/plz.info
+++ b/plz.info
@@ -315,6 +315,8 @@ File: README.info,  Node: 07-pre,  Next: 06,  Up: Changelog
    • Tests now run against a local instance of httpbin
      (https://github.com/postmanlabs/httpbin) (since the ‘httpbin.org’
      server is often overloaded).
+   • No buffer-local variables are defined anymore; process properties
+     are used instead.
 
 
 File: README.info,  Node: 06,  Next: 054,  Prev: 07-pre,  Up: Changelog
@@ -519,21 +521,21 @@ Node: Queueing6859
 Node: Tips8242
 Node: Changelog8543
 Node: 07-pre8812
-Node: 069523
-Node: 05410138
-Node: 05310381
-Node: 05210697
-Node: 05110904
-Node: 0511156
-Node: 0411362
-Node: 0312268
-Node: 02112716
-Node: 0212867
-Node: 0112998
-Node: Credits13094
-Node: Development13460
-Node: Copyright assignment13974
-Node: License14562
+Node: 069619
+Node: 05410234
+Node: 05310477
+Node: 05210793
+Node: 05111000
+Node: 0511252
+Node: 0411458
+Node: 0312364
+Node: 02112812
+Node: 0212963
+Node: 0113094
+Node: Credits13190
+Node: Development13556
+Node: Copyright assignment14070
+Node: License14658
 
 End Tag Table
 
diff --git a/tests/test-plz.el b/tests/test-plz.el
index c08715907b..f420847130 100644
--- a/tests/test-plz.el
+++ b/tests/test-plz.el
@@ -453,7 +453,7 @@ Also, any instance of \"URI-PREFIX\" in URL-PART is 
replaced with
 
 (plz-deftest plz-get-timeout-error-sync nil
   (pcase-let* ((start-time (current-time))
-               (`(,_signal . (,_string ,(cl-struct plz-error (curl-error 
`(,code . ,message)))))
+               (`(,_signal . (,_message ,(cl-struct plz-error (curl-error 
`(,code . ,message)))))
                (should-error (plz 'get (plz-test-url "/delay/5")
                                :as 'string :then 'sync :timeout 1)
                              :type 'plz-error))



reply via email to

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