This commit is contained in:
Michiel Borkent 2020-05-25 21:55:42 +02:00
parent 22be2b5842
commit 5b875ba457
2 changed files with 46 additions and 12 deletions

View file

@ -1,6 +1,38 @@
(ns babashka.pods.jvm
(:require [babashka.pods.impl :as impl]))
(def ^:private namespaces-to-load (atom {}))
(defn- unroot-resource [^String path]
(symbol (.. path
(substring 1)
(replace \/ \. )
(replace \_ \-))))
(defn- process-namespace [{:keys [:name :vars :done]}]
(binding [*ns* (load-string (format "(ns %s) *ns*" name))]
(doseq [[var-sym v] vars]
(cond
(ifn? v)
(do
(ns-unmap *ns* var-sym)
(intern name var-sym v))
(string? v)
(load-string v))))
(when done (deliver done :ok)))
(let [core-load clojure.core/load]
(intern 'clojure.core 'load
(fn [& paths]
(let [nss @namespaces-to-load]
(doseq [path paths]
(let [lib (unroot-resource path)]
(if-let [pod (get nss lib)]
(impl/load-ns
pod lib (fn [namespace]
(process-namespace namespace)))
(core-load path))))))))
(defn load-pod
([pod-spec] (load-pod pod-spec nil))
([pod-spec _opts]
@ -12,17 +44,20 @@
(intern
(create-ns (symbol (namespace sym)))
(symbol (name sym)))))})
namespaces (:namespaces pod)]
(doseq [[ns-sym v] namespaces]
(binding [*ns* (load-string (format "(ns %s) *ns*" ns-sym))]
(doseq [[var-sym v] v]
(cond
(ifn? v)
(do
(ns-unmap *ns* var-sym)
(intern ns-sym var-sym v))
(string? v)
(load-string v)))))
namespaces (:namespaces pod)
load? (contains? (:ops pod) :load)]
(when load?
(swap! namespaces-to-load
merge
(into {}
(keep (fn [[ns-name vars]]
(when (empty? vars)
[ns-name pod]))
namespaces))))
(doseq [[ns-sym vars] namespaces
:when (or (not load)
(seq vars))]
(process-namespace {:name ns-sym :vars vars}))
(future (impl/processor pod))
{:pod/id (:pod-id pod)})))

View file

@ -47,7 +47,6 @@
(def other-tagged (pod/other-tag))
(require '[pod.test-pod.loaded])
(def loaded (pod.test-pod.loaded/loaded 1))
(pods/unload-pod pod-id)