Browse Source

Update NEWS, switch to opener rather than handlers in HttpGitClient.

Jelmer Vernooij 11 years ago
parent
commit
0e5b568f07
2 changed files with 9 additions and 14 deletions
  1. 3 0
      NEWS
  2. 6 14
      dulwich/client.py

+ 3 - 0
NEWS

@@ -9,6 +9,9 @@
 
  * Add shallow branch support. (milki)
 
+ * Allow passing urllib2 `opener` into HttpGitClient.
+   (Dov Feldstern, #909037)
+
  CHANGES
 
  * Drop support for Python 2.4 and 2.5. (Jelmer Vernooij)

+ 6 - 14
dulwich/client.py

@@ -894,20 +894,22 @@ class SSHGitClient(TraditionalGitClient):
 
 class HttpGitClient(GitClient):
 
-    def __init__(self, base_url, dumb=None, handlers=None, *args, **kwargs):
+    def __init__(self, base_url, dumb=None, opener=None, *args, **kwargs):
         self.base_url = base_url.rstrip("/") + "/"
         self.dumb = dumb
-        self.handlers = handlers or []
+        if opener is None:
+            self.opener = urllib2.build_opener()
+        else:
+            self.opener = opener
         GitClient.__init__(self, *args, **kwargs)
 
     def _get_url(self, path):
         return urlparse.urljoin(self.base_url, path).rstrip("/") + "/"
 
     def _http_request(self, url, headers={}, data=None):
-        opener = urllib2.build_opener(*self.handlers)
         req = urllib2.Request(url, headers=headers, data=data)
         try:
-            resp = self._perform(opener, req)
+            resp = self.opener.open(req)
         except urllib2.HTTPError as e:
             if e.code == 404:
                 raise NotGitRepository()
@@ -915,16 +917,6 @@ class HttpGitClient(GitClient):
                 raise GitProtocolError("unexpected http response %d" % e.code)
         return resp
 
-    def _perform(self, opener, req):
-        """Perform a HTTP request.
-
-        This is provided so subclasses can provide their own version.
-
-        :param req: urllib2.Request instance
-        :return: matching response
-        """
-        return opener.open(req)
-
     def _discover_references(self, service, url):
         assert url[-1] == "/"
         url = urlparse.urljoin(url, "info/refs")