From 26f47228e1da3580c6afdec2684d29fc3c9c6d91 Mon Sep 17 00:00:00 2001 From: Francesco Pischedda Date: Wed, 4 Mar 2026 16:54:36 +0100 Subject: [PATCH 1/2] 104 provide a better error on provider lookup failure If the lib name does not start with one of the expected providers, for example github or bitbucket, then the lookup will return nil and the subsequent call to `clean-lib-str` will throw a NullPointerException. --- src/babashka/bbin/git.clj | 9 +++++++-- test/babashka/bbin/scripts/git_dir_test.clj | 8 ++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/babashka/bbin/git.clj b/src/babashka/bbin/git.clj index d0fa8d9..15b3547 100644 --- a/src/babashka/bbin/git.clj +++ b/src/babashka/bbin/git.clj @@ -51,8 +51,13 @@ (->> (reduce #(str/replace %1 %2 "") lib (keys providers)) symbol)) +(defn- get-lib-provider [lib] + (if-let [provider (some #(when (re-seq (key %) (str lib)) %) providers)] + provider + (throw (ex-info "Unable to find an appropriate provider" {:lib lib})))) + (defn git-http-url [lib] - (let [provider (some #(when (re-seq (key %) (str lib)) %) providers) + (let [provider (get-lib-provider lib) s (clean-lib-str (str lib))] (case (val provider) :github (str "https://github.com/" s ".git") @@ -80,7 +85,7 @@ (ensure-git-dir client url) url) (catch Exception e - (if (re-seq #"^Unable to clone " (ex-message e)) + (if (re-seq #"^Unable to " (ex-message e)) (let [url (git-ssh-url lib)] (ensure-git-dir client url) url) diff --git a/test/babashka/bbin/scripts/git_dir_test.clj b/test/babashka/bbin/scripts/git_dir_test.clj index 6b63f5f..db25a83 100644 --- a/test/babashka/bbin/scripts/git_dir_test.clj +++ b/test/babashka/bbin/scripts/git_dir_test.clj @@ -89,3 +89,11 @@ (is (= git-ssh-url-lib out)) (is (fs/exists? bin-file)) (is (= "Hello world!" (tu/run-bin-script 'hello)))))) + +(deftest install-lib-fail-if-provider-not-found + (testing "install lib name fails provider lookup" + (tu/reset-test-dir) + (dirs/ensure-bbin-dirs {}) + (let [cli-opts {:script/lib "something-broken"}] + (is (thrown? Exception "Unable to find an appropriate provider" (tu/run-install cli-opts))) + ))) From eae205513bdf09120062c63147bd823bf86da889 Mon Sep 17 00:00:00 2001 From: Radford Smith <11401+rads@users.noreply.github.com> Date: Fri, 20 Mar 2026 20:22:17 -0700 Subject: [PATCH 2/2] Use `get-lib-provider` in `git-ssh-url` --- bbin | 11 ++++++++--- src/babashka/bbin/git.clj | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/bbin b/bbin index 526223e..12ae5e8 100755 --- a/bbin +++ b/bbin @@ -158,8 +158,13 @@ WARNING: (We won't make any changes without asking you first.) (->> (reduce #(str/replace %1 %2 "") lib (keys providers)) symbol)) +(defn- get-lib-provider [lib] + (if-let [provider (some #(when (re-seq (key %) (str lib)) %) providers)] + provider + (throw (ex-info "Unable to find an appropriate provider" {:lib lib})))) + (defn git-http-url [lib] - (let [provider (some #(when (re-seq (key %) (str lib)) %) providers) + (let [provider (get-lib-provider lib) s (clean-lib-str (str lib))] (case (val provider) :github (str "https://github.com/" s ".git") @@ -171,7 +176,7 @@ WARNING: (We won't make any changes without asking you first.) :sourcehut (str "https://git.sr.ht/~" s)))) (defn git-ssh-url [lib] - (let [provider (some #(when (re-seq (key %) (str lib)) %) providers) + (let [provider (get-lib-provider lib) s (clean-lib-str (str lib))] (case (val provider) :github (str "git@github.com:" s ".git") @@ -187,7 +192,7 @@ WARNING: (We won't make any changes without asking you first.) (ensure-git-dir client url) url) (catch Exception e - (if (re-seq #"^Unable to clone " (ex-message e)) + (if (re-seq #"^Unable to " (ex-message e)) (let [url (git-ssh-url lib)] (ensure-git-dir client url) url) diff --git a/src/babashka/bbin/git.clj b/src/babashka/bbin/git.clj index 15b3547..5985286 100644 --- a/src/babashka/bbin/git.clj +++ b/src/babashka/bbin/git.clj @@ -69,7 +69,7 @@ :sourcehut (str "https://git.sr.ht/~" s)))) (defn git-ssh-url [lib] - (let [provider (some #(when (re-seq (key %) (str lib)) %) providers) + (let [provider (get-lib-provider lib) s (clean-lib-str (str lib))] (case (val provider) :github (str "git@github.com:" s ".git")