Skip to content

Commit

Permalink
add defcustom cider-infer-remote-nrepl-ports to address #1544
Browse files Browse the repository at this point in the history
  • Loading branch information
aiba committed Nov 24, 2018
1 parent 6813fe9 commit fe81bd7
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 8 deletions.
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))
;; 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.

0 comments on commit fe81bd7

Please sign in to comment.