Simplify, just don't support adding deps without explicit version

This commit is contained in:
Michiel Borkent 2024-09-12 16:36:38 +02:00
parent 7b8dc35149
commit 4a37d5e8f5

View file

@ -1,12 +1,5 @@
;; rip-off from https://github.com/clojure/clojure/blob/master/src/clj/clojure/repl/deps.clj
;; but re-implemented using babashka.deps
(ns clojure.repl.deps (ns clojure.repl.deps
(:require [babashka.deps :as deps] (:require [babashka.deps :as deps]))
[borkdude.deps :as deps.clj]
[clojure.walk :as walk]
[clojure.edn :as edn]
[clojure.java.io :as io]
[babashka.process :as p]))
(defn add-libs (defn add-libs
"Given lib-coords, a map of lib to coord, will resolve all transitive deps for the libs "Given lib-coords, a map of lib to coord, will resolve all transitive deps for the libs
@ -16,46 +9,6 @@
(deps/add-deps {:deps lib-coords}) (deps/add-deps {:deps lib-coords})
nil) nil)
(defn tool-expr [lib]
(walk/postwalk-replace
{'lib lib}
'(let [current-basis (requiring-resolve 'clojure.java.basis/current-basis)
procurer (select-keys (current-basis) [:mvn/repos :mvn/local-repo])
invoke-tool (requiring-resolve 'clojure.tools.deps.interop/invoke-tool)
coord (invoke-tool {:tool-alias :deps
:fn 'clojure.tools.deps/find-latest-version
:args {:lib 'lib, :procurer procurer}})]
coord)))
(defn- invoke-tool
{:added "1.12"}
[{:keys [tool-name tool-alias fn args preserve-envelope]
:as opts
:or {preserve-envelope false}}]
(when-not (or tool-name tool-alias) (throw (ex-info "Either :tool-alias or :tool-name must be provided" (or opts {}))))
(when-not (symbol? fn) (throw (ex-info (str "fn should be a symbol " fn) (or opts {}))))
(let [args (assoc args :clojure.exec/invoke :fn)
;; this is a hack since in lein there is no basis and we just make this up:
args (assoc args :procurer {:mvn/repos {"central" {:url "https://repo1.maven.org/maven2/"}, "clojars" {:url "https://repo.clojars.org/"}}
:mvn/local-repo (str (io/file (System/getProperty "user.home") ".m2"))})
_ (when (:debug opts) (println "args" args))
command-strs [(str "-T" (or tool-alias tool-name)) (pr-str fn) (pr-str args)]
_ (when (:debug opts) (apply println "Invoking: " command-strs))
envelope (edn/read-string
(binding [deps.clj/*clojure-process-fn* (clojure.core/fn [{:keys [cmd]}]
(let [{:keys [exit out]} (apply p/sh cmd)]
(if (zero? exit)
out
(throw (RuntimeException. (str "Process failed with exit=" exit))))))]
(apply deps.clj/-main command-strs)))]
(if preserve-envelope
envelope
(let [{:keys [tag val]} envelope
parsed-val (edn/read-string val)]
(if (= :ret tag)
parsed-val
(throw (ex-info (:cause parsed-val) (or parsed-val {}))))))))
(defn add-lib (defn add-lib
"Given a lib that is not yet on the repl classpath, make it available by "Given a lib that is not yet on the repl classpath, make it available by
downloading the library if necessary and adding it to the classloader. downloading the library if necessary and adding it to the classloader.
@ -74,10 +27,5 @@
([lib coord] ([lib coord]
(add-libs {lib coord})) (add-libs {lib coord}))
([lib] ([lib]
(let [coord (invoke-tool {:tool-alias :deps (throw (ex-info "add-lib without explicit version isn't supported in babashka (yet)" {:lib lib}))))
:fn 'clojure.tools.deps/find-latest-version
:args {:lib lib}})]
(if coord
(add-libs {lib coord})
(throw (ex-info (str "No version found for lib " lib) {}))))))