From 2d5e1b04de3d027ec2a4a6683c9d3149dc5554f6 Mon Sep 17 00:00:00 2001 From: Leon Barrett Date: Mon, 10 Jun 2013 15:51:05 -0700 Subject: [PATCH] Fixed long line support in make-manifest. --- src/leiningen/jar.clj | 30 +++++++++++++++++------------- test/leiningen/test/jar.clj | 12 +++++++++--- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/src/leiningen/jar.clj b/src/leiningen/jar.clj index e284faf4..79ae76df 100644 --- a/src/leiningen/jar.clj +++ b/src/leiningen/jar.clj @@ -22,21 +22,25 @@ "Built-By" (System/getProperty "user.name") "Build-Jdk" (System/getProperty "java.version")}) -(defn- manifest-entry [project manifest [k v]] - (cond (symbol? v) (manifest-entry project manifest [k (resolve v)]) - (fn? v) (manifest-entry project manifest [k (v project)]) - :else (str manifest "\n" (name k) ": " v))) +(defn- manifest-entry [project [k v]] + (cond (symbol? v) (manifest-entry project [k (resolve v)]) + (fn? v) (manifest-entry project [k (v project)]) + :else (->> (str (name k) ": " v) + (partition-all 70) ;; Manifest spec says lines <= 72 chars + (map (partial apply str)) + (string/join "\n ") ;; Manifest spec says join with "\n " + (format "%s\n")))) (defn ^:internal make-manifest [project] - (-> (reduce (partial manifest-entry project) - "Manifest-Version: 1.0" - (merge default-manifest (:manifest project) - (if-let [main (:main project)] - {"Main-Class" (.replaceAll (str main) "-" "_")}))) - (str "\n") ;; Add an endline character to make Manifest happy. - .getBytes - ByteArrayInputStream. - Manifest.)) + (->> (merge default-manifest (:manifest project) + (if-let [main (:main project)] + {"Main-Class" (.replaceAll (str main) "-" "_")})) + (map (partial manifest-entry project)) + (cons "Manifest-Version: 1.0\n") ;; Manifest-Version line must be first + (string/join "") + .getBytes + ByteArrayInputStream. + Manifest.)) (defn ^:internal manifest-map [manifest] (let [attrs (.getMainAttributes manifest)] diff --git a/test/leiningen/test/jar.clj b/test/leiningen/test/jar.clj index f7dead65..3f0b459e 100644 --- a/test/leiningen/test/jar.clj +++ b/test/leiningen/test/jar.clj @@ -9,9 +9,13 @@ overlapped-sourcepaths-project]]) (:import (java.util.jar JarFile))) +(def long-line + (apply str (repeat 10000 "a"))) + (def mock-project {:name "mock-project" :version "1.0" :main 'foo.one-two.three-four.bar - :manifest {"hello" "world"}}) + :manifest {"hello" "world" + "long-line" long-line}}) (deftest test-manifest (let [mm (-> mock-project @@ -19,8 +23,10 @@ manifest-map)] (is (= {"Main-Class" "foo.one_two.three_four.bar", "hello" "world"} (select-keys mm ["hello" "Main-Class"]))) - (is (= #{"Manifest-Version" "Main-Class" "hello" "Created-By" "Built-By" "Build-Jdk"} - (-> mm keys set))))) + (is (= #{"Manifest-Version" "Main-Class" "hello" "Created-By" "Built-By" + "Build-Jdk" "long-line"} + (-> mm keys set))) + (is (= (get mm "long-line") long-line)))) (deftest test-jar-fails (binding [*err* (java.io.PrintWriter. (platform-nullsink))]