From: Michael Albinus Date: Mon, 2 Feb 2015 09:16:04 +0000 (+0100) Subject: net/tramp.el (tramp-ssh-controlmaster-options): Use "%C" X-Git-Tag: emacs-24.4.90~7 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=50f3811883c7082b3c2a5a10bcfe77a3adfcb6ff;p=emacs.git net/tramp.el (tramp-ssh-controlmaster-options): Use "%C" Fixes: debbugs:19702 * net/tramp.el (tramp-ssh-controlmaster-options): Use "%C" for ControlPath if possible. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index cc42bcecc9c..8ef533e1aa6 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2015-02-02 Michael Albinus + + * net/tramp.el (tramp-ssh-controlmaster-options): Use "%C" for + ControlPath if possible. (Bug#19702) + 2015-02-02 Glenn Morris * emacs-lisp/authors.el (authors-obsolete-files-regexps) diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 3afb487ec3d..c442806b90f 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -311,17 +311,25 @@ useful only in combination with `tramp-default-proxies-alist'.") (let ((result "") (case-fold-search t)) (ignore-errors - (with-temp-buffer - (call-process "ssh" nil t nil "-o" "ControlMaster") - (goto-char (point-min)) - (when (search-forward-regexp "missing.+argument" nil t) - (setq result "-o ControlPath=%t.%%r@%%h:%%p -o ControlMaster=auto"))) - (unless (zerop (length result)) + (when (executable-find "ssh") (with-temp-buffer - (call-process "ssh" nil t nil "-o" "ControlPersist") + (call-process "ssh" nil t nil "-o" "ControlMaster") (goto-char (point-min)) (when (search-forward-regexp "missing.+argument" nil t) - (setq result (concat result " -o ControlPersist=no")))))) + (setq result "-o ControlMaster=auto"))) + (unless (zerop (length result)) + (with-temp-buffer + (call-process + "ssh" nil t nil "-o" "ControlPath=%C" "host.does.not.exist") + (goto-char (point-min)) + (if (search-forward-regexp "unknown.+key" nil t) + (setq result (concat result " -o ControlPath=%t.%%r@%%h:%%p")) + (setq result (concat result " -o ControlPath=%t.%%C")))) + (with-temp-buffer + (call-process "ssh" nil t nil "-o" "ControlPersist") + (goto-char (point-min)) + (when (search-forward-regexp "missing.+argument" nil t) + (setq result (concat result " -o ControlPersist=no"))))))) result) "Call ssh to detect whether it supports the Control* arguments. Return a string to be used in `tramp-methods'.")