Fix #1661: follow symlink when reading adjacent bb.edn

This commit is contained in:
Michiel Borkent 2024-01-29 13:57:49 +01:00
parent b0ce680fda
commit a5e18d6bb7
4 changed files with 20 additions and 11 deletions

View file

@ -11,6 +11,7 @@ A preview of the next release can be installed from
- [#1660](https://github.com/babashka/babashka/issues/1660): add `:deps-root` as part of hash to avoid caching issue with `deps.clj` - [#1660](https://github.com/babashka/babashka/issues/1660): add `:deps-root` as part of hash to avoid caching issue with `deps.clj`
- [#1632](https://github.com/babashka/babashka/issues/1632): fix `(.readPassword (System/console))` by upgrading GraalVM to `21.0.2` - [#1632](https://github.com/babashka/babashka/issues/1632): fix `(.readPassword (System/console))` by upgrading GraalVM to `21.0.2`
- [#1661](https://github.com/babashka/babashka/issues/1661): follow symlink when reading adjacent bb.edn
## 1.3.188 (2023-01-12) ## 1.3.188 (2023-01-12)

View file

@ -1140,29 +1140,35 @@ Use bb run --help to show this help output.
(catch Exception _ false)) (catch Exception _ false))
bin)))))) bin))))))
(defn resolve-symbolic-link [f]
(if (and f (fs/exists? f))
(str (fs/real-path f))
f))
(defn main [& args] (defn main [& args]
(let [bin-jar (binary-invoked-as-jar) (let [bin-jar (binary-invoked-as-jar)
args (if bin-jar args (if bin-jar
(list* "--jar" bin-jar "--" args) (list* "--jar" bin-jar "--" args)
args) args)
[args opts] (parse-global-opts args) [args opts] (parse-global-opts args)
[args {:keys [jar file config merge-deps debug] :as opts}] [args {:keys [config merge-deps debug] :as opts}]
(if-not (or (:file opts) (if-not (or (:file opts)
(:jar opts)) (:jar opts))
(parse-file-opt args opts) (parse-file-opt args opts)
[args opts]) [args opts])
;; _ (prn :args args :opts opts) {:keys [jar file]} opts
abs-path #(-> % io/file .getAbsolutePath) abs-path resolve-symbolic-link
config (cond config (cond
config (if (fs/exists? config) (abs-path config) config (if (fs/exists? config) (abs-path config)
(when debug (when debug
(binding [*out* *err*] (binding [*out* *err*]
(println "[babashka] WARNING: config file does not exist:" config)) (println "[babashka] WARNING: config file does not exist:" config))
nil)) nil))
jar (some-> [jar] cp/new-loader (cp/resource "META-INF/bb.edn") .toString) jar (let [jar (resolve-symbolic-link jar)]
(some-> [jar] cp/new-loader (cp/resource "META-INF/bb.edn") .toString))
:else (if (and file (fs/exists? file)) :else (if (and file (fs/exists? file))
;; file relative to bb.edn ;; file relative to bb.edn
(let [file (fs/real-path file) ;; follow symlink (let [file (abs-path file) ;; follow symlink
rel-bb-edn (fs/file (fs/parent file) "bb.edn")] rel-bb-edn (fs/file (fs/parent file) "bb.edn")]
(if (fs/exists? rel-bb-edn) (if (fs/exists? rel-bb-edn)
(abs-path rel-bb-edn) (abs-path rel-bb-edn)

View file

@ -0,0 +1 @@
adjacent_bb/medley.bb

View file

@ -8,8 +8,7 @@
[borkdude.deps] [borkdude.deps]
[clojure.edn :as edn] [clojure.edn :as edn]
[clojure.string :as str] [clojure.string :as str]
[clojure.test :as test :refer [deftest is testing]] [clojure.test :as test :refer [deftest is testing]]))
[babashka.test-utils :as tu]))
(defn bb [& args] (defn bb [& args]
(let [args (map str args) (let [args (map str args)
@ -321,7 +320,7 @@
(testing "call to run in missing dir gives 'cannot run program' message" (testing "call to run in missing dir gives 'cannot run program' message"
(test-utils/with-config (test-utils/with-config
(pr-str '{:tasks {foo (clojure {:dir "../missingdir"} "-M" "-r")}}) (pr-str '{:tasks {foo (clojure {:dir "../missingdir"} "-M" "-r")}})
; check rough text of error message, specific message about missing directory is OS-dependent ;; check rough text of error message, specific message about missing directory is OS-dependent
(is (thrown-with-msg? Exception #"Cannot run program .* \(in directory \"\.\.[/\\]missingdir\"\)" (is (thrown-with-msg? Exception #"Cannot run program .* \(in directory \"\.\.[/\\]missingdir\"\)"
(bb "run" "foo")))))) (bb "run" "foo"))))))
@ -528,7 +527,9 @@ even more stuff here\"
(deftest adjacent-bb-edn-test (deftest adjacent-bb-edn-test
(is (= {1 {:id 1}} (bb "test-resources/adjacent_bb/medley.bb"))) (is (= {1 {:id 1}} (bb "test-resources/adjacent_bb/medley.bb")))
(is (= {1 {:id 1}} (bb "-f" "test-resources/adjacent_bb/medley.bb")))) (is (= {1 {:id 1}} (bb "-f" "test-resources/adjacent_bb/medley.bb")))
(testing "symlink"
(is (= {1 {:id 1}} (bb "test-resources/symlink-adjacent-bb")))))
(deftest non-existing-tasks-in-run-gives-exit-code-1 (deftest non-existing-tasks-in-run-gives-exit-code-1
(is (thrown? Exception (bb "-Sdeps" "{:tasks {foo {:task (run (quote bar))}}}" "foo")))) (is (thrown? Exception (bb "-Sdeps" "{:tasks {foo {:task (run (quote bar))}}}" "foo"))))
@ -537,6 +538,6 @@ even more stuff here\"
(is (= 6 (bb "-Sdeps" "" "-e" "(+ 1 2 3)")))) (is (= 6 (bb "-Sdeps" "" "-e" "(+ 1 2 3)"))))
(deftest warning-on-override-task (deftest warning-on-override-task
(when-not tu/native? (when-not test-utils/native?
(binding [*out* *err*] (binding [*out* *err*]
(is (str/includes? (with-out-str (bb "-Sdeps" "{:tasks {run {:task 1}}}" "run")) "'run' override"))))) (is (str/includes? (with-out-str (bb "-Sdeps" "{:tasks {run {:task 1}}}" "run")) "'run' override")))))