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 d0fa8d9..5985286 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") @@ -64,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") @@ -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))) + )))