|
|
@@ -0,0 +1,80 @@ |
|
|
;;; XML parsing and clojure.zip |
|
|
|
|
|
;;; There's got to be a cleaner way to do this. |
|
|
|
|
|
;;; I have code like this: |
|
|
|
|
|
(defn jdks-loc [xml-zipper] |
|
|
(zip/down |
|
|
(first |
|
|
(filter #(let [n (zip/node %)] |
|
|
(and (map? n) (= :jdks (:tag n)))) |
|
|
(iterate zip/right (zip/down xml-zipper)))))) |
|
|
|
|
|
(defn jdk-details [jdk-loc] |
|
|
(reduce (fn [m elt] |
|
|
(if (#{:name :home} (:tag elt)) |
|
|
(assoc m (:tag elt) (apply str (:content elt))) |
|
|
m)) |
|
|
{} |
|
|
(zip/children jdk-loc))) |
|
|
|
|
|
(defn jdks [loc] |
|
|
(map jdk-details (take-while identity (iterate zip/right loc)))) |
|
|
|
|
|
(defn do-it [] |
|
|
(jdks (jdks-loc (zip/xml-zip (ci-config-xml))))) |
|
|
|
|
|
|
|
|
;;; To get a result like this: |
|
|
|
|
|
user=> (do-it) |
|
|
|
|
|
({:home "/usr/java/jdk1.6.0_20", :name "Sun JDK 1.6.0_20"} |
|
|
{:home "/var/lib/hudson/tools/Sun_JDK_1.5.0_22", :name "Sun JDK 1.5.0_22"} |
|
|
{:home "/usr/java/ibm-java2-x86_64-50", :name "IBM Java SDK 5.0-12.3"} |
|
|
{:home "/usr/java/java-1.6.0-openjdk-1.6.0.0.x86_64", :name "OpenJDK 1.6.0.0-1.16.b17.el5"} |
|
|
{:home "/usr/java/jrockit-jdk1.5.0_28-R28.1.3-4.0.1", :name "JRockit JDK 1.5.0_28-R28.1.3-4.0.1"} |
|
|
{:home "/usr/java/jrockit-jdk1.6.0_24-R28.1.3-4.0.1", :name "JRockit JDK 1.6.0_24-R28.1.3-4.0.1"}) |
|
|
|
|
|
|
|
|
;;; From XML like this: |
|
|
|
|
|
;; <?xml version='1.0' encoding='UTF-8'?> |
|
|
;; <hudson> |
|
|
;; <version>1.386</version> |
|
|
;; <!-- ... bunch more tags ... --> |
|
|
;; <jdks> |
|
|
;; <jdk> |
|
|
;; <name>Sun JDK 1.6.0_20</name> |
|
|
;; <home>/usr/java/jdk1.6.0_20</home> |
|
|
;; <properties/> |
|
|
;; </jdk> |
|
|
;; <jdk> |
|
|
;; <name>Sun JDK 1.5.0_22</name> |
|
|
;; <home>/var/lib/hudson/tools/Sun_JDK_1.5.0_22</home> |
|
|
;; <properties/> |
|
|
;; </jdk> |
|
|
;; <jdk> |
|
|
;; <name>IBM Java SDK 5.0-12.3</name> |
|
|
;; <home>/usr/java/ibm-java2-x86_64-50</home> |
|
|
;; <properties/> |
|
|
;; </jdk> |
|
|
;; <jdk> |
|
|
;; <name>OpenJDK 1.6.0.0-1.16.b17.el5</name> |
|
|
;; <home>/usr/java/java-1.6.0-openjdk-1.6.0.0.x86_64</home> |
|
|
;; <properties/> |
|
|
;; </jdk> |
|
|
;; <jdk> |
|
|
;; <name>JRockit JDK 1.5.0_28-R28.1.3-4.0.1</name> |
|
|
;; <home>/usr/java/jrockit-jdk1.5.0_28-R28.1.3-4.0.1</home> |
|
|
;; <properties/> |
|
|
;; </jdk> |
|
|
;; <jdk> |
|
|
;; <name>JRockit JDK 1.6.0_24-R28.1.3-4.0.1</name> |
|
|
;; <home>/usr/java/jrockit-jdk1.6.0_24-R28.1.3-4.0.1</home> |
|
|
;; <properties/> |
|
|
;; </jdk> |
|
|
;; </jdks> |
|
|
;; <!-- ... bunch more tags ... --> |
|
|
;; </hudson> |