diff --git a/CHANGELOG.md b/CHANGELOG.md index effe510e..d9b97310 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ A preview of the next release can be installed from ## Unreleased - [#1579](https://github.com/babashka/babashka/issues/1579): add `clojure.tools.reader/resolve-symbol` +- [#1581](https://github.com/babashka/babashka/issues/1581): `bb print-deps`: sort dependencies ## 1.3.181 (2023-06-13) diff --git a/project.clj b/project.clj index cbb35449..3e37f5df 100644 --- a/project.clj +++ b/project.clj @@ -98,7 +98,8 @@ :feature/logging :feature/priority-map :feature/rrb-vector - {:dependencies [[com.clojure-goes-fast/clj-async-profiler "0.5.0"] + {:dependencies [[borkdude/rewrite-edn "0.4.6"] + [com.clojure-goes-fast/clj-async-profiler "0.5.0"] [com.opentable.components/otj-pg-embedded "0.13.3"] [nubank/matcher-combinators "3.6.0"]]}] :uberjar {:global-vars {*assert* false} diff --git a/src/babashka/impl/print_deps.clj b/src/babashka/impl/print_deps.clj index ca0d5c40..593fd836 100644 --- a/src/babashka/impl/print_deps.clj +++ b/src/babashka/impl/print_deps.clj @@ -30,6 +30,7 @@ 'org.hsqldb/hsqldb) bb-edn-deps (:deps @common/bb-edn) deps (merge deps bb-edn-deps) + deps (into (sorted-map) deps) paths (:paths @common/bb-edn) deps {:deps deps} deps (cond-> deps diff --git a/test/babashka/print_deps_test.clj b/test/babashka/print_deps_test.clj index 4d06b0d5..7471875e 100644 --- a/test/babashka/print_deps_test.clj +++ b/test/babashka/print_deps_test.clj @@ -2,16 +2,28 @@ (:require [babashka.deps :as deps] [babashka.fs :as fs] [babashka.test-utils :refer [bb]] + [borkdude.rewrite-edn :as r] [clojure.string :as str] [clojure.test :refer [deftest is testing]] + [rewrite-clj.node :as n] [sci.core :as sci])) + (deftest print-deps-test - (let [deps (bb nil "print-deps" "--format" "deps") - tmp-dir (fs/create-temp-dir)] + (let [deps (bb nil "print-deps" "--format" "deps")] (testing "printed deps map can be read by Clojure" - (spit (fs/file tmp-dir "deps.edn") deps) - (let [cp (sci/with-out-str - (deps/clojure ["-Spath"] {:dir (str tmp-dir)}))] - (is (str/includes? cp "babashka.curl"))) - (fs/delete-tree tmp-dir)))) + (let [tmp-dir (fs/create-temp-dir)] + (spit (fs/file tmp-dir "deps.edn") deps) + (let [cp (sci/with-out-str + (deps/clojure ["-Spath"] {:dir (str tmp-dir)}))] + (is (str/includes? cp "babashka.curl"))) + (fs/delete-tree tmp-dir))) + + (testing "keys in dep map are sorted" + (let [values-sorted? (fn [xs] (= xs (sort xs))) + deps-edn-str-deps-keys (fn [s] + (->> (r/get (r/parse-string s) :deps) + n/child-sexprs + (partition 2) + (map first)))] + (is (values-sorted? (deps-edn-str-deps-keys deps)))))))