diff options
Diffstat (limited to 'src/lux/packager')
-rw-r--r-- | src/lux/packager/lib.clj | 41 | ||||
-rw-r--r-- | src/lux/packager/program.clj | 42 |
2 files changed, 28 insertions, 55 deletions
diff --git a/src/lux/packager/lib.clj b/src/lux/packager/lib.clj deleted file mode 100644 index af48e31eb..000000000 --- a/src/lux/packager/lib.clj +++ /dev/null @@ -1,41 +0,0 @@ -;; Copyright (c) Eduardo Julian. All rights reserved. -;; This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. -;; If a copy of the MPL was not distributed with this file, -;; You can obtain one at http://mozilla.org/MPL/2.0/. - -(ns lux.packager.lib - (:require [lux.lib.loader :as &lib]) - (:import (java.io File - FileOutputStream) - java.util.zip.GZIPOutputStream - (org.apache.commons.compress.archivers.tar TarArchiveEntry - TarArchiveOutputStream) - )) - -;; [Utils] -(defn ^:private read-file ^objects [^File file] - (with-open [is (java.io.FileInputStream. file)] - (let [data (byte-array (.length file))] - (.read is data) - data))) - -(defn ^:private add-to-tar! [prefix ^File file ^TarArchiveOutputStream os] - "(-> Text File TarArchiveOutputStream Unit)" - (let [file-name (str prefix "/" (.getName file))] - (if (.isDirectory file) - (doseq [file (seq (.listFiles file))] - (add-to-tar! file-name file os)) - (let [data (read-file file)] - (doto os - (.putArchiveEntry (doto (new TarArchiveEntry file-name) - (.setSize (.length file)))) - (.write data 0 (alength data)) - (.closeArchiveEntry)))))) - -;; [Exports] -(defn package [output-lib-name ^File source-dir] - "(-> Text File Unit)" - (with-open [out (->> (str output-lib-name &lib/lib-ext) (new FileOutputStream) (new GZIPOutputStream) (new TarArchiveOutputStream))] - (doseq [file (seq (.listFiles source-dir))] - (add-to-tar! "" file out)) - )) diff --git a/src/lux/packager/program.clj b/src/lux/packager/program.clj index 83927ba0d..0ff06a453 100644 --- a/src/lux/packager/program.clj +++ b/src/lux/packager/program.clj @@ -74,19 +74,29 @@ (recur (.read is buffer 0 buffer-size))))) (.toByteArray os))))) -(defn ^:private add-jar! [^File jar-file ^JarOutputStream out] +(defn ^:private add-jar! [^File jar-file seen ^JarOutputStream out] (with-open [is (->> jar-file (new FileInputStream) (new JarInputStream))] - (loop [^JarEntry entry (.getNextJarEntry is)] - (when entry - (when (and (not (.isDirectory entry)) - (not (.startsWith (.getName entry) "META-INF/"))) - (let [entry-data (read-stream is)] - (doto out - (.putNextEntry entry) - (.write entry-data 0 (alength entry-data)) - (.flush) - (.closeEntry)))) - (recur (.getNextJarEntry is)))))) + (loop [^JarEntry entry (.getNextJarEntry is) + seen seen] + (if entry + (let [entry-name (.getName entry)] + (if (and (not (.isDirectory entry)) + (not (.startsWith entry-name "META-INF/")) + (.endsWith entry-name ".class") + (not (contains? seen entry-name))) + (let [;; _ (prn 'entry entry-name) + entry-data (read-stream is)] + (doto out + (.putNextEntry entry) + (.write entry-data 0 (alength entry-data)) + (.flush) + (.closeEntry)) + (recur (.getNextJarEntry is) + (conj seen entry-name))) + (recur (.getNextJarEntry is) + seen))) + seen + )))) ;; [Resources] (defn package [module] @@ -94,6 +104,10 @@ (with-open [out (new JarOutputStream (->> &&/output-package (new File) (new FileOutputStream)) (manifest module))] (doseq [$group (.listFiles (new File &&/output-dir))] (write-module! $group out)) - (doseq [^String jar-file (fetch-available-jars)] - (add-jar! (new File jar-file) out)) + (->> (fetch-available-jars) + (filter #(and (not (.endsWith % "luxc.jar")) + (not (.endsWith % "tools.nrepl-0.2.3.jar")) + (not (.endsWith % "clojure-complete-0.2.3.jar")))) + (reduce (fn [s ^String j] (add-jar! (new File ^String j) s out)) + #{})) )) |