Added support for :exact-lein-version.

This commit is contained in:
Anton Fonarev 2017-11-06 02:42:17 +03:00
parent 20922b067a
commit fefe94d124
3 changed files with 33 additions and 0 deletions

View file

@ -348,6 +348,21 @@ These get replaced with the corresponding values from the project map."
(.load reader))
(.getProperty "version")))))
(def ^:private exact-version-error
"This project has :exact-lein-version set to \"%s\", while you have %s.")
(defn versions-match? [v1 v2]
(let [v1 (string/trim (first (string/split v1 #"-" 2)))
v2 (string/trim (first (string/split v2 #"-" 2)))]
(= v1 v2)))
(defn- verify-exact-version
[{:keys [exact-lein-version]}]
(when-not (versions-match? exact-lein-version (leiningen-version))
(abort (format exact-version-error
exact-lein-version
(leiningen-version)))))
(defn version-satisfies? [v1 v2]
(let [v1 (map #(Integer. %) (re-seq #"\d+" (first (string/split v1 #"-" 2))))
v2 (map #(Integer. %) (re-seq #"\d+" (first (string/split v2 #"-" 2))))]
@ -415,6 +430,7 @@ intentional please see `lein help faq` for details."))
(let [project (if (.exists (io/file *cwd* "project.clj"))
(project/read (str (io/file *cwd* "project.clj")))
(default-project))]
(when (:exact-lein-version project) (verify-exact-version project))
(when (:min-lein-version project) (verify-min-version project))
(configure-http)
(resolve-and-apply project raw-args))

View file

@ -91,6 +91,18 @@
["one-or-two" "clojure" "2"] ["3"]
["fixed-and-var-args" "one"] []))
(deftest test-versions-match
(is (versions-match? "1.2.12" "1.2.12"))
(is (versions-match? "3.0" "3.0"))
(is (versions-match? " 12.1.2" "12.1.2 "))
(is (not (versions-match? "1.2" "1.3")))
(is (not (versions-match? "1.2.0" "1.2")))
(is (not (versions-match? "1.2" "1.2.0")))
(is (versions-match? "2.1.3-SNAPSHOT" "2.1.3"))
(is (versions-match? " 2.1.3-SNAPSHOT" "2.1.3"))
(is (versions-match? "2.1.3" "2.1.3-FOO"))
(is (not (versions-match? "3.0.0" "3.0.1-BAR"))))
(deftest test-version-satisfies
(is (version-satisfies? "1.5.0" "1.4.2"))
(is (not (version-satisfies? "1.4.2" "1.5.0")))

View file

@ -36,6 +36,11 @@
;; relies on features only found in newer Leiningen versions.
:min-lein-version "2.0.0"
;; You can require a specific version of Leiningen. In case of mismatch
;; execution will abort. When versions are compared, suffixes such as
;; "-SNAPSHOT" are dropped.
;; :exact-lein-version "2.8.2"
;;; Dependencies, Plugins, and Repositories
;; Dependencies are listed as [group-id/name version]; in addition
;; to keywords supported by Pomegranate, you can use :native-prefix