Skip to content

Commit 76d2e56

Browse files
vspinubbatsov
authored andcommitted
Fix restart of server-less sessions
1 parent ee3ac37 commit 76d2e56

File tree

1 file changed

+41
-32
lines changed

1 file changed

+41
-32
lines changed

cider-connection.el

Lines changed: 41 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -408,34 +408,44 @@ Fallback on `cider' command."
408408
(cider-close-ancillary-buffers)))
409409

410410
(cl-defmethod sesman-restart-session ((_system (eql CIDER)) session)
411-
(let* ((repls (cdr session))
412-
(s-buf (seq-some (lambda (r)
413-
(buffer-local-value 'nrepl-server-buffer r))
414-
repls))
415-
(s-params (cider--gather-connect-params nil s-buf))
416-
(ses-name (car session)))
417-
;; 1) kill all connections, but keep the buffers
418-
(mapc (lambda (conn)
419-
(cider--close-connection conn 'no-kill))
420-
repls)
421-
;; 2) kill the server
422-
(message "Waiting for CIDER server to quit...")
423-
(nrepl-kill-server-buffer s-buf)
424-
;; 3) start server
425-
(nrepl-start-server-process
426-
(plist-get s-params :project-dir)
427-
(plist-get s-params :server-command)
428-
(lambda (server-buf)
429-
;; 4) restart the repls reusing the buffer
430-
(dolist (r repls)
431-
(cider-nrepl-connect
432-
(thread-first ()
433-
(cider--gather-connect-params r)
434-
;; server params (:port, :project-dir etc) have precedence
435-
(cider--gather-connect-params server-buf)
436-
(plist-put :session-name ses-name)
437-
(plist-put :repl-buffer r))))
438-
(message "Restarted CIDER %s session" ses-name)))))
411+
(let* ((ses-name (car session))
412+
(repls (cdr session))
413+
(srv-buf (seq-some (lambda (r)
414+
(buffer-local-value 'nrepl-server-buffer r))
415+
repls)))
416+
(if srv-buf
417+
;; session with a server
418+
(let ((s-params (cider--gather-connect-params nil srv-buf)))
419+
;; 1) kill all connections, but keep the buffers
420+
(mapc (lambda (conn)
421+
(cider--close-connection conn 'no-kill))
422+
repls)
423+
;; 2) kill the server
424+
(nrepl-kill-server-buffer srv-buf)
425+
;; 3) start server
426+
(nrepl-start-server-process
427+
(plist-get s-params :project-dir)
428+
(plist-get s-params :server-command)
429+
(lambda (server-buf)
430+
;; 4) restart the repls reusing the buffer
431+
(dolist (r repls)
432+
(cider-nrepl-connect
433+
(thread-first ()
434+
(cider--gather-connect-params r)
435+
;; server params (:port, :project-dir etc) have precedence
436+
(cider--gather-connect-params server-buf)
437+
(plist-put :session-name ses-name)
438+
(plist-put :repl-buffer r))))
439+
(sesman-browser-revert-all 'CIDER)
440+
(message "Restarted CIDER %s session" ses-name))))
441+
;; server-less session
442+
(dolist (r repls)
443+
(cider--close-connection r 'no-kill)
444+
(cider-nrepl-connect
445+
(thread-first ()
446+
(cider--gather-connect-params r)
447+
(plist-put :session-name ses-name)
448+
(plist-put :repl-buffer r)))))))
439449

440450
(defun cider-format-connection-params (template params)
441451
"Format PARAMS with TEMPLATE string.
@@ -552,6 +562,7 @@ Assume that the current buffer is a REPL."
552562
(declare-function cider-repl-mode "cider-repl")
553563
(declare-function cider-repl--state-handler "cider-repl")
554564
(declare-function cider-repl-reset-markers "cider-repl")
565+
(defvar-local cider-session-name nil)
555566
(defvar-local cider-repl-init-function nil)
556567
(defun cider-repl-create (params)
557568
"Create new repl buffer.
@@ -568,10 +579,8 @@ function with the repl buffer set as current."
568579
(with-current-buffer buffer
569580
(setq-local sesman-system 'CIDER)
570581
(setq-local default-directory (or (plist-get params :project-dir) default-directory))
571-
(let ((ses-name (or (plist-get params :session-name)
572-
(cider-make-session-name params))))
573-
;; creates a new session if session with ses-name doesn't already exist
574-
(sesman-add-object 'CIDER ses-name buffer 'allow-new))
582+
;; creates a new session if session with ses-name doesn't already exist
583+
(sesman-add-object 'CIDER ses-name buffer 'allow-new)
575584
(unless (derived-mode-p 'cider-repl-mode)
576585
(cider-repl-mode))
577586
(setq nrepl-err-handler #'cider-default-err-handler

0 commit comments

Comments
 (0)