Skip to content

Commit

Permalink
Now the uber task merges duplicate files with fileset, too. (fixes #217)
Browse files Browse the repository at this point in the history
  • Loading branch information
micha committed Jun 10, 2015
1 parent cee4f92 commit 09eadb0
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 23 deletions.
17 changes: 9 additions & 8 deletions boot/core/src/boot/core.clj
Original file line number Diff line number Diff line change
Expand Up @@ -87,9 +87,9 @@
(when (:input t)
(set-env! :directories #(conj % (.getPath (:dir t))))))))))

(defn- add-user-asset [fileset dir] (tmpd/add fileset (get-add-dir fileset #{:user :asset}) dir))
(defn- add-user-source [fileset dir] (tmpd/add fileset (get-add-dir fileset #{:user :source}) dir))
(defn- add-user-resource [fileset dir] (tmpd/add fileset (get-add-dir fileset #{:user :resource}) dir))
(defn- add-user-asset [fileset dir] (tmpd/add fileset (get-add-dir fileset #{:user :asset}) dir {}))
(defn- add-user-source [fileset dir] (tmpd/add fileset (get-add-dir fileset #{:user :source}) dir {}))
(defn- add-user-resource [fileset dir] (tmpd/add fileset (get-add-dir fileset #{:user :resource}) dir {}))

(defn- user-temp-dirs [] (get-dirs {:dirs @tempdirs} #{:user}))
(defn- user-asset-dirs [] (get-dirs {:dirs @tempdirs} #{:user :asset}))
Expand Down Expand Up @@ -410,8 +410,8 @@

(defn add-asset
"Add the contents of the java.io.File dir to the fileset's assets."
[fileset ^File dir]
(tmpd/add fileset (get-add-dir fileset #{:asset}) dir))
[fileset ^File dir & {:keys [mergers] :as opts}]
(tmpd/add fileset (get-add-dir fileset #{:asset}) dir opts))

(defn mv-asset
"FIXME: document"
Expand All @@ -420,8 +420,8 @@

(defn add-source
"Add the contents of the java.io.File dir to the fileset's sources."
[fileset ^File dir]
(tmpd/add fileset (get-add-dir fileset #{:source}) dir))
[fileset ^File dir & {:keys [mergers] :as opts}]
(tmpd/add fileset (get-add-dir fileset #{:source}) dir opts))

(defn mv-source
"FIXME: document"
Expand All @@ -430,7 +430,8 @@

(defn add-resource
"Add the contents of the java.io.File dir to the fileset's resources."
[fileset ^File dir] (tmpd/add fileset (get-add-dir fileset #{:resource}) dir))
[fileset ^File dir & {:keys [mergers] :as opts}]
(tmpd/add fileset (get-add-dir fileset #{:resource}) dir opts))

(defn mv-resource
"FIXME: document"
Expand Down
7 changes: 4 additions & 3 deletions boot/core/src/boot/task/built_in.clj
Original file line number Diff line number Diff line change
Expand Up @@ -478,18 +478,19 @@
jars (-> (core/get-env)
(update-in [:dependencies] (partial filter scope?))
pod/resolve-dependency-jars)
merge (or merge pod/standard-jar-mergers)
add-uber (delay
(util/info "Adding uberjar entries...\n")
(doseq [jar jars]
(if as-jars
(file/copy-with-lastmod jar (io/file tgt (.getName jar)))
(pod/unpack-jar jar tgt
:mergers merge
:include include
:exclude (or exclude pod/standard-jar-exclusions)
:mergers (or merge pod/standard-jar-mergers)))))]
:exclude (or exclude pod/standard-jar-exclusions)))))]
(core/with-pre-wrap fileset
@add-uber
(-> fileset (core/add-resource tgt) core/commit!))))
(-> fileset (core/add-resource tgt :mergers merge) core/commit!))))

(core/deftask web
"Create project web.xml file.
Expand Down
23 changes: 13 additions & 10 deletions boot/pod/src/boot/pod.clj
Original file line number Diff line number Diff line change
Expand Up @@ -337,16 +337,19 @@
[#"META-INF/services/.*" concat-merger]
[#".*" first-wins-merger]])

(defn merge-duplicate-jar-entry [mergers curr-file new-path new-url]
(when-let [merger (some (fn [[re v]] (when (re-find re new-path) v)) mergers)]
(let [out-file (File/createTempFile (.getName curr-file) nil
(.getParentFile curr-file))]
(with-open [curr-stream (io/input-stream curr-file)
new-stream (io/input-stream new-url)
out-stream (io/output-stream out-file)]
(merger curr-stream new-stream out-stream))
(Files/move (.toPath out-file) (.toPath curr-file)
(into-array [StandardCopyOption/REPLACE_EXISTING])))))
(defn merge-duplicate-jar-entry
[mergers curr-file new-path new-url & {:keys [merged-url]}]
(let [merged-url (or merged-url curr-file)]
(when-let [merger (some (fn [[re v]] (when (re-find re new-path) v)) mergers)]
(util/dbug "Merging duplicate jar entry (%s)\n" new-path)
(let [out-file (File/createTempFile (.getName curr-file) nil
(.getParentFile curr-file))]
(with-open [curr-stream (io/input-stream curr-file)
new-stream (io/input-stream new-url)
out-stream (io/output-stream out-file)]
(merger curr-stream new-stream out-stream))
(Files/move (.toPath out-file) (.toPath merged-url)
(into-array [StandardCopyOption/REPLACE_EXISTING]))))))

(defn unpack-jar
[jar dir & {:keys [include exclude mergers cache] :or {cache true}}]
Expand Down
11 changes: 9 additions & 2 deletions boot/pod/src/boot/tmpdir.clj
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
[clojure.java.io :as io]
[clojure.set :as set]
[clojure.data :as data]
[boot.pod :as pod]
[boot.util :as util]
[boot.file :as file]
[boot.from.digest :as digest]))
Expand All @@ -19,7 +20,7 @@
(ls [this])
(commit! [this])
(rm [this paths])
(add [this dest-dir src-dir])
(add [this dest-dir src-dir opts])
(add-tmp [this dest-dir tmpfiles])
(mv [this from-path to-path])
(cp [this src-file dest-tmpfile]))
Expand Down Expand Up @@ -72,9 +73,15 @@
treefiles (set (vals tree))
remove? (->> tmpfiles set (set/difference treefiles) complement)]
(assoc this :tree (reduce-kv #(if (remove? %3) %1 (assoc %1 %2 %3)) {} tree))))
(add [this dest-dir src-dir]
(add [this dest-dir src-dir opts]
(assert ((set (map file dirs)) dest-dir)
(format "dest-dir not in dir set (%s)" dest-dir))
(when-let [mergers (:mergers opts)]
(doseq [tmpf (ls this)]
(let [[p f] ((juxt path file) tmpf)
out (io/file src-dir p)]
(when (.exists out)
(pod/merge-duplicate-jar-entry mergers f p out :merged-url out)))))
(let [{:keys [dirs tree blob]} this
src-tree (-> #(assoc %1 %2 (assoc %3 :dir dest-dir))
(reduce-kv {} (dir->tree src-dir)))]
Expand Down

0 comments on commit 09eadb0

Please sign in to comment.