From a91c940846039a6c3232125bb06be9b19c641f37 Mon Sep 17 00:00:00 2001 From: Reid 'arrdem' McKenzie Date: Wed, 9 Mar 2016 19:34:40 -0600 Subject: [PATCH 1/6] Add *jaunt-version*, deprecate *clojure-version* This patch introduces `clojure.core/*jaunt-version*` and `clojure.core/jaunt-version`, replacing and deprecating `clojure.core/*clojure-version*` and `clojure.core/clojure-version`. `*jaunt-version*` tracks the built version of Jaunt, and contains some undocumented/unofficial information about the particular build. `jaunt-version` reports the version of Jaunt as a printable string. `*clojure-version*` has been hardcoded to 1.8.0, being the version of Clojure from which Jaunt is derived. `*clojure-version*` is no longer derived from a version file. `clojure-version` has also been hardcoded to the string constant `"1.8.0"` as `*clojure-version*` is also a hardcoded constant. --- build.xml | 2 +- pom.xml | 2 +- src/clj/clojure/core.clj | 118 ++++++++++++++++++++++++++------------- src/clj/clojure/main.clj | 2 +- 4 files changed, 83 insertions(+), 41 deletions(-) diff --git a/build.xml b/build.xml index 41b723b9..de0e795a 100644 --- a/build.xml +++ b/build.xml @@ -29,7 +29,7 @@ - + diff --git a/pom.xml b/pom.xml index ebe0dfe7..11ec0b27 100644 --- a/pom.xml +++ b/pom.xml @@ -191,7 +191,7 @@ ${project.basedir}/.git true - src/resources/clojure/git.properties + src/resources/jaunt/git.properties diff --git a/src/clj/clojure/core.clj b/src/clj/clojure/core.clj index 2e1e4c2f..fd4cb490 100644 --- a/src/clj/clojure/core.clj +++ b/src/clj/clojure/core.clj @@ -6861,46 +6861,88 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; clojure version number ;;;;;;;;;;;;;;;;;;;;;; -(let [properties (with-open [version-stream (.getResourceAsStream - (clojure.lang.RT/baseLoader) - "clojure/version.properties")] - (doto (new java.util.Properties) - (.load version-stream))) - version-string (.getProperty properties "version") - [_ major minor incremental qualifier snapshot] - (re-matches - #"(\d+)\.(\d+)\.(\d+)(?:-([a-zA-Z0-9_]+))?(?:-(SNAPSHOT))?" - version-string) - clojure-version {:major (Integer/valueOf ^String major) - :minor (Integer/valueOf ^String minor) - :incremental (Integer/valueOf ^String incremental) - :qualifier (if (= qualifier "SNAPSHOT") nil qualifier)}] - (def ^:dynamic *clojure-version* - (if (.contains version-string "SNAPSHOT") - (clojure.lang.RT/assoc clojure-version :interim true) - clojure-version))) - -(add-doc-and-meta *clojure-version* - "The version info for Clojure core, as a map containing :major :minor - :incremental and :qualifier keys. Feature releases may increment - :minor and/or :major, bugfix releases will increment :incremental. - Possible values of :qualifier include \"GA\", \"SNAPSHOT\", \"RC-x\" \"BETA-x\"" - {:added "1.0"}) +(def + ^{:dynamic true + :deprecated "FIXME" + :added "1.0"} + *clojure-version* + "DEPRECATED: replaced by *jaunt-version* + + The version of Clojure from which this Jaunt build is derived. Version information is encoded as a + map containing :major :minor :incremental and :qualifier keys." + {:major 1 + :minor 8 + :incremental 0 + :qualifier nil}) + +(defn clojure-version + "DEPRECATED: replaced by jaunt-version + + Returns clojure version as a printable string." + {:added "1.0" + :deprecated "FIXME"} + [] + "1.8.0") + +(defn- parse-version [v] + {:pre [(string? v)]} + (let [[_ major minor incremental qualifier] + ,,(re-matches #"^(\d+)\.(\d+)\.(\d+)(-.*)?$" v)] + {:major (Integer/valueOf ^String major) + :minor (Integer/valueOf ^String minor) + :incremental (Integer/valueOf ^String incremental) + :interim (.endsWith ^String qualifier "-SNAPSHOT") + :qualifiers (->> (.split ^String qualifier "-") + (filter (complement empty?)) + set) + ::raw-version v})) + +(defn- read-version-properties [p] + (-> (with-open [version-stream + (.getResourceAsStream (clojure.lang.RT/baseLoader) p)] + (doto (new java.util.Properties) + (.load version-stream))) + (.getProperty "version") + (parse-version))) + +(defn- read-git-properties [p] + (let [m (with-open [version-stream + (.getResourceAsStream (clojure.lang.RT/baseLoader) p)] + (doto (new java.util.Properties) + (.load version-stream))) + prop (partial get m)] + {::build {:dirty (Boolean/valueOf (prop "git.dirty")) + :date (-> (new java.text.SimpleDateFormat "dd.MM.yyyy '@' HH:mm:ss z") + (.parse (prop "git.build.time"))) + :git {:closest-tag (prop "git.closest.tag.name") + :commit (prop "git.commit.id.abbrev") + :branch (prop "git.branch")}}})) + +(defn- ensure-interim [m] + (update m :interim #(or %1 (-> m ::build (get :dirty false))))) -(defn - clojure-version - "Returns clojure version as a printable string." - {:added "1.0"} +(def + ^{:dynamic true + :added "FIXME"} + *jaunt-version* + "The version number of the Jaunt build. + + :major - integer value of the SemVer major version + :minor - integer value of the SemVer minor version + :incremental - integer value of the SemVer patch version + :interim - boolean indicating whether the build is dirty or a snapshot + :qualifiers - a set of strings, being the version qualifiers." + (-> (read-version-properties "jaunt/version.properties") + (merge (read-git-properties "jaunt/git.properties")) + ensure-interim)) + +(defn jaunt-version + "Returns the Jaunt version as a printable string." + {:added "FIXME"} [] - (str (:major *clojure-version*) - "." - (:minor *clojure-version*) - (when-let [i (:incremental *clojure-version*)] - (str "." i)) - (when-let [q (:qualifier *clojure-version*)] - (when (pos? (count q)) (str "-" q))) - (when (:interim *clojure-version*) - "-SNAPSHOT"))) + (or (::raw-version *jaunt-version*) + (let [{:keys [major minor incremental qualifier]} *jaunt-version*] + (format "%d.%d.%d%s" major minor incremental qualifier)))) (defn promise "Returns a promise object that can be read with deref/@, and set, diff --git a/src/clj/clojure/main.clj b/src/clj/clojure/main.clj index d9fda451..3e015b9d 100644 --- a/src/clj/clojure/main.clj +++ b/src/clj/clojure/main.clj @@ -321,7 +321,7 @@ by default when a new command-line REPL is started."} repl-requires present" [[_ & args] inits] (when-not (some #(= eval-opt (init-dispatch (first %))) inits) - (println "Jaunt" (clojure-version))) + (println "Jaunt" (jaunt-version))) (repl :init (fn [] (initialize args inits) (apply require repl-requires))) From 0d8ede67c83ce8cc454f6053c45fa20a3972e8c0 Mon Sep 17 00:00:00 2001 From: Reid 'arrdem' McKenzie Date: Thu, 10 Mar 2016 15:42:29 -0600 Subject: [PATCH 2/6] Factor out Properties parsing --- src/clj/clojure/core.clj | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/clj/clojure/core.clj b/src/clj/clojure/core.clj index fd4cb490..285fa931 100644 --- a/src/clj/clojure/core.clj +++ b/src/clj/clojure/core.clj @@ -6884,6 +6884,12 @@ [] "1.8.0") +(defn- load-properties [path] + {:pre [(string? path)]} + (with-open [version-stream (.getResourceAsStream (clojure.lang.RT/baseLoader) path)] + (doto (new java.util.Properties) + (.load version-stream)))) + (defn- parse-version [v] {:pre [(string? v)]} (let [[_ major minor incremental qualifier] @@ -6897,19 +6903,13 @@ set) ::raw-version v})) -(defn- read-version-properties [p] - (-> (with-open [version-stream - (.getResourceAsStream (clojure.lang.RT/baseLoader) p)] - (doto (new java.util.Properties) - (.load version-stream))) +(defn- read-version-properties [path] + (-> (load-properties path) (.getProperty "version") (parse-version))) -(defn- read-git-properties [p] - (let [m (with-open [version-stream - (.getResourceAsStream (clojure.lang.RT/baseLoader) p)] - (doto (new java.util.Properties) - (.load version-stream))) +(defn- read-git-properties [path] + (let [m (load-properties path) prop (partial get m)] {::build {:dirty (Boolean/valueOf (prop "git.dirty")) :date (-> (new java.text.SimpleDateFormat "dd.MM.yyyy '@' HH:mm:ss z") From bca83e5a86a23d092758fe91504ec88315d93b25 Mon Sep 17 00:00:00 2001 From: Reid 'arrdem' McKenzie Date: Thu, 10 Mar 2016 15:43:45 -0600 Subject: [PATCH 3/6] Use not-empty --- src/clj/clojure/core.clj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/clj/clojure/core.clj b/src/clj/clojure/core.clj index 285fa931..9c5ae49d 100644 --- a/src/clj/clojure/core.clj +++ b/src/clj/clojure/core.clj @@ -6899,7 +6899,7 @@ :incremental (Integer/valueOf ^String incremental) :interim (.endsWith ^String qualifier "-SNAPSHOT") :qualifiers (->> (.split ^String qualifier "-") - (filter (complement empty?)) + (filter not-empty) set) ::raw-version v})) From 58c15f6b50e49571b716077fc9e8a8b8c1b54f35 Mon Sep 17 00:00:00 2001 From: Reid 'arrdem' McKenzie Date: Wed, 9 Mar 2016 19:36:58 -0600 Subject: [PATCH 4/6] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 668a807a..f0fbb96a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## Change Log ### upcoming +- [#95](https://github.com/jaunt-lang/jaunt/pull/95) Introduce `*jaunt-version*`, deprecating `*clojure-version*` (@arrdem). - [#101](https://github.com/jaunt-lang/jaunt/pull/99) Add small (64px, 128px) logos (@arrdem). - [#99](https://github.com/jaunt-lang/jaunt/pull/99) Bugfix: make `private?` check `^:private` (@arrdem). - Fix `private?` to check the correct metadata From 72a17a535908066f4403d0dc3899027bba788128 Mon Sep 17 00:00:00 2001 From: Reid 'arrdem' McKenzie Date: Tue, 15 Mar 2016 13:16:25 -0500 Subject: [PATCH 5/6] Don't pull in the tag property Since it's rarely meaningful --- src/clj/clojure/core.clj | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/clj/clojure/core.clj b/src/clj/clojure/core.clj index 9c5ae49d..1e40dddd 100644 --- a/src/clj/clojure/core.clj +++ b/src/clj/clojure/core.clj @@ -6914,8 +6914,7 @@ {::build {:dirty (Boolean/valueOf (prop "git.dirty")) :date (-> (new java.text.SimpleDateFormat "dd.MM.yyyy '@' HH:mm:ss z") (.parse (prop "git.build.time"))) - :git {:closest-tag (prop "git.closest.tag.name") - :commit (prop "git.commit.id.abbrev") + :git {:commit (prop "git.commit.id.abbrev") :branch (prop "git.branch")}}})) (defn- ensure-interim [m] From e74b42859c35254fa6b86df6d5403114608785ff Mon Sep 17 00:00:00 2001 From: Reid 'arrdem' McKenzie Date: Tue, 15 Mar 2016 13:23:48 -0500 Subject: [PATCH 6/6] Update the REPL message --- src/clj/clojure/main.clj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/clj/clojure/main.clj b/src/clj/clojure/main.clj index 3e015b9d..f042b957 100644 --- a/src/clj/clojure/main.clj +++ b/src/clj/clojure/main.clj @@ -321,7 +321,7 @@ by default when a new command-line REPL is started."} repl-requires present" [[_ & args] inits] (when-not (some #(= eval-opt (init-dispatch (first %))) inits) - (println "Jaunt" (jaunt-version))) + (printf "Jaunt %s (Clojure %s derived)\n" (jaunt-version) (clojure-version))) (repl :init (fn [] (initialize args inits) (apply require repl-requires)))