Fix #1658: fix command-line args with overlapping bb options

This commit is contained in:
Michiel Borkent 2024-01-12 20:26:07 +01:00
parent 707e430bc5
commit 3d69cbf13c
5 changed files with 9 additions and 6 deletions

View file

@ -7,6 +7,10 @@ A preview of the next release can be installed from
[Babashka](https://github.com/babashka/babashka): Native, fast starting Clojure interpreter for scripting [Babashka](https://github.com/babashka/babashka): Native, fast starting Clojure interpreter for scripting
## Unreleased
- [#1658](https://github.com/babashka/babashka/issues/1658): fix command line parsing for scripts that parse `--version` or `version` etc
## 1.3.187 (2023-01-09) ## 1.3.187 (2023-01-09)
- Add `clojure.reflect/reflect` - Add `clojure.reflect/reflect`

View file

@ -746,8 +746,7 @@ Use bb run --help to show this help output.
(and (not (or (:file opts-map) (and (not (or (:file opts-map)
(:jar opts-map))) (:jar opts-map)))
(.isFile (io/file opt))) (.isFile (io/file opt)))
(let [[args opts] (parse-file-opt options opts-map)] (parse-file-opt options opts-map)
(assoc opts :command-line-args args))
(contains? tasks opt) (contains? tasks opt)
(assoc opts-map (assoc opts-map
:run opt :run opt
@ -1147,7 +1146,6 @@ Use bb run --help to show this help output.
(list* "--jar" bin-jar "--" args) (list* "--jar" bin-jar "--" args)
args) args)
[args opts] (parse-global-opts args) [args opts] (parse-global-opts args)
;; TODO: drop jar file from opts
[args {:keys [jar file config merge-deps debug] :as opts}] [args {:keys [jar file config merge-deps debug] :as opts}]
(if-not (or (:file opts) (if-not (or (:file opts)
(:jar opts)) (:jar opts))

View file

@ -1 +1 @@
(prn (first *command-line-args*)) (prn *command-line-args*)

View file

@ -388,7 +388,7 @@ even more stuff here\"
(try (try
(spit "uberjar" "#!/usr/bin/env bb\n(+ 1 2 3)") (spit "uberjar" "#!/usr/bin/env bb\n(+ 1 2 3)")
(vreset! common/bb-edn '{:tasks {uberjar (+ 1 2 3)}}) (vreset! common/bb-edn '{:tasks {uberjar (+ 1 2 3)}})
(is (= "uberjar" (:file (main/parse-opts ["uberjar"])))) (is (= {:file "uberjar", :command-line-args '("--version")} (second (main/parse-opts ["uberjar" "--version"]))))
(finally (fs/delete "uberjar")))))) (finally (fs/delete "uberjar"))))))
(deftest min-bb-version-test (deftest min-bb-version-test

View file

@ -73,7 +73,8 @@
(main/parse-opts ["-e" "(prn :foo)"] opts))))) (main/parse-opts ["-e" "(prn :foo)"] opts)))))
(is (= {:file "foo", :command-line-args ["README.md"]} (is (= {:file "foo", :command-line-args ["README.md"]}
(main/parse-opts ["README.md"] {:file "foo"}))) (main/parse-opts ["README.md"] {:file "foo"})))
(prn (bb nil (fs/file "test-resources" "script_with_overlapping_opts.clj") "--version")))) (is (= ["--version"] (bb nil (fs/file "test-resources" "script_with_overlapping_opts.clj") "--version")))
(is (= ["version"] (bb nil (fs/file "test-resources" "script_with_overlapping_opts.clj") "version")))))
(deftest version-test (deftest version-test
(is (= [1 0 0] (main/parse-version "1.0.0-SNAPSHOT"))) (is (= [1 0 0] (main/parse-version "1.0.0-SNAPSHOT")))