diff --git a/src/leiningen/install.clj b/src/leiningen/install.clj index 43513be9..85246266 100644 --- a/src/leiningen/install.clj +++ b/src/leiningen/install.clj @@ -1,18 +1,13 @@ (ns leiningen.install "Install the current project or download the project specified." - (:use [leiningen.core :only [default-repos read-project]] - [leiningen.jar :only [jar manifest-map local-repo-path]] - [leiningen.deps :only [deps]] + (:require [cemerick.pomegranate.aether :as aether] + [leiningen.core.project :as project]) + (:use [leiningen.jar :only [jar]] [leiningen.pom :only [pom]] [clojure.java.io :only [file copy]]) (:import (java.util.jar JarFile) (java.util UUID))) -(declare container make-model make-remote-artifact - make-remote-repo make-local-repo - make-artifact add-metadata tmp-dir - get-os leiningen-home) - ;; (defn bin-path [] ;; (doto (file (leiningen-home) "bin") .mkdirs)) @@ -30,11 +25,6 @@ ;; (copy (.getInputStream jarfile zip-entry) bin-file) ;; (.setExecutable bin-file true))))))) -;; (defn standalone-download [name group version] -;; (.resolveAlways (.lookup container ArtifactResolver/ROLE) -;; (make-remote-artifact name group version) -;; (map make-remote-repo default-repos) -;; (make-local-repo))) (defn install "Install current project or download specified project. @@ -45,36 +35,22 @@ downloads and installs a project from a remote repository. Places shell wrappers in ~/.lein/bin when provided." ([project] (let [jarfile (jar project) - model (make-model project) - artifact (make-artifact model) - installer nil - local-repo (make-local-repo)] - ;; for packaging other than "pom" there should be "pom.xml" - ;; generated and installed in local repo - (when (not= "pom" (.getPackaging model)) - (add-metadata artifact (file (pom project)))) + pomfile (pom project)] (if (number? jarfile) ;; if we failed to create the jar, return the status code for exit jarfile (do ;; (install-shell-wrappers (JarFile. jarfile)) - (.install installer (file jarfile) artifact local-repo) + (aether/install :coordinates [(symbol (:group project) + (:name project)) + (:version project)] + :jar-file (file jarfile) + :pom-file (file pomfile)) 0)))) - ([project-name version] + ([_ project-name version] (let [[name group] ((juxt name namespace) (symbol project-name)) - ;; _ (standalone-download name (or group name) version) - temp-project (format "%s/lein-%s" tmp-dir (UUID/randomUUID)) - jarfile (local-repo-path (or group name) name version)] - ;; (install-shell-wrappers (JarFile. jarfile)) - ;; TODO: reach in and pull out project.clj rather than - ;; extracting it all - ;; (try (extract-jar (file jarfile) temp-project) - ;; (when-let [p (read-project (str temp-project "/project.clj"))] - ;; (deps (dissoc p :dev-dependencies :native-dependencies))) - ;; (finally - ;; (delete-file-recursively temp-project :silently))) - ))) - -;; (defn get-jar-entry [jar-file entry-name] -;; (let [jar (JarFile. jar-file true) -;; entry (.getJarEntry jar entry-name)] -;; (.getInputStream jar entry))) \ No newline at end of file + temp-project (format "%s/lein-%s" (System/getProperty "java.io.tmpdir") (UUID/randomUUID)) + jarfile (first (aether/resolve-dependencies + :coordinates [[(symbol project-name) version]] + :repositories (:repositories project/defaults)))] + ;; (install-shell-wrappers (JarFile. jarfile)) + ))) \ No newline at end of file diff --git a/src/leiningen/jar.clj b/src/leiningen/jar.clj index 5919ec36..f17cc146 100644 --- a/src/leiningen/jar.clj +++ b/src/leiningen/jar.clj @@ -12,7 +12,6 @@ (java.io BufferedOutputStream FileOutputStream ByteArrayInputStream))) -(declare local-repo-path) ; placate install.clj for now ;; (declare make-local-repo) diff --git a/test/leiningen/test/install.clj b/test/leiningen/test/install.clj index 8a385337..977e2fa8 100644 --- a/test/leiningen/test/install.clj +++ b/test/leiningen/test/install.clj @@ -1,55 +1,56 @@ (ns leiningen.test.install (:require [leiningen.core.user :as user]) (:use [clojure.test] - [leiningen.install :exclude [tmp-dir]] + [leiningen.install] [leiningen.test.helper] [clojure.java.io :only [file]])) -(def unix-shell-wrapper (file (user/leiningen-home) "bin" "nom")) -(def windows-shell-wrapper (file (user/leiningen-home) "bin" "nom.bat")) +;; (def unix-shell-wrapper (file (user/leiningen-home) "bin" "nom")) +;; (def windows-shell-wrapper (file (user/leiningen-home) "bin" "nom.bat")) -(defn delete-shell-wrappers [] - (.delete unix-shell-wrapper) - (.delete windows-shell-wrapper)) +;; (defn delete-shell-wrappers [] +;; (.delete unix-shell-wrapper) +;; (.delete windows-shell-wrapper)) (deftest test-install (delete-file-recursively (m2-dir "nomnomnom" "0.5.0-SNAPSHOT") true) - (delete-shell-wrappers) + ;; (delete-shell-wrappers) (is (zero? (install sample-project))) (is (not (empty? (.listFiles (m2-dir "nomnomnom" "0.5.0-SNAPSHOT"))))) - (is (.exists unix-shell-wrapper)) - (if (= :windows (get-os)) - (is (.exists windows-shell-wrapper)) - (is (not (.exists windows-shell-wrapper))))) + ;; (is (.exists unix-shell-wrapper)) + ;; (if (= :windows (get-os)) + ;; (is (.exists windows-shell-wrapper)) + ;; (is (not (.exists windows-shell-wrapper)))) + ) (def jdom-dir (file local-repo "jdom" "jdom" "1.0")) (deftest test-standalone-install (delete-file-recursively jdom-dir true) - (delete-shell-wrappers) - (install "nomnomnom" "0.5.0-SNAPSHOT") + ;; (delete-shell-wrappers) + (install nil "nomnomnom" "0.5.0-SNAPSHOT") (is (not (empty? (.listFiles jdom-dir)))) - (is (.exists unix-shell-wrapper))) +;; (is (.exists unix-shell-wrapper)) + ) (def tricky-m2-dir (file local-repo "org" "domain" "tricky-name" "1.0")) -(def tricky-unix-shell-wrapper (file (user/leiningen-home) - "bin" "tricky-name")) -(def tricky-windows-shell-wrapper (file (user/leiningen-home) - "bin" "tricky-name.bat")) +;; (def tricky-unix-shell-wrapper (file (user/leiningen-home) +;; "bin" "tricky-name")) +;; (def tricky-windows-shell-wrapper (file (user/leiningen-home) +;; "bin" "tricky-name.bat")) -(defn delete-tricky-shell-wrappers [] - (.delete tricky-unix-shell-wrapper) - (.delete tricky-windows-shell-wrapper)) +;; (defn delete-tricky-shell-wrappers [] +;; (.delete tricky-unix-shell-wrapper) +;; (.delete tricky-windows-shell-wrapper)) (deftest test-tricky-name-install (delete-file-recursively tricky-m2-dir true) - (delete-shell-wrappers) + ;; (delete-shell-wrappers) (install tricky-name-project) - (install "org.domain/tricky-name" "1.0") + (install nil "org.domain/tricky-name" "1.0") (is (not (empty? (.listFiles tricky-m2-dir)))) - (is (.exists tricky-unix-shell-wrapper)) - (if (= :windows (get-os)) - (is (.exists tricky-windows-shell-wrapper)) - (is (not (.exists tricky-windows-shell-wrapper))))) - -(doseq [[_ var] (ns-publics *ns*)] (alter-meta! var assoc :busted true)) \ No newline at end of file + ;; (is (.exists tricky-unix-shell-wrapper)) + ;; (if (= :windows (get-os)) + ;; (is (.exists tricky-windows-shell-wrapper)) + ;; (is (not (.exists tricky-windows-shell-wrapper)))) + ) diff --git a/todo.org b/todo.org index e1e59824..886aadc7 100644 --- a/todo.org +++ b/todo.org @@ -28,7 +28,7 @@ See also https://github.com/technomancy/leiningen/issues ** Other stuff - [ ] Rework prep function to ensure that AOT/javac happens when needed - [ ] Allow tasks to add in their own injections - - [ ] Accept more flexible :repositories args for pomegranate 0.0.2 + - [-] Accept more flexible :repositories args for pomegranate 0.0.4 - [ ] Add :dynamic metadata to clucy (bablien has patches for this) - [X] Move pom generation to pomegranate or leiningen - [ ] Non-transitive AOT @@ -51,7 +51,7 @@ See also https://github.com/technomancy/leiningen/issues - [X] help (needs tests) - [X] search - [X] pom (steal from depot) - - [ ] install (minus shell wrappers) + - [X] install (minus shell wrappers) - [X] uberjar - [ ] repl (figure out nrepl integration) *** Tasks for full release (currently tagged :busted)