reviewboard: adapt HTTP client code to Mercurial 4.4 (bug 1413628); r?glob draft
authorGregory Szorc <gps@mozilla.com>
Thu, 02 Nov 2017 12:46:12 -0700
changeset 11786 0531b5b87f4145c3edd2784a0597c4b20551b089
parent 11785 a82669fe236fedbcc829a23eb5b0bd3004ad11b8
child 11787 37f0b566d740352a33fb5eae5a9e132bf256b353
push id1816
push usergszorc@mozilla.com
push dateThu, 02 Nov 2017 19:46:54 +0000
reviewersglob
bugs1413628
reviewboard: adapt HTTP client code to Mercurial 4.4 (bug 1413628); r?glob The HTTP peer API was overhauled in Mercurial 4.4. Some attributes were renamed. Teach the code to look for the new attributes. This eliminates a test failure in test-push-http.t. MozReview-Commit-ID: 29DrxAe23n8
hgext/reviewboard/client.py
--- a/hgext/reviewboard/client.py
+++ b/hgext/reviewboard/client.py
@@ -144,19 +144,30 @@ def dummycontextmanager(*args, **kwargs)
 def calljsoncommand(ui, remote, command, data=None, httpcap=None, httpcommand=None):
     """Call a wire protocol command parse the response as JSON."""
     if data:
         data = json.dumps(data, sort_keys=True, encoding='utf-8')
 
     if (httpcap and httpcommand and httpcap in getreviewcaps(remote) and
         isinstance(remote, httppeer.httppeer)):
         url = '%s/%s' % (remote._url, httpcommand)
-        request = remote.requestbuilder(url, data=data,
-                                        headers={'Content-Type': 'application/json'})
-        fh = remote.urlopener.open(request)
+
+        # TRACKING hg44: 4.4 renamed requestbuilder to _requestbuilder and
+        # urlopener to _urlopener.
+        if util.safehasattr(remote, '_requestbuilder'):
+            requestbuilder = remote._requestbuilder
+            opener = remote._urlopener
+        else:
+            requestbuilder = remote.requestbuilder
+            opener = remote.urlopener
+
+        request = requestbuilder(url,
+                                 data=data,
+                                 headers={'Content-Type': 'application/json'})
+        fh = opener.open(request)
         res = fh.read()
     else:
         res = remote._call(command, data=data)
 
     return json.loads(res)
 
 
 def commonrequestdict(ui, bzauth=None):