~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/transport/__init__.py

  • Committer: John Arbash Meinel
  • Date: 2006-07-07 21:40:36 UTC
  • mto: This revision was merged to the branch mainline in revision 1847.
  • Revision ID: john@arbash-meinel.com-20060707214036-98a85408a56630c2
Update get_transport to raise a nicer error which includes dependency info

Show diffs side-by-side

added added

removed removed

Lines of Context:
698
698
    if base is None:
699
699
        base = '.'
700
700
 
 
701
    last_err = None
 
702
 
701
703
    def convert_path_to_url(base, error_str):
702
704
        m = _urlRE.match(base)
703
705
        if m:
704
706
            # This looks like a URL, but we weren't able to 
705
707
            # instantiate it as such raise an appropriate error
706
 
            raise errors.InvalidURL(base, error_str % m.group('proto'))
 
708
            raise errors.UnsupportedProtocol(base, last_err)
707
709
        # This doesn't look like a protocol, consider it a local path
708
710
        new_base = urlutils.local_path_to_url(base)
709
711
        mutter('converting os path %r => url %s', base, new_base)
719
721
    
720
722
    for proto, factory_list in _protocol_handlers.iteritems():
721
723
        if proto is not None and base.startswith(proto):
722
 
            t = _try_transport_factories(base, factory_list)
 
724
            t, last_err = _try_transport_factories(base, factory_list)
723
725
            if t:
724
726
                return t
725
727
 
728
730
    base = convert_path_to_url(base, 'Unsupported protocol: %s')
729
731
 
730
732
    # The default handler is the filesystem handler, stored as protocol None
731
 
    return _try_transport_factories(base, _protocol_handlers[None])
 
733
    return _try_transport_factories(base, _protocol_handlers[None])[0]
732
734
 
733
735
 
734
736
def _try_transport_factories(base, factory_list):
 
737
    last_err = None
735
738
    for factory in factory_list:
736
739
        try:
737
 
            return factory(base)
 
740
            return factory(base), None
738
741
        except DependencyNotPresent, e:
739
742
            mutter("failed to instantiate transport %r for %r: %r" %
740
743
                    (factory, base, e))
 
744
            last_err = e
741
745
            continue
742
 
    return None
 
746
    return None, last_err
743
747
 
744
748
 
745
749
class Server(object):