aboutsummaryrefslogtreecommitdiff
path: root/src/lux/packager
diff options
context:
space:
mode:
Diffstat (limited to 'src/lux/packager')
-rw-r--r--src/lux/packager/lib.clj41
-rw-r--r--src/lux/packager/program.clj42
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))
+ #{}))
))