Skip to content

Commit f3876a3

Browse files
committed
Fix unusable Emacs when an ELPA repository is down
1 parent 793b326 commit f3876a3

File tree

2 files changed

+45
-9
lines changed

2 files changed

+45
-9
lines changed

core/core-configuration-layer.el

+17-9
Original file line numberDiff line numberDiff line change
@@ -216,15 +216,23 @@ refreshed during the current session."
216216
(car archive) i count) t))
217217
(spacemacs//redisplay)
218218
(setq i (1+ i))
219-
(unless (eq 'error (with-timeout
220-
(dotspacemacs-elpa-timeout
221-
(progn
222-
(spacemacs-buffer/append
223-
(format
224-
"\nError while contacting %s repository!"
225-
(car archive)))
226-
'error))
227-
(url-retrieve-synchronously (cdr archive))))
219+
(unless (eq 'error
220+
(with-timeout
221+
(dotspacemacs-elpa-timeout
222+
(progn
223+
(spacemacs-buffer/append
224+
(format
225+
"\nError connection time out for %s repository!"
226+
(car archive)))
227+
'error))
228+
(condition-case err
229+
(url-retrieve-synchronously (cdr archive))
230+
('error
231+
(spacemacs-buffer/append
232+
(format
233+
"\nError while contacting %s repository!"
234+
(car archive)))
235+
'error))))
228236
(let ((package-archives (list archive)))
229237
(package-refresh-contents))))
230238
(package-read-all-archive-contents)

tests/core/core-configuration-layer-utest.el

+28
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,34 @@
5151
(should (equal '(("melpa" . "https://melpa.org/packages/"))
5252
(configuration-layer//resolve-package-archives input)))))
5353

54+
;; ---------------------------------------------------------------------------
55+
;; configuration-layer/retrieve-package-archives
56+
;; ---------------------------------------------------------------------------
57+
58+
(ert-deftest test-retrieve-package-archives--catch-time-out-error ()
59+
(let ((package-archives '(("gnu" . "https://elpa.gnu.org/packages/")))
60+
(configuration-layer--package-archives-refreshed nil)
61+
(dotspacemacs-elpa-timeout -1))
62+
(mocker-let
63+
((message (format-string &rest args)
64+
((:record-cls 'mocker-stub-record :output nil))))
65+
(configuration-layer/retrieve-package-archives))))
66+
67+
(ert-deftest test-retrieve-package-archives--catch-connection-errors ()
68+
(let ((package-archives '(("gnu" . "https://elpa.gnu.org/packages/")))
69+
(configuration-layer--package-archives-refreshed nil))
70+
(cl-letf (((symbol-function 'url-retrieve-synchronously)
71+
(lambda (x)
72+
(signal 'file-error '("make client process failed"
73+
"connection refused"
74+
:name "elpa.gnu.org"
75+
:buffer dummy
76+
:host "elpa.gnu.org"
77+
:service 443
78+
:nowait nil))))
79+
((symbol-function 'message) 'ignore))
80+
(configuration-layer/retrieve-package-archives))))
81+
5482
;; ---------------------------------------------------------------------------
5583
;; configuration-layer//make-layers
5684
;; ---------------------------------------------------------------------------

0 commit comments

Comments
 (0)