   ;;    of code, you can specify your custom recipe in the first
   ;;    `use-package' declaration and then specify only `auctex' as
   ;;    the recipe in the second `use-package' declaration.
+  ;;
+  ;; 3. I'm using `straight-rebuild-package' or
+  ;;    `straight-rebuild-all', which both call `straight-use-package'
+  ;;    with just the package name and expect this not to introduce
+  ;;    conflicts.
   (or (and (symbolp melpa-style-recipe)
            (gethash (symbol-name melpa-style-recipe) straight--recipe-cache))
       (let* (;; It's important to remember whether the recipe was

            ;; The package was installed successfully.
            (puthash package t straight--success-cache)
            t))))))

;;;###autoload
(defun straight-update-package (package)


(defvar straight--success-cache (make-hash-table :test #'equal)
  "Hash table containing successfully built packages as keys.
The keys are package names as strings; the values are
meaningless, and all non-nil.")

(defvar straight--packages-to-rebuild nil
  "Hash table of packages for which to force a rebuild.
The keys are package names as strings; the values are
meaningless, and all non-nil. When not let-bound, this variable
is nil. When `straight-use-package' is invoked for any of these
packages, they will be rebuilt even if they have not changed. The
special value `:all' is equivalent to a list of all possible
packages. See also `straight-rebuild-package'.")

(defvar straight--packages-not-to-rebuild nil
  "Hash table of packages for which rebuild forcing does not apply.
The keys are package names as strings; the values are
meaningless, and all non-nil. When not let-bound, this variable
is nil. Any packages in this list are immune to the effects of
`straight--packages-to-rebuild', even if it is set to `:all'.
This is used to prevent building dependencies twice when
`straight-rebuild-package' or `straight-rebuild-all' is
invoked.")

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;; API
