Merge pull request #2164 from cprice404/feature/master/support-reading-proj-from-reader
Add support for reading project from Reader instead of file
This commit is contained in:
commit
41febc332c
2 changed files with 24 additions and 12 deletions
|
@ -11,7 +11,7 @@
|
|||
[leiningen.core.user :as user]
|
||||
[leiningen.core.classpath :as classpath])
|
||||
(:import (clojure.lang DynamicClassLoader)
|
||||
(java.io PushbackReader)))
|
||||
(java.io PushbackReader Reader)))
|
||||
|
||||
(defn make-project-properties [project]
|
||||
(with-open [baos (java.io.ByteArrayOutputStream.)]
|
||||
|
@ -400,10 +400,11 @@
|
|||
"The project.clj file must either def a project map or call this macro.
|
||||
See `lein help sample` to see what arguments it accepts."
|
||||
[project-name version & args]
|
||||
`(let [args# ~(unquote-project (argument-list->argument-map args))
|
||||
root# ~(.getParent (io/file *file*))]
|
||||
(def ~'project
|
||||
(make args# '~project-name ~version root#))))
|
||||
(let [f (io/file *file*)]
|
||||
`(let [args# ~(unquote-project (argument-list->argument-map args))
|
||||
root# ~(if f (.getParent f))]
|
||||
(def ~'project
|
||||
(make args# '~project-name ~version root#)))))
|
||||
|
||||
(defn- add-exclusions [exclusions dep]
|
||||
(dependency-vec
|
||||
|
@ -949,15 +950,18 @@ Also merges default profiles."
|
|||
|
||||
(defn read-raw
|
||||
"Read project file without loading certificates, plugins, middleware, etc."
|
||||
[file]
|
||||
[source]
|
||||
(locking read-raw
|
||||
(binding [*ns* (find-ns 'leiningen.core.project)]
|
||||
(try (load-file file)
|
||||
(catch Exception e
|
||||
(throw (Exception. (format "Error loading %s" file) e)))))
|
||||
(try
|
||||
(if (instance? Reader source)
|
||||
(load-reader source)
|
||||
(load-file source))
|
||||
(catch Exception e
|
||||
(throw (Exception. (format "Error loading %s" source) e)))))
|
||||
(let [project (resolve 'leiningen.core.project/project)]
|
||||
(when-not project
|
||||
(throw (Exception. (format "%s must define project map" file))))
|
||||
(throw (Exception. (format "%s must define project map" source))))
|
||||
;; return it to original state
|
||||
(ns-unmap 'leiningen.core.project 'project)
|
||||
@project)))
|
||||
|
|
|
@ -3,11 +3,11 @@
|
|||
(:use [clojure.test]
|
||||
[leiningen.core.project :as project])
|
||||
(:require [leiningen.core.user :as user]
|
||||
[leiningen.core.classpath :as classpath]
|
||||
[leiningen.core.test.helper :refer [abort-msg]]
|
||||
[leiningen.test.helper :as lthelper]
|
||||
[leiningen.core.utils :as utils]
|
||||
[clojure.java.io :as io]))
|
||||
[clojure.java.io :as io])
|
||||
(:import (java.io StringReader)))
|
||||
|
||||
(use-fixtures :once
|
||||
(fn [f]
|
||||
|
@ -64,6 +64,14 @@
|
|||
(is (= (for [p path] (lthelper/pathify (str (:root actual) "/" p)))
|
||||
(k actual))))))
|
||||
|
||||
(deftest test-read-project-from-reader
|
||||
(let [project-string "(defproject foo \"0.0.1-SNAPSHOT\" :description \"foo\")"
|
||||
project-reader (StringReader. project-string)
|
||||
project (read project-reader)]
|
||||
(is (= "foo" (:group project)))
|
||||
(is (= "foo" (:name project)))
|
||||
(is (= "foo" (:description project)))))
|
||||
|
||||
;; TODO: test omit-default
|
||||
;; TODO: test reading project that doesn't def project
|
||||
|
||||
|
|
Loading…
Reference in a new issue