Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
### Changes

* [#2484](https://github.com/clojure-emacs/cider/pull/2484): REPL types are now symbols instead of strings.
* [#1544](https://github.com/clojure-emacs/cider/issues/1544): Add a new defcustom `cider-infer-remote-nrepl-ports` to control whether we use tramp/ssh to infer remote ports. Now defaulting to `nil` (previously it always tried to infer).

## 0.18.0 (2018-09-02)

Expand Down
23 changes: 15 additions & 8 deletions cider.el
Original file line number Diff line number Diff line change
Expand Up @@ -1327,6 +1327,12 @@ Tramp version starting 26.1 is using a `cl-defstruct' rather than vanilla VEC."
(make-tramp-file-name :method (elt vec 0)
:host (elt vec 2)))))

(defcustom cider-infer-remote-nrepl-ports nil
"When true, cider will use ssh to try to infer nREPL ports on remote hosts."
:type 'boolean
:safe #'booleanp
:package-version '(cider . "0.19.0"))

(defun cider--infer-ports (host ssh-hosts)
"Infer nREPL ports on HOST.
Return a list of elements of the form (directory port). SSH-HOSTS is a list
Expand All @@ -1338,14 +1344,15 @@ of remote SSH hosts."
(let* ((change-dir-p (file-remote-p default-directory))
(default-directory (if change-dir-p "~/" default-directory)))
(cider-locate-running-nrepl-ports (unless change-dir-p default-directory)))
(let ((vec (vector "sshx" nil host "" nil))
;; change dir: user might want to connect to a different remote
(dir (when (file-remote-p default-directory)
(with-parsed-tramp-file-name default-directory cur
(when (string= cur-host host) default-directory)))))
(tramp-maybe-open-connection (cider--tramp-file-name vec))
(with-current-buffer (tramp-get-connection-buffer (cider--tramp-file-name vec))
(cider-locate-running-nrepl-ports dir))))))
(when cider-infer-remote-nrepl-ports
(let ((vec (vector "sshx" nil host "" nil))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder if we shouldn't move the remote logic to a separate function.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tried that, but it didn't seem like a big win, especially since this function is already entangled with an ssh-hosts arg.

;; change dir: user might want to connect to a different remote
(dir (when (file-remote-p default-directory)
(with-parsed-tramp-file-name default-directory cur
(when (string= cur-host host) default-directory)))))
(tramp-maybe-open-connection (cider--tramp-file-name vec))
(with-current-buffer (tramp-get-connection-buffer (cider--tramp-file-name vec))
(cider-locate-running-nrepl-ports dir)))))))

(defun cider--completing-read-port (host ports)
"Interactively select port for HOST from PORTS."
Expand Down
19 changes: 19 additions & 0 deletions doc/up_and_running.md
Original file line number Diff line number Diff line change
Expand Up @@ -111,3 +111,22 @@ helpful for identifying each host.
'(("host-a" "10.10.10.1" "7888")
("host-b" "7888")))
```

## SSH

In some circumstances, cider can try to use SSH to either:

* Tunnel a connection over SSH.
* Infer the remote nREPL port for a direct connection.

This behavior is controlled by two options (both default `nil`):

* `nrepl-use-ssh-fallback-for-remote-hosts`: When true, attempt to connect via ssh
to remote hosts when unable to connect directly.
* `cider-infer-remote-nrepl-ports`: When true, cider will use ssh to try to infer
nREPL ports on remote hosts (for a direct connection).

Note that enabling either of these causes cider to use
[tramp](https://www.gnu.org/software/tramp/) for some SSH operations, which parses
config files such as `~/.ssh/config` and `~/.ssh/known_hosts`. This is known to
cause problems with complex or nonstandard ssh configs.