Separate :uberjar-exclusions from skip-set for performance. Fixes #160.

This commit is contained in:
Phil Hagelberg 2011-03-02 21:54:20 -08:00
parent d6fa72818d
commit cdc38473f8

View file

@ -18,20 +18,19 @@
first
:content)))
(defn- skip? [entry skip-set]
(reduce (fn [skip matcher]
(or skip (if (string? matcher)
(= matcher (.getName entry))
(re-find matcher (.getName entry)))))
false skip-set))
;; We have to keep this separate from skip-set for performance reasons.
(defn- make-skip-pred [project]
(fn [filename]
(some #(re-find % filename) (:uberjar-exclusions project))))
(defn- copy-entries
"Copies the entries of ZipFile in to the ZipOutputStream out, skipping
the entries which satisfy skip-pred. Returns the names of the
entries copied."
[in out skip-set]
[in out skip-set skip-pred]
(for [file (enumeration-seq (.entries in))
:when (not (skip? file skip-set))]
:let [filename (.getName file)]
:when (not (or (skip-set filename) (skip-pred filename)))]
(do
(.setCompressedSize file -1) ; some jars report size incorrectly
(.putNextEntry out file)
@ -42,18 +41,18 @@
;; we have to keep track of every entry we've copied so that we can
;; skip duplicates. We also collect together all the plexus components so
;; that we can merge them.
(defn include-dep [out [skip-set components] dep]
(defn include-dep [out skip-pred [skip-set components] dep]
(println "Including" (.getName dep))
(with-open [zipfile (ZipFile. dep)]
[(into skip-set (copy-entries zipfile out skip-set))
[(into skip-set (copy-entries zipfile out skip-set skip-pred))
(concat components (read-components zipfile))]))
(defn write-components
"Given a list of jarfiles, writes contents to a stream"
[project deps out]
(let [[_ components] (reduce (partial include-dep out)
[(into #{"META-INF/plexus/components.xml"}
(:uberjar-exclusions project)) nil]
(let [[_ components] (reduce (partial include-dep out
(make-skip-pred project))
[#{"META-INF/plexus/components.xml"} nil]
deps)]
(when-not (empty? components)
(.putNextEntry out (ZipEntry. "META-INF/plexus/components.xml"))