Mercurial > hgsubversion
comparison svnwrap/svn_swig_wrapper.py @ 235:2969a20e0eef
Add support for user:pass@url repositories to be hg-like
| author | Daniel Tang <dytang@cs.purdue.edu> |
|---|---|
| date | Mon, 06 Apr 2009 11:19:51 -0400 |
| parents | 33e885f5f86a |
| children | e8b3ca865f93 |
comparison
equal
deleted
inserted
replaced
| 234:33e885f5f86a | 235:2969a20e0eef |
|---|---|
| 3 import os | 3 import os |
| 4 import shutil | 4 import shutil |
| 5 import sys | 5 import sys |
| 6 import tempfile | 6 import tempfile |
| 7 import hashlib | 7 import hashlib |
| 8 import urlparse | |
| 8 | 9 |
| 9 from svn import client | 10 from svn import client |
| 10 from svn import core | 11 from svn import core |
| 11 from svn import delta | 12 from svn import delta |
| 12 from svn import ra | 13 from svn import ra |
| 89 client.get_simple_prompt_provider(user_pass_prompt, 2), | 90 client.get_simple_prompt_provider(user_pass_prompt, 2), |
| 90 ] | 91 ] |
| 91 | 92 |
| 92 return core.svn_auth_open(providers, pool) | 93 return core.svn_auth_open(providers, pool) |
| 93 | 94 |
| 95 def parse_url(url): | |
| 96 """Parse a URL and return a tuple (username, password, url) | |
| 97 """ | |
| 98 scheme, netloc, path, params, query, fragment = urlparse.urlparse(url) | |
| 99 user, passwd = None, None | |
| 100 if '@' in netloc: | |
| 101 userpass, netloc = netloc.split('@') | |
| 102 if ':' in userpass: | |
| 103 user, passwd = userpass.split(':') | |
| 104 user, passwd = urlparse.unquote(user) or None, urlparse.unquote(passwd) or None | |
| 105 else: | |
| 106 user = urlparse.unquote(userpass) or None | |
| 107 url = urlparse.urlunparse((scheme, netloc, path, params, query, fragment)) | |
| 108 return (user, passwd, url) | |
| 94 | 109 |
| 95 class Revision(object): | 110 class Revision(object): |
| 96 """Wrapper for a Subversion revision. | 111 """Wrapper for a Subversion revision. |
| 97 """ | 112 """ |
| 98 def __init__(self, revnum, author, message, date, paths, strip_path=''): | 113 def __init__(self, revnum, author, message, date, paths, strip_path=''): |
| 117 | 132 |
| 118 This uses the SWIG Python bindings, and will only work on svn >= 1.4. | 133 This uses the SWIG Python bindings, and will only work on svn >= 1.4. |
| 119 It takes a required param, the URL. | 134 It takes a required param, the URL. |
| 120 """ | 135 """ |
| 121 def __init__(self, url='', username='', password=''): | 136 def __init__(self, url='', username='', password=''): |
| 122 self.svn_url = url | 137 parsed = parse_url(url) |
| 123 self.username = username | 138 # --username and --password override URL credentials |
| 124 self.password = password | 139 self.username = username or parsed[0] |
| 140 self.password = password or parsed[1] | |
| 141 self.svn_url = parsed[2] | |
| 125 self.auth_baton_pool = core.Pool() | 142 self.auth_baton_pool = core.Pool() |
| 126 self.auth_baton = _create_auth_baton(self.auth_baton_pool) | 143 self.auth_baton = _create_auth_baton(self.auth_baton_pool) |
| 127 | 144 |
| 128 self.init_ra_and_client() | 145 self.init_ra_and_client() |
| 129 self.uuid = ra.get_uuid(self.ra, self.pool) | 146 self.uuid = ra.get_uuid(self.ra, self.pool) |
