mudgen
11/12/2012 - 12:05 AM

gistfile1.txt

(ns build.util
  (:require [fs.core :as fs]
            [clojure.java.io :as io])
  (:import [java.util.zip ZipOutputStream
                          ZipEntry]))

(defn zip-dir
  [name dir]
  (with-open [zip-out (ZipOutputStream. (io/output-stream (fs/absolute-path name)))]
    (let [read-buffer (make-array Byte/TYPE 2156)]
      (doseq [file (map #(str dir "/" %) (fs/list-dir dir))]
        (.putNextEntry zip-out (ZipEntry. file))
        (with-open [zip-in (io/input-stream file)]
          (loop [bytes (.read zip-in read-buffer)]
            (if (not= bytes -1)
              (do
                (.write zip-out read-buffer 0 bytes)
                (recur (.read zip-in read-buffer))))))))))