commands: report http exceptions nicely
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
commands: report http exceptions nicely
manifest hash: 37760b304eedffcea9c1c01d03334cf4f6048fd3
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)
iD8DBQFCsx6QywK+sNU5EO8RAnyEAKC3RBzwlVAyI+SSYHj1Z+Psn1Aq3gCcDQJf
pqPitXBuvdZbLdK0ti2kFOk=
=ZjC9
-----END PGP SIGNATURE-----
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -752,7 +752,11 @@ def dispatch(args):
except KeyboardInterrupt:
u.warn("interrupted!\n")
except IOError, inst:
- if inst.errno == errno.EPIPE:
+ if hasattr(inst, "code"):
+ u.warn("abort: %s\n" % inst)
+ elif hasattr(inst, "reason"):
+ u.warn("abort: error %d: %s\n" % (inst.reason[0], inst.reason[1]))
+ elif hasattr(inst, "args") and inst[0] == errno.EPIPE:
u.warn("broken pipe\n")
else:
raise
new file mode 100755
--- /dev/null
+++ b/tests/test-bad-pull
@@ -0,0 +1,34 @@
+#!/bin/bash
+
+mkdir copy
+cd copy
+hg init http://localhost:20059/
+hg verify
+hg co
+cat foo
+hg manifest
+
+cat > dumb.py <<EOF
+import BaseHTTPServer, SimpleHTTPServer, signal
+
+def run(server_class=BaseHTTPServer.HTTPServer,
+ handler_class=SimpleHTTPServer.SimpleHTTPRequestHandler):
+ server_address = ('localhost', 20059)
+ httpd = server_class(server_address, handler_class)
+ httpd.serve_forever()
+
+signal.signal(signal.SIGTERM, lambda x: sys.exit(0))
+run()
+EOF
+
+python dumb.py 2>/dev/null &
+
+mkdir copy2
+cd copy2
+hg init http://localhost:20059/foo
+hg verify
+hg co
+cat foo
+hg manifest
+
+kill %1
new file mode 100644
--- /dev/null
+++ b/tests/test-bad-pull.out
@@ -0,0 +1,22 @@
+requesting all changes
+adding changesets
+abort: error 111: Connection refused
+transaction abort!
+rollback completed
+checking changesets
+checking manifests
+crosschecking files in changesets and manifests
+checking files
+0 files, 0 changesets, 0 total revisions
+cat: foo: No such file or directory
+requesting all changes
+adding changesets
+abort: HTTP Error 404: File not found
+transaction abort!
+rollback completed
+checking changesets
+checking manifests
+crosschecking files in changesets and manifests
+checking files
+0 files, 0 changesets, 0 total revisions
+cat: foo: No such file or directory