From 84430c60f89cf98704e3a34e2e5fa74bd377feec Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 27 Jul 2021 11:29:00 +0200 Subject: [PATCH] [#720, #733] print-deps (#958) --- .clj-kondo/rewrite-clj/rewrite-clj/config.edn | 5 + resources/META-INF/babashka/deps.edn | 97 +++++++++++++++++++ script/compile | 1 + src/babashka/impl/print_deps.clj | 34 +++++++ src/babashka/main.clj | 23 ++++- 5 files changed, 158 insertions(+), 2 deletions(-) create mode 100644 .clj-kondo/rewrite-clj/rewrite-clj/config.edn create mode 100644 resources/META-INF/babashka/deps.edn create mode 100644 src/babashka/impl/print_deps.clj diff --git a/.clj-kondo/rewrite-clj/rewrite-clj/config.edn b/.clj-kondo/rewrite-clj/rewrite-clj/config.edn new file mode 100644 index 00000000..19ecae96 --- /dev/null +++ b/.clj-kondo/rewrite-clj/rewrite-clj/config.edn @@ -0,0 +1,5 @@ +{:lint-as + {rewrite-clj.zip/subedit-> clojure.core/-> + rewrite-clj.zip/subedit->> clojure.core/->> + rewrite-clj.zip/edit-> clojure.core/-> + rewrite-clj.zip/edit->> clojure.core/->>}} diff --git a/resources/META-INF/babashka/deps.edn b/resources/META-INF/babashka/deps.edn new file mode 100644 index 00000000..8d8239af --- /dev/null +++ b/resources/META-INF/babashka/deps.edn @@ -0,0 +1,97 @@ +{:paths ["src" "feature-xml" "feature-core-async" + "feature-yaml" "feature-csv" "feature-transit" + "feature-java-time" "feature-java-nio" + "feature-httpkit-client" "feature-httpkit-server" + "feature-lanterna" + "feature-core-match" + "feature-hiccup" + "feature-test-check" + "feature-spec-alpha" + "feature-rewrite-clj" + "feature-selmer" + "pods/src" + "babashka.nrepl/src" + "depstar/src" "process/src" + "deps.clj/src" "deps.clj/resources" + "resources" "sci/resources"], + :deps {org.clojure/clojure {:mvn/version "1.11.0-alpha1"}, + borkdude/sci {:local/root "sci"} + babashka/babashka.curl {:local/root "babashka.curl"} + babashka/fs {:local/root "fs"} + borkdude/graal.locking {:mvn/version "0.0.2"}, + org.clojure/core.async {:mvn/version "1.3.618"}, + org.clojure/tools.cli {:mvn/version "1.0.206"}, + org.clojure/data.csv {:mvn/version "1.0.0"}, + cheshire/cheshire {:mvn/version "5.10.1"} + org.clojure/data.xml {:mvn/version "0.2.0-alpha6"} + clj-commons/clj-yaml {:mvn/version "0.7.107"} + com.cognitect/transit-clj {:mvn/version "1.0.324"} + org.clojure/test.check {:mvn/version "1.1.0"} + nrepl/bencode {:mvn/version "1.1.0"} + seancorfield/next.jdbc {:mvn/version "1.1.610"} + org.postgresql/postgresql {:mvn/version "42.2.18"} + org.hsqldb/hsqldb {:mvn/version "2.5.1"} + datascript/datascript {:mvn/version "1.0.1"} + http-kit/http-kit {:mvn/version "2.5.3"} + babashka/clojure-lanterna {:mvn/version "0.9.8-SNAPSHOT"} + org.clojure/core.match {:mvn/version "1.0.0"} + hiccup/hiccup {:mvn/version "2.0.0-alpha2"} + rewrite-clj/rewrite-clj {:mvn/version "1.0.644-alpha"} + selmer/selmer {:mvn/version "1.12.44"} + com.taoensso/timbre {:mvn/version "5.1.2"} + org.clojure/tools.logging {:mvn/version "1.1.0"}} + :aliases {:babashka/dev + {:main-opts ["-m" "babashka.main"]} + :profile + {:extra-deps + {com.clojure-goes-fast/clj-async-profiler {:mvn/version "0.5.0"}} + :extra-paths ["test"] + :jvm-opts ["-Djdk.attach.allowAttachSelf" + "-Dclojure.compiler.direct-linking=true"] + :main-opts ["-m" "babashka.profile"]} + :lib-tests + {:extra-paths ["process/src" "process/test"] + :extra-deps {babashka/clj-http-lite + {:git/url "https://github.com/babashka/clj-http-lite" + :sha "f44ebe45446f0f44f2b73761d102af3da6d0a13e"} + borkdude/spartan.spec {:git/url "https://github.com/borkdude/spartan.spec" + :sha "16f7eec4b6589c77c96c9fcf989f78fffcee7c4c"} + lambdaisland/regal {:git/url "https://github.com/lambdaisland/regal" + :sha "f902d2c43121f9e1c48603d6eb99f5900eb6a9f6"} + weavejester/medley {:git/url "https://github.com/weavejester/medley" + :sha "a4e5fb5383f5c0d83cb2d005181a35b76d8a136d"} + cprop/cprop {:mvn/version "0.1.16"} + comb/comb {:mvn/version "0.1.1"} + mvxcvi/arrangement {:mvn/version "1.2.0"} + org.clojure/data.zip {:mvn/version "1.0.0"} + clojure-csv/clojure-csv {:mvn/version "2.0.2"} + org.clojure/math.combinatorics {:mvn/version "0.1.6"} + doric/doric {:mvn/version "0.9.0"} + henryw374/cljc.java-time + {:git/url "https://github.com/henryw374/cljc.java-time.git" + :sha "e3d184b78e933322b3fcaa6ca66cbb8f42a6b35c"} + camel-snake-kebab/camel-snake-kebab {:mvn/version "0.4.1"} + aero/aero {:mvn/version "1.1.6"} + org.clojure/data.generators {:mvn/version "1.0.0"} + honeysql/honeysql {:mvn/version "1.0.444"} + com.github.seancorfield/honeysql {:mvn/version "2.0.0-rc2"} + minimallist/minimallist {:mvn/version "0.0.6"} + circleci/bond {:mvn/version "0.4.0"} + version-clj/version-clj {:mvn/version "2.0.1"} + gaka/gaka {:mvn/version "0.3.0"} + failjure/failjure {:mvn/version "2.1.1"} + io.helins/binf {:mvn/version "1.1.0-beta0"} + rm-hull/jasentaa {:mvn/version "0.2.5"} + slingshot/slingshot {:mvn/version "0.12.2"} + io.replikativ/hasch {:mvn/version "0.3.7"} + com.grammarly/omniconf {:mvn/version "0.4.3"} + crispin/crispin {:mvn/version "0.3.8"} + org.clojure/data.json {:mvn/version "2.4.0"} + amperity/vault-clj {:mvn/version "1.0.4"}} + :classpath-overrides {org.clojure/clojure nil + org.clojure/spec.alpha nil + org.clojure/core.specs.alpha nil}} + :clj-nvd + {:extra-deps {clj-nvd/clj-nvd {:git/url "https://github.com/miikka/clj-nvd.git" + :sha "f2ec98699e057a379baf170cb49cf7ad76874a70"}} + :main-opts ["-m" "clj-nvd.core"]}}} diff --git a/script/compile b/script/compile index 00cb8d0c..a58ab482 100755 --- a/script/compile +++ b/script/compile @@ -43,6 +43,7 @@ args=( "-jar" "$BABASHKA_JAR" "-H:+ReportExceptionStackTraces" "-J-Dborkdude.dynaload.aot=true" "-H:IncludeResources=BABASHKA_VERSION" + "-H:IncludeResources=META-INF/babashka/.*" "-H:IncludeResources=SCI_VERSION" "-H:ReflectionConfigurationFiles=reflection.json" "--initialize-at-build-time" diff --git a/src/babashka/impl/print_deps.clj b/src/babashka/impl/print_deps.clj new file mode 100644 index 00000000..d9a25218 --- /dev/null +++ b/src/babashka/impl/print_deps.clj @@ -0,0 +1,34 @@ +(ns babashka.impl.print-deps + (:require + [babashka.impl.common :as common] + [babashka.impl.deps :as deps] + [clojure.edn :as edn] + [clojure.java.io :as io] + [clojure.pprint :as pp] + [clojure.string :as str])) + +(defn print-deps [deps-format] + (let [deps (-> (io/resource "META-INF/babashka/deps.edn") + slurp + edn/read-string) + deps (:deps deps) + deps (assoc deps + 'babashka/fs {:mvn/version "0.0.5"} + 'babashka/babashka.curl {:mvn/version "0.0.3"}) + deps (dissoc deps + 'borkdude/sci + 'borkdude/graal.locking + 'org.postgresql/postgresql + 'babashka/clojure-lanterna + 'seancorfield/next.jdbc + 'datascript/datascript) + bb-edn-deps (:deps @common/bb-edn) + deps (merge deps bb-edn-deps) + paths (:paths @common/bb-edn) + deps {:deps deps} + deps (cond-> deps + (seq paths) (assoc :paths paths))] + (case deps-format + ("deps" nil) (binding [*print-namespace-maps* false] + (pp/pprint deps)) + ("classpath") (println (str/trim (with-out-str (deps/clojure ["-Spath" "-Sdeps" deps]))))))) diff --git a/src/babashka/main.clj b/src/babashka/main.clj index a18b4071..8eccc94a 100644 --- a/src/babashka/main.clj +++ b/src/babashka/main.clj @@ -28,6 +28,7 @@ tools-logging-impl-namespace]] [babashka.impl.pods :as pods] [babashka.impl.pprint :refer [pprint-namespace]] + [babashka.impl.print-deps :as print-deps] [babashka.impl.process :refer [process-namespace]] [babashka.impl.protocols :refer [protocols-namespace]] [babashka.impl.proxy :refer [proxy-fn]] @@ -104,7 +105,8 @@ "repl" "socket-repl" "nrepl-server" - "describe") true + "describe" + "print-deps") true false)) (defn print-error [& msgs] @@ -452,6 +454,19 @@ Use bb run --help to show this help output. (assoc opts-map :run fst :command-line-args (next args)))) opts-map))) +(defn- parse-print-deps-opts + [opts-map args] + (loop [opts-map (assoc opts-map :print-deps true) + args (seq args)] + (if args + (let [fst (first args)] + (case fst + "--format" + (recur (assoc opts-map :print-deps-format (second args)) + (nnext args)) + opts-map)) + opts-map))) + (defn parse-args [args opts-map] (loop [options args opts-map opts-map] @@ -571,6 +586,8 @@ Use bb run --help to show this help output. ("--tasks") (assoc opts-map :list-tasks true :command-line-args (next options)) + ("--print-deps") + (parse-print-deps-opts opts-map (next options)) ;; fallback (if (and opts-map (some opts-map [:file :jar :socket-repl :expressions :main :run])) @@ -645,7 +662,8 @@ Use bb run --help to show this help output. :debug :classpath :force? :main :uberscript :describe? :jar :uberjar :clojure - :doc :run :list-tasks]} + :doc :run :list-tasks + :print-deps]} cli-opts _ (when debug (vreset! common/debug true)) _ (do ;; set properties @@ -769,6 +787,7 @@ Use bb run --help to show this help output. nrepl [(start-nrepl! nrepl sci-ctx) 0] uberjar [nil 0] list-tasks [(tasks/list-tasks sci-ctx) 0] + print-deps [(print-deps/print-deps (:print-deps-format cli-opts)) 0] expressions (sci/binding [sci/file abs-path] (try