Skip to content
Snippets Groups Projects
Commit 5d77f571 authored by sliquister's avatar sliquister
Browse files

sshpeer: make client print (likely) server errors on stderr (BC)

so `hg clone -q` or `hg pull -q` don't print `abort: no suitable
response from remote hg!` with no indication of what went wrong.

There are other errors still silenced by -q (like failing to push due
to a server hook), but the current change covers a good fraction of
the problem (all errors setting up the ssh connection, no such remote
repository, no access to the repository).

Differential Revision: https://phab.mercurial-scm.org/D8584
parent 15e26cc0
No related branches found
No related tags found
No related merge requests found
......@@ -36,10 +36,10 @@
return b"'%s'" % s.replace(b"'", b"'\\''")
def _forwardoutput(ui, pipe):
def _forwardoutput(ui, pipe, warn=False):
"""display all data currently available on pipe as remote output.
This is non blocking."""
if pipe:
s = procutil.readpipe(pipe)
if s:
......@@ -40,7 +40,8 @@
"""display all data currently available on pipe as remote output.
This is non blocking."""
if pipe:
s = procutil.readpipe(pipe)
if s:
display = ui.warn if warn else ui.status
for l in s.splitlines():
......@@ -46,5 +47,5 @@
for l in s.splitlines():
ui.status(_(b"remote: "), l, b'\n')
display(_(b"remote: "), l, b'\n')
class doublepipe(object):
......@@ -204,8 +205,12 @@
def _performhandshake(ui, stdin, stdout, stderr):
def badresponse():
# Flush any output on stderr.
_forwardoutput(ui, stderr)
# Flush any output on stderr. In general, the stderr contains errors
# from the remote (ssh errors, some hg errors), and status indications
# (like "adding changes"), with no current way to tell them apart.
# Here we failed so early that it's almost certainly only errors, so
# use warn=True so -q doesn't hide them.
_forwardoutput(ui, stderr, warn=True)
msg = _(b'no suitable response from remote hg')
hint = ui.config(b'ui', b'ssherrorhint')
......@@ -307,7 +312,7 @@
while lines[-1] and max_noise:
try:
l = stdout.readline()
_forwardoutput(ui, stderr)
_forwardoutput(ui, stderr, warn=True)
# Look for reply to protocol upgrade request. It has a token
# in it, so there should be no false positives.
......@@ -374,7 +379,7 @@
badresponse()
# Flush any output on stderr before proceeding.
_forwardoutput(ui, stderr)
_forwardoutput(ui, stderr, warn=True)
return protoname, caps
......
......@@ -47,6 +47,7 @@
abort: no suitable response from remote hg!
[255]
$ hg clone -q -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" ssh://user@dummy/nonexistent local
remote: abort: repository nonexistent not found!
abort: no suitable response from remote hg!
[255]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment