parallel
This commit is contained in:
parent
f18ec3feeb
commit
ac307708ba
2 changed files with 38 additions and 23 deletions
|
|
@ -66,10 +66,15 @@
|
||||||
(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?]
|
(defn wrap-future [prog parallel?]
|
||||||
(format "(def %s (future %s)) %s"
|
(if parallel?
|
||||||
task-name prog
|
(format "(future %s)" prog)
|
||||||
(if last?
|
prog))
|
||||||
|
|
||||||
|
(defn wrap-def [task-name prog parallel? last?]
|
||||||
|
(format "(def %s %s) %s"
|
||||||
|
task-name (wrap-future prog parallel?)
|
||||||
|
(if (and parallel? last?)
|
||||||
(format "(babashka.tasks/-wait %s)" task-name)
|
(format "(babashka.tasks/-wait %s)" task-name)
|
||||||
task-name)))
|
task-name)))
|
||||||
|
|
||||||
|
|
@ -81,14 +86,14 @@
|
||||||
|
|
||||||
(defn assemble-task-1
|
(defn assemble-task-1
|
||||||
"Assembles task, does not process :depends."
|
"Assembles task, does not process :depends."
|
||||||
([task-name task]
|
([task-name task parallel?]
|
||||||
(assemble-task-1 task-name task nil nil))
|
(assemble-task-1 task-name task parallel? nil nil))
|
||||||
([task-name task last?] (assemble-task-1 task-name task last? nil))
|
([task-name task parallel? last?] (assemble-task-1 task-name task parallel? last? nil))
|
||||||
([task-name task last? depends]
|
([task-name task parallel? last? depends]
|
||||||
(cond (qualified-symbol? task)
|
(cond (qualified-symbol? task)
|
||||||
(let [prog (format "(apply %s *command-line-args*)" task)
|
(let [prog (format "(apply %s *command-line-args*)" task)
|
||||||
prog (wrap-depends prog depends)
|
prog (wrap-depends prog depends)
|
||||||
prog (wrap-def task-name prog last?)
|
prog (wrap-def task-name prog parallel? last?)
|
||||||
prog (format "
|
prog (format "
|
||||||
(do (require (quote %s))
|
(do (require (quote %s))
|
||||||
%s)"
|
%s)"
|
||||||
|
|
@ -97,9 +102,9 @@
|
||||||
prog)
|
prog)
|
||||||
(map? task)
|
(map? task)
|
||||||
(let [t (:task task)]
|
(let [t (:task task)]
|
||||||
(assemble-task-1 task-name t last? (:depends task)))
|
(assemble-task-1 task-name t parallel? last? (:depends task)))
|
||||||
:else (let [prog (wrap-depends task depends)]
|
:else (let [prog (wrap-depends task depends)]
|
||||||
(wrap-def task-name prog last?)))))
|
(wrap-def task-name prog parallel? last?)))))
|
||||||
|
|
||||||
(defn format-task [init prog]
|
(defn format-task [init prog]
|
||||||
(format "
|
(format "
|
||||||
|
|
@ -122,7 +127,7 @@
|
||||||
(conj order task-name))
|
(conj order task-name))
|
||||||
order))))))
|
order))))))
|
||||||
|
|
||||||
(defn assemble-task [task-name]
|
(defn assemble-task [task-name parallel?]
|
||||||
(let [task-name (symbol task-name)
|
(let [task-name (symbol task-name)
|
||||||
tasks (get @bb-edn :tasks)
|
tasks (get @bb-edn :tasks)
|
||||||
task (get tasks task-name)]
|
task (get tasks task-name)]
|
||||||
|
|
@ -137,7 +142,7 @@
|
||||||
targets (next targets)]
|
targets (next targets)]
|
||||||
(if targets
|
(if targets
|
||||||
(if-let [task (get tasks t)]
|
(if-let [task (get tasks t)]
|
||||||
(recur (str prog "\n" (assemble-task-1 t task))
|
(recur (str prog "\n" (assemble-task-1 t task parallel?))
|
||||||
targets)
|
targets)
|
||||||
[(binding [*out* *err*]
|
[(binding [*out* *err*]
|
||||||
(println "No such task:" task-name)) 1])
|
(println "No such task:" task-name)) 1])
|
||||||
|
|
@ -145,11 +150,11 @@
|
||||||
(let [prog (str prog "\n"
|
(let [prog (str prog "\n"
|
||||||
(apply str (map deref-task depends))
|
(apply str (map deref-task depends))
|
||||||
"\n"
|
"\n"
|
||||||
(assemble-task-1 t task true))]
|
(assemble-task-1 t task parallel? true))]
|
||||||
[[(format-task init prog)] nil])
|
[[(format-task init prog)] nil])
|
||||||
[(binding [*out* *err*]
|
[(binding [*out* *err*]
|
||||||
(println "No such task:" task-name)) 1])))))
|
(println "No such task:" task-name)) 1])))))
|
||||||
[[(format-task init (assemble-task-1 task-name task true))] nil])]
|
[[(format-task init (assemble-task-1 task-name task parallel? true))] nil])]
|
||||||
(when (= "true" (System/getenv "BABASHKA_DEV"))
|
(when (= "true" (System/getenv "BABASHKA_DEV"))
|
||||||
(println (ffirst prog)))
|
(println (ffirst prog)))
|
||||||
prog)
|
prog)
|
||||||
|
|
|
||||||
|
|
@ -88,6 +88,7 @@
|
||||||
"help"
|
"help"
|
||||||
"doc"
|
"doc"
|
||||||
"tasks"
|
"tasks"
|
||||||
|
"run"
|
||||||
"uberjar"
|
"uberjar"
|
||||||
"uberscript"
|
"uberscript"
|
||||||
"repl"
|
"repl"
|
||||||
|
|
@ -403,6 +404,17 @@ When no eval opts or subcommand is provided, the implicit subcommand is repl.")
|
||||||
(defn shell-seq [in]
|
(defn shell-seq [in]
|
||||||
(line-seq (java.io.BufferedReader. in)))
|
(line-seq (java.io.BufferedReader. in)))
|
||||||
|
|
||||||
|
(defn parse-run-opts [opts-map args]
|
||||||
|
(loop [opts-map opts-map
|
||||||
|
args (seq args)]
|
||||||
|
(if args
|
||||||
|
(let [fst (first args)]
|
||||||
|
(if (= "--parallel" fst)
|
||||||
|
(recur (assoc opts-map :parallel-tasks true)
|
||||||
|
(next args))
|
||||||
|
(assoc opts-map :run fst :command-line-args (next args))))
|
||||||
|
opts-map)))
|
||||||
|
|
||||||
(defn parse-opts [options]
|
(defn parse-opts [options]
|
||||||
(let [opt (first options)
|
(let [opt (first options)
|
||||||
tasks (into #{} (map str) (keys (:tasks @common/bb-edn)))]
|
tasks (into #{} (map str) (keys (:tasks @common/bb-edn)))]
|
||||||
|
|
@ -413,9 +425,9 @@ When no eval opts or subcommand is provided, the implicit subcommand is repl.")
|
||||||
(fs/regular-file? opt)
|
(fs/regular-file? opt)
|
||||||
(if (str/ends-with? opt ".jar")
|
(if (str/ends-with? opt ".jar")
|
||||||
{:jar opt
|
{:jar opt
|
||||||
:command-line-args (rest options)}
|
:command-line-args (next options)}
|
||||||
{:file opt
|
{:file opt
|
||||||
:command-line-args (rest options)})
|
:command-line-args (next options)})
|
||||||
(command? opt)
|
(command? opt)
|
||||||
(recur (cons (str "--" opt) (next options)))
|
(recur (cons (str "--" opt) (next options)))
|
||||||
:else
|
:else
|
||||||
|
|
@ -529,9 +541,7 @@ When no eval opts or subcommand is provided, the implicit subcommand is repl.")
|
||||||
(recur (next options)
|
(recur (next options)
|
||||||
(assoc opts-map :main (first options))))
|
(assoc opts-map :main (first options))))
|
||||||
("--run")
|
("--run")
|
||||||
(let [options (next options)]
|
(parse-run-opts opts-map (next options))
|
||||||
(recur (next options)
|
|
||||||
(assoc opts-map :run (first options))))
|
|
||||||
("--tasks")
|
("--tasks")
|
||||||
(assoc opts-map :list-tasks true
|
(assoc opts-map :list-tasks true
|
||||||
:command-line-args (next options))
|
:command-line-args (next options))
|
||||||
|
|
@ -556,7 +566,7 @@ When no eval opts or subcommand is provided, the implicit subcommand is repl.")
|
||||||
|
|
||||||
(def env (atom {}))
|
(def env (atom {}))
|
||||||
|
|
||||||
(defn exec [opts]
|
(defn exec [cli-opts]
|
||||||
(binding [*unrestricted* true]
|
(binding [*unrestricted* true]
|
||||||
(sci/binding [core/warn-on-reflection @core/warn-on-reflection
|
(sci/binding [core/warn-on-reflection @core/warn-on-reflection
|
||||||
core/data-readers @core/data-readers
|
core/data-readers @core/data-readers
|
||||||
|
|
@ -570,7 +580,7 @@ When no eval opts or subcommand is provided, the implicit subcommand is repl.")
|
||||||
:main :uberscript :describe?
|
:main :uberscript :describe?
|
||||||
:jar :uberjar :clojure
|
:jar :uberjar :clojure
|
||||||
:doc :run :list-tasks]}
|
:doc :run :list-tasks]}
|
||||||
opts
|
cli-opts
|
||||||
_ (when verbose? (vreset! common/verbose? true))
|
_ (when verbose? (vreset! common/verbose? true))
|
||||||
_ (do ;; set properties
|
_ (do ;; set properties
|
||||||
(when main (System/setProperty "babashka.main" main))
|
(when main (System/setProperty "babashka.main" main))
|
||||||
|
|
@ -658,7 +668,7 @@ When no eval opts or subcommand is provided, the implicit subcommand is repl.")
|
||||||
"-main")]
|
"-main")]
|
||||||
[[(format "(ns user (:require [%1$s])) (apply %1$s/%2$s *command-line-args*)"
|
[[(format "(ns user (:require [%1$s])) (apply %1$s/%2$s *command-line-args*)"
|
||||||
ns var-name)] nil])
|
ns var-name)] nil])
|
||||||
run (tasks/assemble-task run)
|
run (tasks/assemble-task run (:parallel-tasks cli-opts))
|
||||||
file (try [[(read-file file)] nil]
|
file (try [[(read-file file)] nil]
|
||||||
(catch Exception e
|
(catch Exception e
|
||||||
(error-handler e {:expression expressions
|
(error-handler e {:expression expressions
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue