 cache and versions lockfile; and getting a list of all packages
 in use.")
 
-(defun straight--convert-recipe (melpa-style-recipe)
+(defun straight--convert-recipe (melpa-style-recipe &optional cause)
   "Convert a MELPA-STYLE-RECIPE to a normalized straight.el recipe.
 MELPA, GNU ELPA, and EmacsMirror may be cloned and searched for
 recipes if the MELPA-STYLE-RECIPE is just a package name;

          (error nil))
      (read (current-buffer)))))

(defun straight--get-emacsmirror-recipe (package)
  "Look up a PACKAGE recipe in EmacsMirror.
PACKAGE should be a symbol. If the package is available from
EmacsMirror, return a MELPA-style recipe; otherwise return nil.
If EmacsMirror is not available, clone it automatically before
looking up the recipe."
  (unless (straight--repository-is-available-p emacsmirror-recipe)
    (straight--clone-repository emacsmirror-recipe
                                `(:package ,(symbol-name package))
                                "looking for"))
  (straight--with-plist emacsmirror-recipe
      (local-repo)
    (let ((default-directory (straight--dir "repos" local-repo)))

;; infinite recursion, but it isn't -- remember that the recipe
;; repositories are only consulted by `straight--convert-recipe' in
;; the case that the MELPA-style recipe is provided as just a package
;; name (instead of a list). Note that there's no reason to provide a
;; `cause', since no messages should be printed.

(setq melpa-recipe (straight--convert-recipe
                    '(melpa :fetcher github
