From 7acdf16a2999ce5dd2d212db1b78740bba5860f8 Mon Sep 17 00:00:00 2001 From: Colin Jones Date: Sat, 31 Jul 2010 15:58:58 -0500 Subject: [PATCH] unifying interactive and normal task calling --- src/leiningen/core.clj | 19 +++++++++++-------- src/leiningen/interactive.clj | 9 +++------ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/leiningen/core.clj b/src/leiningen/core.clj index a8d8a966..51aea513 100644 --- a/src/leiningen/core.clj +++ b/src/leiningen/core.clj @@ -102,8 +102,16 @@ (replace \_ \-) (replace \/ \.))) -(defn project-needed [taskname] - (some #{'project} (map first (:arglists (meta (resolve-task taskname)))))) +(defn project-needed [task-name] + (some #{'project} (map first (:arglists (meta (resolve-task task-name)))))) + +(defn apply-task [task-name project args not-found] + ;; TODO: can we catch only task-level arity problems here? + ;; compare args and (:arglists (meta (resolve-task task)))? + (let [task (resolve-task task-name not-found)] + (if (project-needed task-name) + (apply task project args) + (apply task args)))) (defn -main ([& [task-name & args]] @@ -114,12 +122,7 @@ (binding [*compile-path* compile-path] (when project (load-hooks project)) - ;; TODO: can we catch only task-level arity problems here? - ;; compare args and (:arglists (meta (resolve-task task)))? - (let [task (resolve-task task-name) - value (apply task (if project - (cons project args) - args))] + (let [value (apply-task task-name project args task-not-found)] (when (integer? value) (System/exit value)))))) ([] (apply -main (or *command-line-args* ["help"])))) diff --git a/src/leiningen/interactive.clj b/src/leiningen/interactive.clj index 2ae943f3..19985600 100644 --- a/src/leiningen/interactive.clj +++ b/src/leiningen/interactive.clj @@ -1,6 +1,6 @@ (ns leiningen.interactive (:require [clojure.string :as string]) - (:use [leiningen.core :only [resolve-task project-needed]])) + (:use [leiningen.core :only [apply-task]])) (defn not-found [& _] (println "That's not a task. Use \"lein help\" to list all tasks.")) @@ -16,9 +16,6 @@ ;; TODO: integrate with tab-completion in jLine (let [input (.readLine *in*)] (when input - (let [[task-name & args] (string/split input #"\s") - task (resolve-task task-name not-found)] - (if (project-needed task-name) - (apply task project args) - (apply task args)) + (let [[task-name & args] (string/split input #"\s")] + (apply-task task-name project args not-found) (recur))))))