diff --git a/src/babashka/deps.clj b/src/babashka/deps.clj new file mode 100644 index 00000000..16e56668 --- /dev/null +++ b/src/babashka/deps.clj @@ -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)))))) diff --git a/src/babashka/impl/deps.clj b/src/babashka/impl/deps.clj index 8e04c2a2..de0720b0 100644 --- a/src/babashka/impl/deps.clj +++ b/src/babashka/impl/deps.clj @@ -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)}) diff --git a/src/babashka/impl/print_deps.clj b/src/babashka/impl/print_deps.clj index 5844f21d..b09aa0b5 100644 --- a/src/babashka/impl/print_deps.clj +++ b/src/babashka/impl/print_deps.clj @@ -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] diff --git a/src/babashka/impl/tasks.clj b/src/babashka/impl/tasks.clj index 2ffbf5cc..d6cfd13a 100644 --- a/src/babashka/impl/tasks.clj +++ b/src/babashka/impl/tasks.clj @@ -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 [ @proc :exit) 0)] uberscript [nil 0]