 used as the TASK for the beginning and end messages
 respectively. (Either the car or cdr, or both, can be nil.) See
 also `straight--progress-begin' and `straight--progress-end'."
-  (declare (indent 1))
+  (declare (indent 1) (debug t))
   (let ((task-sym (make-symbol "gensym--task"))
         (task-car-sym (make-symbol "gensym--task-car"))
         (task-cdr-sym (make-symbol "gensym--task-cdr")))

PROPS is a list of symbols. Each one is converted to a keyword
and then its value is looked up in the PLIST and bound to the
symbol for the duration of BODY."
  (declare (indent 2))
  (let ((plist-sym (make-symbol "plist")))
    `(let* ((,plist-sym ,plist)
            ,@(mapcar (lambda (prop)


(defmacro straight-transaction (&rest body)
  "Eval BODY within transaction. Return value is result of last form in BODY."
  (declare (indent defun) (debug t))
  `(progn
     (straight-begin-transaction)
     (unwind-protect (progn ,@body)
