浏览代码

Update HTTPGitClient to allow user:passwd style urls.

jon bain 9 年之前
父节点
当前提交
1b692854a5
共有 1 个文件被更改,包括 9 次插入3 次删除
  1. 9 3
      dulwich/client.py

+ 9 - 3
dulwich/client.py

@@ -1030,13 +1030,18 @@ def default_urllib2_opener(config):
 
 class HttpGitClient(GitClient):
 
-    def __init__(self, base_url, dumb=None, opener=None, config=None, **kwargs):
+    def __init__(self, base_url, dumb=None, opener=None, config=None,
+                 user='',passwd='', **kwargs):
         self._base_url = base_url.rstrip("/") + "/"
         self.dumb = dumb
         if opener is None:
             self.opener = default_urllib2_opener(config)
         else:
             self.opener = opener
+        if user:
+            pass_man=urllib2.HTTPPasswordMgrWithDefaultRealm()
+            pass_man.add_password(None,base_url,user,passwd)
+            self.opener.add_handler(urllib2.HTTPBasicAuthHandler(pass_man))
         GitClient.__init__(self, **kwargs)
 
     def get_url(self, path):
@@ -1218,6 +1223,7 @@ def get_transport_and_path_from_url(url, config=None, **kwargs):
     :return: Tuple with client instance and relative path.
     """
     parsed = urlparse.urlparse(url)
+    auth, host = urllib2.splituser(parsed.netloc)
     if parsed.scheme == 'git':
         return (TCPGitClient.from_parsedurl(parsed, **kwargs),
                 parsed.path)
@@ -1227,8 +1233,8 @@ def get_transport_and_path_from_url(url, config=None, **kwargs):
             path = parsed.path[1:]
         return SSHGitClient.from_parsedurl(parsed, **kwargs), path
     elif parsed.scheme in ('http', 'https'):
-        return HttpGitClient.from_parsedurl(parsed, config=config,
-                **kwargs), parsed.path
+        return HttpGitClient.from_parsedurl(parsed._replace(netloc=host),
+                config=config, passwd=parsed.password, **kwargs), parsed.path
     elif parsed.scheme == 'file':
         return default_local_git_client_cls.from_parsedurl(
             parsed, **kwargs), parsed.path