bb tasks: support parallel via future
This commit is contained in:
parent
ed17a190d2
commit
2b2e602eac
1 changed files with 50 additions and 20 deletions
|
|
@ -45,9 +45,16 @@
|
||||||
:out :inherit
|
:out :inherit
|
||||||
:err :inherit} opts)))))
|
:err :inherit} opts)))))
|
||||||
|
|
||||||
|
(defn -wait [res]
|
||||||
|
(when res
|
||||||
|
(if (future? res)
|
||||||
|
@res
|
||||||
|
res)))
|
||||||
|
|
||||||
(def tasks-namespace
|
(def tasks-namespace
|
||||||
{'shell (sci/copy-var shell sci-ns)
|
{'shell (sci/copy-var shell sci-ns)
|
||||||
'clojure (sci/copy-var clojure sci-ns)})
|
'clojure (sci/copy-var clojure sci-ns)
|
||||||
|
'-wait (sci/copy-var -wait sci-ns)})
|
||||||
|
|
||||||
(defn depends-map [tasks target-name]
|
(defn depends-map [tasks target-name]
|
||||||
(let [deps (seq (:depends (get tasks target-name)))
|
(let [deps (seq (:depends (get tasks target-name)))
|
||||||
|
|
@ -59,19 +66,30 @@
|
||||||
(format "(when %s %s)" (second when-expr) expr)
|
(format "(when %s %s)" (second when-expr) expr)
|
||||||
expr))
|
expr))
|
||||||
|
|
||||||
|
(defn wrap-def [task-name prog last?]
|
||||||
|
(format "(def %s %s) %s"
|
||||||
|
task-name prog
|
||||||
|
(if last?
|
||||||
|
(format "(babashka.tasks/-wait %s)" task-name)
|
||||||
|
task-name)))
|
||||||
|
|
||||||
(defn assemble-task-1
|
(defn assemble-task-1
|
||||||
"Assembles task, does not process :depends."
|
"Assembles task, does not process :depends."
|
||||||
[task]
|
([task-name task] (assemble-task-1 task-name task nil))
|
||||||
(cond (qualified-symbol? task)
|
([task-name task last?]
|
||||||
(format "
|
(cond (qualified-symbol? task)
|
||||||
|
(let [prog (format "(apply %s *command-line-args*)" task)
|
||||||
|
prog (wrap-def task-name prog last?)
|
||||||
|
prog (format "
|
||||||
(do (require (quote %s))
|
(do (require (quote %s))
|
||||||
(apply %s *command-line-args*))"
|
%s)"
|
||||||
(namespace task)
|
(namespace task)
|
||||||
task)
|
prog)]
|
||||||
(map? task)
|
prog)
|
||||||
(let [task (:task task)]
|
(map? task)
|
||||||
(assemble-task-1 task))
|
(let [task (:task task)]
|
||||||
:else task))
|
(assemble-task-1 task-name task last?))
|
||||||
|
:else (wrap-def task-name task last?))))
|
||||||
|
|
||||||
(defn format-task [init prog]
|
(defn format-task [init prog]
|
||||||
(format "
|
(format "
|
||||||
|
|
@ -94,6 +112,9 @@
|
||||||
(conj order task-name))
|
(conj order task-name))
|
||||||
order))))))
|
order))))))
|
||||||
|
|
||||||
|
(defn deref-task [dep]
|
||||||
|
(format "(babashka.tasks/-wait %s)" dep))
|
||||||
|
|
||||||
(defn assemble-task [task-name]
|
(defn assemble-task [task-name]
|
||||||
(let [task-name (symbol task-name)
|
(let [task-name (symbol task-name)
|
||||||
tasks (get @bb-edn :tasks)
|
tasks (get @bb-edn :tasks)
|
||||||
|
|
@ -101,18 +122,27 @@
|
||||||
(if task
|
(if task
|
||||||
(let [m? (map? task)
|
(let [m? (map? task)
|
||||||
init (and m? (get tasks :init))
|
init (and m? (get tasks :init))
|
||||||
prog (if (and m? (:depends task))
|
prog (if-let [depends (when m? (:depends task))]
|
||||||
(let [targets (target-order tasks task-name)]
|
(let [targets (target-order tasks task-name)]
|
||||||
(loop [prog ""
|
(loop [prog ""
|
||||||
targets (seq targets)]
|
targets (seq targets)]
|
||||||
(if-let [t (first targets)]
|
(let [t (first targets)
|
||||||
(if-let [task (get tasks t)]
|
targets (next targets)]
|
||||||
(recur (str prog "\n" (assemble-task-1 task))
|
(if targets
|
||||||
(next targets))
|
(if-let [task (get tasks t)]
|
||||||
[(binding [*out* *err*]
|
(recur (str prog "\n" (assemble-task-1 t task))
|
||||||
(println "No such task:" task-name)) 1])
|
targets)
|
||||||
[[(format-task init prog)] nil])))
|
[(binding [*out* *err*]
|
||||||
[[(format-task init (assemble-task-1 task))] nil])]
|
(println "No such task:" task-name)) 1])
|
||||||
|
(if-let [task (get tasks t)]
|
||||||
|
(let [prog (str prog "\n"
|
||||||
|
(apply str (map deref-task depends))
|
||||||
|
"\n"
|
||||||
|
(assemble-task-1 t task true))]
|
||||||
|
[[(format-task init prog)] nil])
|
||||||
|
[(binding [*out* *err*]
|
||||||
|
(println "No such task:" task-name)) 1])))))
|
||||||
|
[[(format-task init (assemble-task-1 task-name task))] nil])]
|
||||||
prog)
|
prog)
|
||||||
[(binding [*out* *err*]
|
[(binding [*out* *err*]
|
||||||
(println "No such task:" task-name)) 1])))
|
(println "No such task:" task-name)) 1])))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue