branch: elpa/hyperdrive
commit 28d296022252bf6ab7fdaf8e5a845e0f556c5f4a
Author: Joseph Turner <jos...@ushin.org>
Commit: Joseph Turner <jos...@ushin.org>

    Change: (he/api) Always use :body-type 'binary
    
    :body-type 'binary causes plz to pass the PUT request body to curl
    with --data-binary as opposed to --data.  With --data, curl strips
    carriage returns and newlines from body content, but with
    --data-binary, body content is left as-is.
    
    This commit does not change any behavior since all PUT requests either
    already used :body-type 'binary or they had :body `(file FILENAME).
---
 hyperdrive-dir.el |  2 +-
 hyperdrive-lib.el | 12 +++++++-----
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/hyperdrive-dir.el b/hyperdrive-dir.el
index a023674bb2..f11458e722 100644
--- a/hyperdrive-dir.el
+++ b/hyperdrive-dir.el
@@ -390,7 +390,7 @@ see Info node `(elisp)Yanking Media'."
                     (h//entry-directory-p h/current-entry)))
     (let ((entry (h/read-entry (h//context-hyperdrive :predicate #'h/writablep)
                                :latest-version t)))
-      (he/api 'put entry :body image :body-type 'binary
+      (he/api 'put entry :body image
         ;; TODO: Pass MIME type in a header? hyper-gateway detects it for us.
         :then (lambda (_res) (h/open entry))
         :else (lambda (plz-error)
diff --git a/hyperdrive-lib.el b/hyperdrive-lib.el
index d811f9492c..d57da517e7 100644
--- a/hyperdrive-lib.el
+++ b/hyperdrive-lib.el
@@ -210,13 +210,17 @@ to the gateway which do not involve an entry.  Otherwise, 
use
 (defun he/api (method entry &rest rest)
   "Make hyperdrive API request by METHOD for ENTRY.
 REST is passed to `hyperdrive-api', which see.  AS keyword should
-be nil, because it is always set to `response'.  Automatically
-calls `hyperdrive-entry--api-then' to update metadata from the
-response."
+be nil, because it is always set to `response'.  BODY-TYPE
+keyword should be nil, because it is always set to `binary'.
+Automatically calls `hyperdrive-entry--api-then' to update
+metadata from the response."
   (declare (indent defun))
   ;; Always use :as 'response
   (cl-assert (null (plist-get rest :as)))
   (setf (plist-get rest :as) 'response)
+  ;; Always use :body-type 'binary so curl leaves carriage returns and 
newlines.
+  (cl-assert (null (plist-get rest :body-type)))
+  (setf (plist-get rest :body-type) 'binary)
   (unless (map-elt rest :then) (setf (map-elt rest :then) 'sync))
   (pcase-let* (((map :then) rest))
     (unless (eq 'sync then)
@@ -1020,8 +1024,6 @@ Call ELSE if request fails."
 THEN and ELSE are passed to `hyperdrive-entry-api', which see."
   (declare (indent defun))
   (he/api 'put entry
-    ;; TODO: Investigate whether we should use 'text body type for text 
buffers.
-    :body-type 'binary
     ;; TODO: plz accepts buffer as a body, we should refactor calls to h/write
     ;; to pass in a buffer instead of a buffer-string.
     :body body :then then :else else :queue queue))

Reply via email to