~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/urlutils.py

  • Committer: John Arbash Meinel
  • Date: 2009-03-27 22:29:55 UTC
  • mto: (3735.39.2 clean)
  • mto: This revision was merged to the branch mainline in revision 4280.
  • Revision ID: john@arbash-meinel.com-20090327222955-utifmfm888zerixt
Implement apply_delta_to_source which doesn't have to malloc another string.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006, 2008 Canonical Ltd
 
1
# Bazaar -- distributed version control
 
2
#
 
3
# Copyright (C) 2006 Canonical Ltd
2
4
#
3
5
# This program is free software; you can redistribute it and/or modify
4
6
# it under the terms of the GNU General Public License as published by
685
687
    if len(segments) == 0:
686
688
        return '.'
687
689
    return osutils.pathjoin(*segments)
688
 
 
689
 
 
690
 
 
691
 
def parse_url(url):
692
 
    """Extract the server address, the credentials and the path from the url.
693
 
 
694
 
    user, password, host and path should be quoted if they contain reserved
695
 
    chars.
696
 
 
697
 
    :param url: an quoted url
698
 
 
699
 
    :return: (scheme, user, password, host, port, path) tuple, all fields
700
 
        are unquoted.
701
 
    """
702
 
    if isinstance(url, unicode):
703
 
        raise errors.InvalidURL('should be ascii:\n%r' % url)
704
 
    url = url.encode('utf-8')
705
 
    (scheme, netloc, path, params,
706
 
     query, fragment) = urlparse.urlparse(url, allow_fragments=False)
707
 
    user = password = host = port = None
708
 
    if '@' in netloc:
709
 
        user, host = netloc.rsplit('@', 1)
710
 
        if ':' in user:
711
 
            user, password = user.split(':', 1)
712
 
            password = urllib.unquote(password)
713
 
        user = urllib.unquote(user)
714
 
    else:
715
 
        host = netloc
716
 
 
717
 
    if ':' in host and not (host[0] == '[' and host[-1] == ']'): #there *is* port
718
 
        host, port = host.rsplit(':',1)
719
 
        try:
720
 
            port = int(port)
721
 
        except ValueError:
722
 
            raise errors.InvalidURL('invalid port number %s in url:\n%s' %
723
 
                                    (port, url))
724
 
    if host != "" and host[0] == '[' and host[-1] == ']': #IPv6
725
 
        host = host[1:-1]
726
 
 
727
 
    host = urllib.unquote(host)
728
 
    path = urllib.unquote(path)
729
 
 
730
 
    return (scheme, user, password, host, port, path)