[PATCH] Sometimes pushing to an HTTP repo fails with a useless message

Jesse Glick typrase at gmail.com
Sat Oct 17 13:04:42 CDT 2009


# HG changeset patch
# User Jesse Glick <jesse.glick at sun.com>
# Date 1255802441 14400
# Node ID c587f58da3e9595745058b56f1c4606786714138
# Parent  fc493cb90bb176b52b16357a6118fcacfaedd419
Sometimes pushing to an HTTP repo fails with a useless message.

  abort: 'https://.../.../' does not appear to be an hg repository!

Ought to produce a better diagnostics on the client. With patched 1.3.1,
observed to produce an Apache HTML error message (from cgitb) including the
vital text:

  File ".../hgwebdir.cgi", line 70, in ?
    wsgicgi.launch(application)
  File "mercurial/hgweb/wsgicgi.py", line 68, in launch
  File "mercurial/hgweb/hgwebdir_mod.py", line 91, in __call__
  File "mercurial/hgweb/hgwebdir_mod.py", line 148, in run_wsgi
  File "mercurial/hgweb/hgweb_mod.py", line 100, in run_wsgi
  File "mercurial/hgweb/protocol.py", line 156, in unbundle
  File "mercurial/localrepo.py", line 2031, in addchangegroup
  File "mercurial/revlog.py", line 1204, in addgroup
LookupError: 00manifest.i at ......: unknown parent

Might also be helpful if server's hgweb_mod.run_wsgi caught unexpected errors
and returned a well-formed error response including the stack trace. The client
patch would still be useful in this case, because it would let you diagnose
issues with HTTP proxy servers and so on.

diff --git a/mercurial/httprepo.py b/mercurial/httprepo.py
--- a/mercurial/httprepo.py
+++ b/mercurial/httprepo.py
@@ -106,8 +106,9 @@
                 proto.startswith('text/plain') or
                 proto.startswith('application/hg-changegroup')):
             self.ui.debug("requested URL: '%s'\n" % url.hidepassword(cu))
-            raise error.RepoError(_("'%s' does not appear to be an hg repository")
-                                  % safeurl)
+            raise error.RepoError(_("'%s' does not appear to be an hg repository:\n"
+                                    "---%%<--- (%s)\n%s\n---%%<---\n")
+                                  % (safeurl, proto, resp.read()))
 
         if proto.startswith('application/mercurial-'):
             try:


More information about the Mercurial-devel mailing list