~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/errors.py

  • Committer: Vincent Ladeuil
  • Date: 2008-12-12 13:09:26 UTC
  • mfrom: (3878.4.7 303959-redirection)
  • mto: This revision was merged to the branch mainline in revision 3903.
  • Revision ID: v.ladeuil+lp@free.fr-20081212130926-ov09evfb53npj0z0
Fix redirection related bugs: #245964, #265070, #270863 and #303959

Show diffs side-by-side

added added

removed removed

Lines of Context:
1661
1661
 
1662
1662
    _fmt = '%(source)s is%(permanently)s redirected to %(target)s'
1663
1663
 
1664
 
    def __init__(self, source, target, is_permanent=False, qual_proto=None):
 
1664
    def __init__(self, source, target, is_permanent=False):
1665
1665
        self.source = source
1666
1666
        self.target = target
1667
1667
        if is_permanent:
1668
1668
            self.permanently = ' permanently'
1669
1669
        else:
1670
1670
            self.permanently = ''
1671
 
        self._qualified_proto = qual_proto
1672
1671
        TransportError.__init__(self)
1673
1672
 
1674
 
    def _requalify_url(self, url):
1675
 
        """Restore the qualified proto in front of the url"""
1676
 
        # When this exception is raised, source and target are in
1677
 
        # user readable format. But some transports may use a
1678
 
        # different proto (http+urllib:// will present http:// to
1679
 
        # the user. If a qualified proto is specified, the code
1680
 
        # trapping the exception can get the qualified urls to
1681
 
        # properly handle the redirection themself (creating a
1682
 
        # new transport object from the target url for example).
1683
 
        # But checking that the scheme of the original and
1684
 
        # redirected urls are the same can be tricky. (see the
1685
 
        # FIXME in BzrDir.open_from_transport for the unique use
1686
 
        # case so far).
1687
 
        if self._qualified_proto is None:
1688
 
            return url
1689
 
 
1690
 
        # The TODO related to NotBranchError mention that doing
1691
 
        # that kind of manipulation on the urls may not be the
1692
 
        # exception object job. On the other hand, this object is
1693
 
        # the interface between the code and the user so
1694
 
        # presenting the urls in different ways is indeed its
1695
 
        # job...
1696
 
        import urlparse
1697
 
        proto, netloc, path, query, fragment = urlparse.urlsplit(url)
1698
 
        return urlparse.urlunsplit((self._qualified_proto, netloc, path,
1699
 
                                   query, fragment))
1700
 
 
1701
 
    def get_source_url(self):
1702
 
        return self._requalify_url(self.source)
1703
 
 
1704
 
    def get_target_url(self):
1705
 
        return self._requalify_url(self.target)
1706
 
 
1707
1673
 
1708
1674
class TooManyRedirections(TransportError):
1709
1675