/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/urlutils.py

  • Committer: Jelmer Vernooij
  • Date: 2010-04-29 23:19:16 UTC
  • mto: This revision was merged to the branch mainline in revision 5267.
  • Revision ID: jelmer@samba.org-20100429231916-wn84nn6tvwy5vk5t
Add join_segment_parameters / split_segment_parameters.

Show diffs side-by-side

added added

removed removed

Lines of Context:
482
482
    return (join(parent_url, subsegments[0]), subsegments[1:])
483
483
 
484
484
 
 
485
def split_segment_parameters(url):
 
486
    """Split the segment parameters of the last segment of a URL.
 
487
 
 
488
    :param url: A relative or absolute URL
 
489
    :return: (url, segment_parameters)
 
490
    """
 
491
    (base_url, subsegments) = split_subsegments(url)
 
492
    parameters = {}
 
493
    for subsegment in subsegments:
 
494
        (key, value) = subsegment.split("=", 1)
 
495
        parameters[key] = value
 
496
    return (base_url, parameters)
 
497
 
 
498
 
485
499
def join_subsegments(base, *subsegments):
486
500
    """Create a new URL by adding subsegments to an existing one.
487
501
 
495
509
    return ",".join((base,) + subsegments)
496
510
 
497
511
 
 
512
def join_segment_parameters(url, parameters):
 
513
    """Create a new URL by adding segment parameters to an existing one.
 
514
 
 
515
    :param url: A URL, as string
 
516
    :param parameters: Dictionary of parameters
 
517
    """
 
518
    (base, existing_parameters) = split_segment_parameters(url)
 
519
    new_parameters = {}
 
520
    new_parameters.update(existing_parameters)
 
521
    for key, value in parameters.iteritems():
 
522
        if "=" in key:
 
523
            raise errors.InvalidURLJoin("= exists in parameter key", url,
 
524
                parameters)
 
525
        new_parameters[key] = value
 
526
    return join_subsegments(base, 
 
527
        *["%s=%s" % item for item in new_parameters.items()])
 
528
 
 
529
 
498
530
def _win32_strip_local_trailing_slash(url):
499
531
    """Strip slashes after the drive letter"""
500
532
    if len(url) > WIN32_MIN_ABS_FILEURL_LENGTH: