Procházet zdrojové kódy

Two minor fixes to improve compatibility with some Git http servers.

* Strip double slashes as they can cause servers to return a 404.
* Set Content-Type on initial refs request.
Jelmer Vernooij před 13 roky
rodič
revize
492c17406a
1 změnil soubory, kde provedl 9 přidání a 5 odebrání
  1. 9 5
      dulwich/client.py

+ 9 - 5
dulwich/client.py

@@ -574,7 +574,7 @@ class SSHGitClient(TraditionalGitClient):
 class HttpGitClient(GitClient):
 
     def __init__(self, base_url, dumb=None, *args, **kwargs):
-        self.base_url = base_url
+        self.base_url = base_url.rstrip("/") + "/"
         self.dumb = dumb
         GitClient.__init__(self, *args, **kwargs)
 
@@ -589,10 +589,13 @@ class HttpGitClient(GitClient):
         return urllib2.urlopen(req)
 
     def _discover_references(self, service, url):
-        url = urlparse.urljoin(url+"/", "info/refs")
-        if not self.dumb:
+        assert url[-1] == "/"
+        url = urlparse.urljoin(url, "info/refs")
+        headers = {}
+        if self.dumb != False:
             url += "?service=%s" % service
-        req = urllib2.Request(url)
+            headers["Content-Type"] = "application/x-%s-request" % service
+        req = urllib2.Request(url, headers=headers)
         resp = self._perform(req)
         if resp.getcode() == 404:
             raise NotGitRepository()
@@ -610,7 +613,8 @@ class HttpGitClient(GitClient):
         return self._read_refs(proto)
 
     def _smart_request(self, service, url, data):
-        url = urlparse.urljoin(url+"/", service)
+        assert url[-1] == "/"
+        url = urlparse.urljoin(url, service)
         req = urllib2.Request(url,
             headers={"Content-Type": "application/x-%s-request" % service},
             data=data)