                 (plist ()))
             (cl-destructuring-bind (name . melpa-plist) melpa-recipe
               (straight--put plist :type 'git)
-              (when-let ((files (plist-get melpa-plist :files)))
+              (when-let* ((files (plist-get melpa-plist :files)))
                 (straight--put plist :files files))
               (pcase (plist-get melpa-plist :fetcher)
                 (`git (straight--put plist :repo (plist-get melpa-plist :url)))

                                 (,p ,(funcall setter
                                               `(delq ,p ,getter)))))))))))))))



    ;; Definition from Emacs 25.3, subr-x.el
    (defmacro if-let (bindings then &rest else)
      "Process BINDINGS and if all values are non-nil eval THEN, else ELSE.
Argument BINDINGS is a list of tuples whose car is a symbol to be
bound and (optionally) used in THEN, and its cadr is a sexp to be
evalled to set symbol's value.  In the special case you only want
to bind a single value, BINDINGS can just be a plain tuple."
      (declare (indent 2)
               (debug ([&or (&rest (symbolp form)) (symbolp form)] form body)))
      (when (and (<= (length bindings) 2)
                 (not (listp (car bindings))))
        ;; Adjust the single binding case
        (setq bindings (list bindings)))
      `(let* ,(internal--build-bindings bindings)
         (if ,(car (internal--listify (car (last bindings))))
             ,then
           ,@else)))

    ;; Definition from Emacs 25.3, subr-x.el
    (defmacro when-let (bindings &rest body)
      "Process BINDINGS and if all values are non-nil eval BODY.
Argument BINDINGS is a list of tuples whose car is a symbol to be
bound and (optionally) used in BODY, and its cadr is a sexp to be
evalled to set symbol's value.  In the special case you only want
to bind a single value, BINDINGS can just be a plain tuple."
      (declare (indent 1) (debug if-let))
      (list 'if-let bindings (macroexp-progn body)))))

;; Definitions needed both at compile time and at runtime.
(eval-and-compile

    ;; Step 1 is to check if the given recipe conflicts with an
    ;; existing recipe for a *different* package with the *same*
    ;; repository.
    (when-let* ((existing-recipe (gethash local-repo straight--repo-cache)))
      ;; Avoid signalling two warnings when you change the recipe for
      ;; a single package. We already get a warning down below in Step
      ;; 2, no need to show another one here. Only signal a warning
