diff --git a/src/babashka/impl/cli.clj b/src/babashka/impl/cli.clj index 49d986d7..3762df6d 100644 --- a/src/babashka/impl/cli.clj +++ b/src/babashka/impl/cli.clj @@ -8,18 +8,21 @@ (def cli-namespace (sci/copy-ns babashka.cli cns)) -(defn exec-fn-snippet [ns var-name] +(defn exec-fn-snippet [sym] (format " (do -(require '%1$s) (require '[babashka.cli]) -(let [ -ns-meta (meta (find-ns '%1$s)) -var-meta (meta (resolve '%1$s/%2$s)) -cli-opts (babashka.cli/merge-opts (:org.babashka/cli ns-meta) (:org.babashka/cli var-meta)) -opts (babashka.cli/parse-opts *command-line-args* cli-opts) -task-exec-args (:exec-args (babashka.tasks/current-task)) -cli-exec-args (:exec-args cli-opts) -opts (babashka.cli/merge-opts cli-exec-args task-exec-args opts)] -(%1$s/%2$s opts)))" - ns var-name)) +(let [var (requiring-resolve `%1$s) + var-meta (meta var) + ns (:ns (meta var)) + ns-meta (meta ns) + ct (babashka.tasks/current-task) + cli-opts (babashka.cli/merge-opts (:org.babashka/cli ns-meta) + (:org.babashka/cli var-meta) + (:org.babashka/cli ct)) + opts (babashka.cli/parse-opts *command-line-args* cli-opts) + task-exec-args (:exec-args ct) + cli-exec-args (:exec-args cli-opts) + opts (babashka.cli/merge-opts cli-exec-args task-exec-args opts)] +(var opts)))" + sym)) diff --git a/src/babashka/impl/tasks.clj b/src/babashka/impl/tasks.clj index 9d611baa..0be65b5a 100644 --- a/src/babashka/impl/tasks.clj +++ b/src/babashka/impl/tasks.clj @@ -268,7 +268,7 @@ (intern *ns* 'run babashka.tasks/run)) (when-not (resolve 'exec) - (intern *ns* (with-meta 'exec {:macro true}) @(var babashka.tasks/exec))) + (intern *ns* 'exec @(var babashka.tasks/exec))) %s %s @@ -457,14 +457,10 @@ (let [[[expr]] (assemble-task task parallel)] (sci/eval-string* @ctx expr)))) -(defn ^:macro exec - "This is a macro so it works correctly with :init" - ([_ _ sym] - (let [ns (namespace sym) - ns (or ns (symbol (str @sci/ns))) - var-name (name sym) - snippet (cli/exec-fn-snippet ns var-name)] - `(load-string ~snippet)))) +(defn exec + ([sym] + (let [snippet (cli/exec-fn-snippet sym)] + (sci/eval-string* @ctx snippet)))) (def tasks-namespace {'shell (sci/copy-var shell sci-ns) diff --git a/src/babashka/main.clj b/src/babashka/main.clj index 2ed4ff5f..4cff399f 100644 --- a/src/babashka/main.clj +++ b/src/babashka/main.clj @@ -874,10 +874,8 @@ Use bb run --help to show this help output. [[(format "(ns user (:require [%1$s])) (apply %1$s/%2$s *command-line-args*)" ns var-name)] nil]) exec-fn - (let [sym (symbol exec-fn) - ns (namespace sym) - var-name (name sym)] - [[(cli/exec-fn-snippet ns var-name)] nil]) + (let [sym (symbol exec-fn)] + [[(cli/exec-fn-snippet sym)] nil]) run (if (:run-help cli-opts) [(print-run-help) 0] (do