[#811] Fix --classpath when no additional args are passed

This commit is contained in:
Michiel Borkent 2021-04-28 20:14:39 +02:00
parent 8deb96b931
commit e26f26c1ba
2 changed files with 158 additions and 155 deletions

View file

@ -437,34 +437,9 @@ When no eval opts or subcommand is provided, the implicit subcommand is repl.")
("--classpath" "-cp") [(nnext options) (second options)]
[options nil])))
(defn parse-opts
([options] (parse-opts options nil))
([options opts]
(let [[options classpath] (parse-global-opts options)
opts (if classpath (assoc opts :classpath classpath)
opts)
opt (first options)
tasks (into #{} (map str) (keys (:tasks @common/bb-edn)))]
(when opt
;; FILE > TASK > SUBCOMMAND
(cond
(fs/regular-file? opt)
(if (str/ends-with? opt ".jar")
{:classpath classpath
:jar opt
:command-line-args (next options)}
{:classpath classpath
:file opt
:command-line-args (next options)})
(contains? tasks opt)
{:run opt
:classpath classpath
:command-line-args (rest options)}
(command? opt)
(recur (cons (str "--" opt) (next options)) opts)
:else
(let [opts (loop [options options
opts-map opts]
(defn parse-args [args opts-map]
(loop [options args
opts-map opts-map]
(if options
(let [opt (first options)]
(case opt
@ -594,8 +569,35 @@ When no eval opts or subcommand is provided, the implicit subcommand is repl.")
:jar
:file) opt
:command-line-args (next options)))))))
opts-map))]
opts))))))
opts-map)))
(defn parse-opts
([options] (parse-opts options nil))
([options opts-map]
(let [[options classpath] (parse-global-opts options)
opts-map (if classpath (assoc opts-map :classpath classpath)
opts-map)
opt (first options)
tasks (into #{} (map str) (keys (:tasks @common/bb-edn)))]
(if-not opt opts-map
;; FILE > TASK > SUBCOMMAND
(cond
(fs/regular-file? opt)
(if (str/ends-with? opt ".jar")
{:classpath classpath
:jar opt
:command-line-args (next options)}
{:classpath classpath
:file opt
:command-line-args (next options)})
(contains? tasks opt)
{:run opt
:classpath classpath
:command-line-args (rest options)}
(command? opt)
(recur (cons (str "--" opt) (next options)) opts-map)
:else
(parse-args options opts-map))))))
(def env (atom {}))

View file

@ -46,7 +46,8 @@
(is (= '("-e" "1") (bb nil "-e" "*command-line-args*" "--" "-e" "1")))
(let [v (bb nil "--describe")]
(is (:babashka/version v))
(is (:feature/xml v))))
(is (:feature/xml v)))
(is (= "src" (:classpath (main/parse-opts ["--classpath" "src"])))))
(deftest version-test
(is (= [1 0 0] (main/parse-version "1.0.0-SNAPSHOT")))