diff --git a/src/babashka/impl/cli.clj b/src/babashka/impl/cli.clj index 49d986d7..e39641e1 100644 --- a/src/babashka/impl/cli.clj +++ b/src/babashka/impl/cli.clj @@ -8,18 +8,18 @@ (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) + 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)] +(var opts)))" + sym)) diff --git a/src/babashka/impl/tasks.clj b/src/babashka/impl/tasks.clj index 9d611baa..90ccf347 100644 --- a/src/babashka/impl/tasks.clj +++ b/src/babashka/impl/tasks.clj @@ -457,13 +457,9 @@ (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)] +(defn exec + ([sym] + (let [snippet (cli/exec-fn-snippet sym)] `(load-string ~snippet)))) (def tasks-namespace