# HG changeset patch # User Zuzanna Mroczek # Date 2017-11-20 09:40:26 # Node ID 8b1c887d52e7d551fc9050d79939c294271e1a73 # Parent b22a0d9e0a837a73b2e735f06afc335aa7321232 sshpeer: add a configurable hint for the ssh error message Adding a possibility to configure error hint to be shown in the case of problems with SSH. Example of such hint can be "Please see http://company/internalwiki/ssh.html". Test Plan: - Ran hg pull with broken link and verified the output has no hint by default: ``` pulling from ssh://brokenrepository.com//repo remote: ssh: Could not resolve hostname brokenrepository.com: Name or service not known abort: no suitable response from remote hg! ``` - Run hg pull --config ui.ssherrorhint="Please see http://company/internalwiki/ssh.html": ``` pulling from ssh://brokenrepository.com//repo remote: ssh: Could not resolve hostname brokenrepository.com: Name or service not known abort: no suitable response from remote hg! (Please see http://company/internalwiki/ssh.html) ``` Differential Revision: https://phab.mercurial-scm.org/D1431 diff --git a/mercurial/configitems.py b/mercurial/configitems.py --- a/mercurial/configitems.py +++ b/mercurial/configitems.py @@ -964,6 +964,9 @@ coreconfigitem('ui', 'slash', coreconfigitem('ui', 'ssh', default='ssh', ) +coreconfigitem('ui', 'ssherrorhint', + default=None, +) coreconfigitem('ui', 'statuscopies', default=False, ) diff --git a/mercurial/help/config.txt b/mercurial/help/config.txt --- a/mercurial/help/config.txt +++ b/mercurial/help/config.txt @@ -2188,6 +2188,10 @@ User interface controls. ``ssh`` Command to use for SSH connections. (default: ``ssh``) +``ssherrorhint`` + A hint shown to the user in the case of SSH error (e.g. + ``Please see http://company/internalwiki/ssh.html``) + ``strict`` Require exact command names, instead of allowing unambiguous abbreviations. (default: False) diff --git a/mercurial/sshpeer.py b/mercurial/sshpeer.py --- a/mercurial/sshpeer.py +++ b/mercurial/sshpeer.py @@ -204,8 +204,9 @@ class sshpeer(wireproto.wirepeer): self._pipeo = doublepipe(self.ui, self._pipeo, self._pipee) def badresponse(): - self._abort(error.RepoError(_('no suitable response from ' - 'remote hg'))) + msg = _("no suitable response from remote hg") + hint = self.ui.config("ui", "ssherrorhint") + self._abort(error.RepoError(msg, hint=hint)) try: # skip any noise generated by remote shell diff --git a/tests/test-ssh.t b/tests/test-ssh.t --- a/tests/test-ssh.t +++ b/tests/test-ssh.t @@ -578,3 +578,20 @@ abort during pull is properly reported a remote: abort: this is an exercise abort: pull failed on remote [255] + +abort with no error hint when there is a ssh problem when pulling + + $ hg pull ssh://brokenrepository + pulling from ssh://brokenrepository/ + remote: ssh: Could not resolve hostname brokenrepository: Name or service not known + abort: no suitable response from remote hg! + [255] + +abort with configured error hint when there is a ssh problem when pulling + + $ hg pull ssh://brokenrepository --config ui.ssherrorhint="Please see http://company/internalwiki/ssh.html" + pulling from ssh://brokenrepository/ + remote: ssh: Could not resolve hostname brokenrepository: Name or service not known + abort: no suitable response from remote hg! + (Please see http://company/internalwiki/ssh.html) + [255]