1
# Copyright (C) 2005, 2006, 2007 Canonical Ltd
1
# Copyright (C) 2005, 2006, 2007, 2008 Canonical Ltd
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
329
329
raise NotImplementedError(self.clone)
331
def create_prefix(self):
332
"""Create all the directories leading down to self.base."""
334
needed = [cur_transport]
335
# Recurse upwards until we can create a directory successfully
337
new_transport = cur_transport.clone('..')
338
if new_transport.base == cur_transport.base:
339
raise errors.BzrCommandError(
340
"Failed to create path prefix for %s."
341
% cur_transport.base)
343
new_transport.mkdir('.')
344
except errors.NoSuchFile:
345
needed.append(new_transport)
346
cur_transport = new_transport
347
except errors.FileExists:
351
# Now we only need to create child directories
353
cur_transport = needed.pop()
354
cur_transport.ensure_base()
331
356
def ensure_base(self):
332
357
"""Ensure that the directory this transport references exists.
1336
1360
def _split_url(url):
1338
Extract the server address, the credentials and the path from the url.
1340
user, password, host and path should be quoted if they contain reserved
1343
:param url: an quoted url
1345
:return: (scheme, user, password, host, port, path) tuple, all fields
1348
if isinstance(url, unicode):
1349
raise errors.InvalidURL('should be ascii:\n%r' % url)
1350
url = url.encode('utf-8')
1351
(scheme, netloc, path, params,
1352
query, fragment) = urlparse.urlparse(url, allow_fragments=False)
1353
user = password = host = port = None
1355
user, host = netloc.rsplit('@', 1)
1357
user, password = user.split(':', 1)
1358
password = urllib.unquote(password)
1359
user = urllib.unquote(user)
1364
host, port = host.rsplit(':', 1)
1368
raise errors.InvalidURL('invalid port number %s in url:\n%s' %
1371
raise errors.InvalidURL('Host empty in: %s' % url)
1373
host = urllib.unquote(host)
1374
path = urllib.unquote(path)
1376
return (scheme, user, password, host, port, path)
1361
return urlutils.parse_url(url)
1379
1364
def _unsplit_url(scheme, user, password, host, port, path):