Expose babashka.deps/clojure

This commit is contained in:
Michiel Borkent 2021-11-06 13:01:35 +01:00
parent 552bcc7931
commit 7c7053119a
5 changed files with 58 additions and 59 deletions

50
src/babashka/deps.clj Normal file
View file

@ -0,0 +1,50 @@
(ns babashka.deps
(:require [babashka.process :as p]
[borkdude.deps :as deps]
[sci.core :as sci]))
(defn clojure
"Starts clojure similar to CLI. Use `rlwrap bb` for `clj`-like invocation.
Invokes java with babashka.process/process for `-M`, `-X` and `-A`
and returns the associated record. Default options passed to
babashka.process/process are:
{:in :inherit
:out :inherit
:err :inherit
:shutdown p/destroy-tree}
which can be overriden with opts.
Returns `nil` and prints to *out* for --help, -Spath, -Sdescribe and
-Stree.
Examples:
(-> (clojure '[-M -e (+ 1 2 3)] {:out :string}) deref :out) returns
\"6\n\".
(-> @(clojure) :exit) starts a clojure REPL, waits for it
to finish and returns the exit code from the process."
([] (clojure []))
([args] (clojure args nil))
([args opts]
(let [opts (merge {:in :inherit
:out :inherit
:err :inherit
:shutdown p/destroy-tree}
opts)]
(binding [*in* @sci/in
*out* @sci/out
*err* @sci/err
deps/*dir* (:dir opts)
deps/*env* (:env opts)
deps/*extra-env* (:extra-env opts)
deps/*process-fn* (fn
([cmd] (p/process cmd opts))
([cmd _] (p/process cmd opts)))
deps/*exit-fn* (fn
([_])
([_exit-code msg]
(throw (Exception. msg))))]
(apply deps/-main (map str args))))))

View file

@ -1,6 +1,6 @@
(ns babashka.impl.deps
(:require [babashka.impl.classpath :as cp]
[babashka.process :as p]
(:require [babashka.deps :as bdeps]
[babashka.impl.classpath :as cp]
[borkdude.deps :as deps]
[clojure.string :as str]
[sci.core :as sci]))
@ -77,61 +77,9 @@
cp (str/replace cp (re-pattern (str cp/path-sep "+$")) "")]
(cp/add-classpath cp)))))
(defn clojure
"Starts clojure similar to CLI. Use `rlwrap bb` for `clj`-like invocation.
Invokes java with babashka.process/process for `-M`, `-X` and `-A`
and returns the associated record. Default options passed to
babashka.process/process are:
{:in :inherit
:out :inherit
:err :inherit
:shutdown p/destroy-tree}
which can be overriden with opts.
Returns `nil` and prints to *out* for --help, -Spath, -Sdescribe and
-Stree.
Examples:
(-> (clojure '[-M -e (+ 1 2 3)] {:out :string}) deref :out) returns
\"6\n\".
(-> @(clojure) :exit) starts a clojure REPL, waits for it
to finish and returns the exit code from the process."
([] (clojure []))
([args] (clojure args nil))
([args opts]
(let [opts (merge {:in :inherit
:out :inherit
:err :inherit
:shutdown p/destroy-tree}
opts)]
(binding [*in* @sci/in
*out* @sci/out
*err* @sci/err
deps/*dir* (:dir opts)
deps/*env* (:env opts)
deps/*extra-env* (:extra-env opts)
deps/*process-fn* (fn
([cmd] (p/process cmd opts))
([cmd _] (p/process cmd opts)))
deps/*exit-fn* (fn
([_])
([_exit-code msg]
(throw (Exception. msg))))]
(apply deps/-main (map str args))))))
;; (-> (clojure ["-Sdeps" edn "-M:foo"] {:out :inherit}) p/check)
;; TODO:
;; (uberjar {:out "final.jar" :main 'foo.bar})
;; (uberscript {:out "final.clj" :main 'foo.bar})
(def deps-namespace
{'add-deps (sci/copy-var add-deps dns)
'clojure (sci/copy-var clojure dns)
'clojure (sci/copy-var bdeps/clojure dns)
'merge-deps (sci/copy-var merge-deps dns)
;; undocumented
'merge-defaults (sci/copy-var merge-default-deps dns)})

View file

@ -1,7 +1,7 @@
(ns babashka.impl.print-deps
(:require
[babashka.deps :as deps]
[babashka.impl.common :as common]
[babashka.impl.deps :as deps]
[clojure.edn :as edn]
[clojure.java.io :as io]
[clojure.pprint :as pp]

View file

@ -1,7 +1,7 @@
(ns babashka.impl.tasks
(:require [babashka.impl.classpath :as cp]
(:require [babashka.deps :as deps]
[babashka.impl.classpath :as cp]
[babashka.impl.common :refer [ctx bb-edn debug]]
[babashka.impl.deps :as deps]
[babashka.process :as p]
[clojure.core.async :refer [<!!]]
[clojure.java.io :as io]

View file

@ -3,6 +3,7 @@
(:refer-clojure :exclude [error-handler])
(:require
[aaaa-this-has-to-be-first.because-patches]
[babashka.deps :as bdeps]
[babashka.fs :as fs]
[babashka.impl.bencode :refer [bencode-namespace]]
[babashka.impl.cheshire :refer [cheshire-core-namespace]]
@ -848,7 +849,7 @@ Use bb run --help to show this help output.
:debug debug
:preloads preloads
:loader (:loader @cp/cp-state)}))))
clojure [nil (if-let [proc (deps/clojure command-line-args)]
clojure [nil (if-let [proc (bdeps/clojure command-line-args)]
(-> @proc :exit)
0)]
uberscript [nil 0]