Fix #1473: make :local/root deps resolve paths relative to bb.edn

Co-authored-by: Michiel Borkent <michielborkent@gmail.com>
This commit is contained in:
Rahuλ Dé 2023-01-28 13:27:54 +00:00 committed by GitHub
parent 63abc75cf5
commit 32864476e5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 69 additions and 38 deletions

View file

@ -9,7 +9,7 @@ A preview of the next release can be installed from
## Unreleased ## Unreleased
... - [#1473](https://github.com/babashka/babashka/issues/1473): make relative paths in bb.edn resolve relative to it ([@lispyclouds](https://github.com/lispyclouds))
## 1.1.172 (2023-01-23) ## 1.1.172 (2023-01-23)

@ -1 +1 @@
Subproject commit 1fb9dd8cbf939f68f8a9ff57667b3b677c958d2e Subproject commit c3b9587619902a04b5ec166e986b3c31b72e2d82

View file

@ -59,8 +59,9 @@
then used to resolve dependencies in babashka." then used to resolve dependencies in babashka."
([deps-map] (add-deps deps-map nil)) ([deps-map] (add-deps deps-map nil))
([deps-map {:keys [:aliases :env :extra-env :force]}] ([deps-map {:keys [:aliases :env :extra-env :force]}]
(let [deps-root (:deps-root @bb-edn)]
(when-let [paths (:paths deps-map)] (when-let [paths (:paths deps-map)]
(let [paths (if-let [deps-root (:deps-root @bb-edn)] (let [paths (if deps-root
(let [deps-root (fs/absolutize deps-root) (let [deps-root (fs/absolutize deps-root)
paths (mapv #(str (fs/file deps-root %)) paths)] paths (mapv #(str (fs/file deps-root %)) paths)]
paths) paths)
@ -86,15 +87,18 @@
(assoc 'org.clojure/core.specs.alpha ""))}) (assoc 'org.clojure/core.specs.alpha ""))})
args (list "-Srepro" ;; do not include deps.edn from user config args (list "-Srepro" ;; do not include deps.edn from user config
"-Spath" "-Sdeps" (str deps-map) "-Spath" "-Sdeps" (str deps-map)
"-Sdeps-file" "") ;; we reset deps file so the local deps.edn isn't used "-Sdeps-file" "__babashka_no_deps_file__.edn") ;; we reset deps file so the local deps.edn isn't used
args (if force (cons "-Sforce" args) args) args (if force (cons "-Sforce" args) args)
args (concat args [(str "-A:" (str/join ":" (cons ":org.babashka/defaults" aliases)))]) args (concat args [(str "-A:" (str/join ":" (cons ":org.babashka/defaults" aliases)))])
cp (with-out-str (binding [deps/*env* env bindings (cond->
deps/*extra-env* extra-env] {#'deps/*env* env
#'deps/*extra-env* extra-env}
deps-root (assoc #'deps/*dir* (str deps-root)))
cp (with-out-str (with-bindings bindings
(apply deps/-main args))) (apply deps/-main args)))
cp (str/trim cp) cp (str/trim cp)
cp (str/replace cp (re-pattern (str cp/path-sep "+$")) "")] cp (str/replace cp (re-pattern (str cp/path-sep "+$")) "")]
(cp/add-classpath cp)))))))) (cp/add-classpath cp)))))))))
(def deps-namespace (def deps-namespace
{'add-deps (sci/copy-var add-deps dns) {'add-deps (sci/copy-var add-deps dns)

View file

@ -483,3 +483,30 @@ even more stuff here\"
"{:deps {}}" "{:deps {}}"
(is (= {1 {:a 1}} (is (= {1 {:a 1}}
(bb "-Sdeps" "{:deps {medley/medley {:mvn/version \"1.4.0\"}}}" "-e" "(require 'medley.core) (medley.core/index-by :a [{:a 1}])"))))) (bb "-Sdeps" "{:deps {medley/medley {:mvn/version \"1.4.0\"}}}" "-e" "(require 'medley.core) (medley.core/index-by :a [{:a 1}])")))))
(deftest deps-root-test
(fs/with-temp-dir [dir {}]
(let [f (fs/file dir "bb.edn")
config (str f)]
(spit config
'{:paths ["src"]
:tasks {cp (prn (babashka.classpath/get-classpath))}})
(testing "custom deps-root path"
(let [out (bb "--config" config "--deps-root" (str dir) "cp")
entries (cp/split-classpath out)]
(is (= 1 (count entries)))
(is (= (fs/file dir "src") (fs/file (first entries))))))
(testing "default deps-root path is same as bb.edn"
(let [out (bb "--config" config "cp")
entries (cp/split-classpath out)]
(is (= (fs/parent f) (fs/parent (first entries))))))
(spit config
'{:paths ["src"]
:deps {local/dep {:local/root "local-dep"}}
:tasks {cp (prn (babashka.classpath/get-classpath))}})
(testing "relative paths in deps should be relative to bb.edn"
(let [root (fs/create-dir (fs/file dir "local-dep"))
_ (spit (str (fs/file root "deps.edn")) {})
out (bb "--config" config "cp")
entries (cp/split-classpath out)]
(is (= (fs/parent f) (fs/parent (first entries)))))))))