Merge native-deps functionality. Needs more testing.

This commit is contained in:
Phil Hagelberg 2011-05-06 21:11:14 -07:00
parent ddf3d96f42
commit 665ad07b74
6 changed files with 51 additions and 49 deletions

View file

@ -77,7 +77,7 @@
(symlink {:link destination
:resource (.getCanonicalPath (File. dir f))}))))
(defn make-deps-task [project deps-set]
(defn make-deps-task [project & [deps-set]]
(let [deps-task (DependenciesTask.)]
(.setProject deps-task lancet/ant-project)
;; in maven-ant-tasks (at least 2.0.10 and 2.1.1) if there's an
@ -95,62 +95,64 @@
(.setPathId deps-task (:name project))
(doseq [repo (make-repositories project)]
(.addConfiguredRemoteRepository deps-task repo))
(doseq [dep (project deps-set)]
(doseq [dep (project (or deps-set :dependencies))]
(.addDependency deps-task (make-dependency dep project)))
deps-task))
(defn use-dev-deps? [project skip-dev]
(and (not skip-dev) (seq (:dev-dependencies project))))
(defn- sha1-digest [content]
(.toString (BigInteger. 1 (-> (MessageDigest/getInstance "SHA1")
(.digest (.getBytes content)))) 16))
(defn- deps-checksum [project]
(sha1-digest (pr-str [(:dependencies project)
(:dev-dependencies project)])))
(:dev-dependencies project)
(:native-dependencies project)])))
(defn- new-deps-checksum-file [project]
(File. (:root project) ".lein-deps-sum"))
(defn fetch-deps? [project deps-set skip-dev]
(defn- has-dependencies? [project]
(some (comp seq project) [:dependencies :dev-dependencies
:native-dependencies]))
(defn fetch-deps? [project]
(let [deps-checksum-file (new-deps-checksum-file project)]
(and (or (seq (project deps-set)) (use-dev-deps? project skip-dev))
(or (not (:checksum-deps project))
(not (:checksum-deps (user-settings)))
(empty? (.list (File. (:library-path project))))
(and (has-dependencies? project)
(or (empty? (.list (File. (:library-path project))))
(not (:checksum-deps project (:checksum-deps (user-settings))))
(not (.exists deps-checksum-file))
(not= (slurp deps-checksum-file) (deps-checksum project))))))
(defn ^{:help-arglists '([])} deps
(defn deps
"Download :dependencies and put them in :library-path."
([project skip-dev deps-set]
(when (fetch-deps? project deps-set skip-dev)
(when-not (or (:disable-deps-clean project)
(:disable-implicit-clean project))
(delete-file-recursively (:library-path project) :silently))
(let [deps-task (doto (make-deps-task project deps-set) .execute)
fileset (.getReference lancet/ant-project
(.getFilesetId deps-task))]
(.mkdirs (File. (:library-path project)))
(copy-dependencies (:jar-behavior project)
;; Leiningen's process only has access to lib/dev.
(if (:eval-in-leiningen project)
"lib/dev"
(:library-path project))
true fileset)
(when (use-dev-deps? project skip-dev)
;; TODO: skip-dev/deps-set args are nonsense; we should
;; just replace :dependencies with :dev-dependencies and
;; recur in 2.0.
(deps (assoc project :library-path (str (:root project) "/lib/dev")
:disable-implicit-clean (if (:eval-in-leiningen project)
false
(:disable-implicit-clean
project)))
true :dev-dependencies))
(when (:checksum-deps project)
(spit (new-deps-checksum-file project) (deps-checksum project)))
fileset)))
([project skip-dev] (deps project skip-dev :dependencies))
([project] (deps project false)))
[project]
(when (fetch-deps? project)
(when-not (or (:disable-deps-clean project)
(:disable-implicit-clean project))
(delete-file-recursively (:library-path project) :silently))
(let [deps-task (make-deps-task project)]
(when (seq (:dependencies project))
(.execute deps-task)
(.mkdirs (File. (:library-path project)))
(copy-dependencies (:jar-behavior project)
;; Leiningen's process only has access to lib/dev.
(if (:eval-in-leiningen project)
"lib/dev"
(:library-path project))
true (.getReference lancet/ant-project
(.getFilesetId deps-task))))
(when (seq (:native-dependencies project))
(deps (assoc project :disable-deps-clean true
:dependencies (:native-dependencies project)
:native-dependencies nil :dev-dependencies nil)))
(when (seq (:dev-dependencies project))
(deps (assoc project :library-path (str (:root project) "/lib/dev")
:dependencies (:dev-dependencies project)
:native-dependencies nil :dev-dependencies nil
:disable-implicit-clean (if (:eval-in-leiningen project)
false
(:disable-implicit-clean
project)))))
(when (:checksum-deps project)
(spit (new-deps-checksum-file project) (deps-checksum project)))
(.getReference lancet/ant-project (.getFilesetId deps-task)))))

View file

@ -67,6 +67,7 @@ shell wrappers in ~/.lein/bin when provided."
;; TODO: use lancet/unjar?
(try (extract-jar (file jarfile) temp-project)
(binding [copy-dependencies (constantly nil)]
(deps (read-project (format "%s/project.clj" temp-project)) true))
(deps (dissoc (read-project (format "%s/project.clj" temp-project))
:dev-dependencies :native-dependencies)))
(finally
(delete-file-recursively temp-project :silently))))))

View file

@ -202,7 +202,8 @@ function in that namespace will be used as the main-class for executable jar."
deps (memoize deps)]
(when (zero? (compile/compile project))
(let [jar-path (get-jar-filename project jar-name)
deps-fileset (deps project)]
deps-fileset (deps (dissoc project :dev-dependencies
:native-dependencies))]
(write-jar project jar-path (filespecs project deps-fileset))
(println "Created" jar-path)
jar-path))))

View file

@ -37,7 +37,7 @@ Syntax: lein plugin install [GROUP/]ARTIFACT-ID VERSION
_ (extract-jar (file jarfile) temp-project)
project (read-project (str (file temp-project "project.clj")))
standalone-filename (plugin-standalone-filename group name version)]
(deps (dissoc project :dev-dependencies))
(deps (dissoc project :dev-dependencies :native-dependencies))
(with-open [out (-> (file plugins-path standalone-filename)
(FileOutputStream.)
(ZipOutputStream.))]

View file

@ -25,8 +25,7 @@
(let [jars (set (map #(.getName %)
(.listFiles (file (:root dev-deps-project)
"lib" "dev"))))]
(doseq [j ["clojure-1.2.0.jar"]]
(is (jars j)))))
(is (contains? jars "clojure-1.2.0.jar"))))
(deftest test-snapshots-releases
(try

View file

@ -40,12 +40,11 @@ See also https://github.com/technomancy/leiningen/issues
- improve test coverage
- new push task based on clj-ssh
lein-clojars task doesn't support DSA keys
- merge lucene-based lein-search plugin
* For 1.6
- Merge lein-search
- Merge lein-retest
- Merge native-deps
- Add leiningen.util.inject namespace
- Add leiningen.util.injected namespace
- Trampoline functionality
http://groups.google.com/group/leiningen/browse_thread/thread/a07a7f10edb77c9b
* For 1.5.1