Skip to content

Commit 59e49fb

Browse files
fpischeddarads
andauthored
104 provide a better error on provider lookup failure (#105)
* 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. * Use `get-lib-provider` in `git-ssh-url` --------- Co-authored-by: Radford Smith <11401+rads@users.noreply.github.com>
1 parent e0b7719 commit 59e49fb

File tree

3 files changed

+24
-6
lines changed

3 files changed

+24
-6
lines changed

bbin

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,13 @@ WARNING: (We won't make any changes without asking you first.)
158158
(->> (reduce #(str/replace %1 %2 "") lib (keys providers))
159159
symbol))
160160

161+
(defn- get-lib-provider [lib]
162+
(if-let [provider (some #(when (re-seq (key %) (str lib)) %) providers)]
163+
provider
164+
(throw (ex-info "Unable to find an appropriate provider" {:lib lib}))))
165+
161166
(defn git-http-url [lib]
162-
(let [provider (some #(when (re-seq (key %) (str lib)) %) providers)
167+
(let [provider (get-lib-provider lib)
163168
s (clean-lib-str (str lib))]
164169
(case (val provider)
165170
:github (str "https://github.com/" s ".git")
@@ -171,7 +176,7 @@ WARNING: (We won't make any changes without asking you first.)
171176
:sourcehut (str "https://git.sr.ht/~" s))))
172177

173178
(defn git-ssh-url [lib]
174-
(let [provider (some #(when (re-seq (key %) (str lib)) %) providers)
179+
(let [provider (get-lib-provider lib)
175180
s (clean-lib-str (str lib))]
176181
(case (val provider)
177182
:github (str "git@github.com:" s ".git")
@@ -187,7 +192,7 @@ WARNING: (We won't make any changes without asking you first.)
187192
(ensure-git-dir client url)
188193
url)
189194
(catch Exception e
190-
(if (re-seq #"^Unable to clone " (ex-message e))
195+
(if (re-seq #"^Unable to " (ex-message e))
191196
(let [url (git-ssh-url lib)]
192197
(ensure-git-dir client url)
193198
url)

src/babashka/bbin/git.clj

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,13 @@
5151
(->> (reduce #(str/replace %1 %2 "") lib (keys providers))
5252
symbol))
5353

54+
(defn- get-lib-provider [lib]
55+
(if-let [provider (some #(when (re-seq (key %) (str lib)) %) providers)]
56+
provider
57+
(throw (ex-info "Unable to find an appropriate provider" {:lib lib}))))
58+
5459
(defn git-http-url [lib]
55-
(let [provider (some #(when (re-seq (key %) (str lib)) %) providers)
60+
(let [provider (get-lib-provider lib)
5661
s (clean-lib-str (str lib))]
5762
(case (val provider)
5863
:github (str "https://github.com/" s ".git")
@@ -64,7 +69,7 @@
6469
:sourcehut (str "https://git.sr.ht/~" s))))
6570

6671
(defn git-ssh-url [lib]
67-
(let [provider (some #(when (re-seq (key %) (str lib)) %) providers)
72+
(let [provider (get-lib-provider lib)
6873
s (clean-lib-str (str lib))]
6974
(case (val provider)
7075
:github (str "git@github.com:" s ".git")
@@ -80,7 +85,7 @@
8085
(ensure-git-dir client url)
8186
url)
8287
(catch Exception e
83-
(if (re-seq #"^Unable to clone " (ex-message e))
88+
(if (re-seq #"^Unable to " (ex-message e))
8489
(let [url (git-ssh-url lib)]
8590
(ensure-git-dir client url)
8691
url)

test/babashka/bbin/scripts/git_dir_test.clj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,3 +89,11 @@
8989
(is (= git-ssh-url-lib out))
9090
(is (fs/exists? bin-file))
9191
(is (= "Hello world!" (tu/run-bin-script 'hello))))))
92+
93+
(deftest install-lib-fail-if-provider-not-found
94+
(testing "install lib name fails provider lookup"
95+
(tu/reset-test-dir)
96+
(dirs/ensure-bbin-dirs {})
97+
(let [cli-opts {:script/lib "something-broken"}]
98+
(is (thrown? Exception "Unable to find an appropriate provider" (tu/run-install cli-opts)))
99+
)))

0 commit comments

Comments
 (0)