Cache local pods metadata in project .babashka dir

This commit is contained in:
Wes Morgan 2022-03-21 10:01:00 -06:00
parent e369bf24f1
commit 599cdc0157
No known key found for this signature in database
GPG key ID: 5639E4CBFA17DC84

View file

@ -2,7 +2,8 @@
(:require [babashka.pods.impl :as impl]
[sci.core :as sci]
[clojure.java.io :as io]
[babashka.pods.impl.resolver :as resolver])
[babashka.pods.impl.resolver :as resolver]
[babashka.impl.common :as common])
(:import (java.io PushbackInputStream File)))
(set! *warn-on-reflection* true)
@ -24,9 +25,16 @@
(string? var-value)
(sci/eval-string* ctx var-value))))))
(defn metadata-cache-file ^File [pod-spec {:keys [:version]}]
(io/file (resolver/cache-dir {:pod/name pod-spec :pod/version version})
"metadata.cache"))
(defn metadata-cache-file ^File [pod-spec {:keys [:version :path]}]
(if version
(io/file (resolver/cache-dir {:pod/name pod-spec :pod/version version})
"metadata.cache")
(let [bb-edn-file (-> @common/bb-edn :file io/file)
config-dir (.getParentFile bb-edn-file)
cache-dir (io/file config-dir ".babashka")
pod-file (-> path io/file .getName)
cache-file (io/file cache-dir (str pod-file ".metadata.cache"))]
cache-file)))
(defn load-metadata-from-cache [pod-spec opts]
(let [cache-file (metadata-cache-file pod-spec opts)]
@ -36,16 +44,16 @@
(defn load-pod-metadata* [pod-spec {:keys [:version :cache] :as opts}]
(let [metadata (impl/load-pod-metadata pod-spec opts)
cache-file (when (and version cache)
(metadata-cache-file pod-spec opts))]
cache-file (when cache (metadata-cache-file pod-spec opts))]
(when cache-file
(io/make-parents cache-file)
(with-open [w (io/output-stream cache-file)]
(impl/write w metadata)))
metadata))
(defn load-pod-metadata [pod-spec {:keys [:version :cache] :as opts}]
(defn load-pod-metadata [pod-spec {:keys [:cache] :as opts}]
(let [metadata
(if-let [cached-metadata (when (and version cache)
(if-let [cached-metadata (when cache
(load-metadata-from-cache pod-spec opts))]
cached-metadata
(load-pod-metadata* pod-spec opts))]
@ -56,7 +64,6 @@
:opts (assoc opts :metadata metadata)})))
{} (get metadata "namespaces"))))
(defn load-pod
([ctx pod-spec] (load-pod ctx pod-spec nil))
([ctx pod-spec version opts] (load-pod ctx pod-spec (assoc opts :version version)))