~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/transport/sftp.py

  • Committer: Robert Collins
  • Date: 2006-09-29 06:24:03 UTC
  • mto: This revision was merged to the branch mainline in revision 2587.
  • Revision ID: robertc@robertcollins.net-20060929062403-7e8b779181d8766c
``Transport.get`` has had its interface made more clear for ease of use.
Retrieval of a directory must now fail with either 'PathError' at open
time, or raise 'ReadError' on a read. (Robert Collins)

Show diffs side-by-side

added added

removed removed

Lines of Context:
50
50
from bzrlib.osutils import pathjoin, fancy_rename, getcwd
51
51
from bzrlib.trace import mutter, warning
52
52
from bzrlib.transport import (
 
53
    LateReadError,
53
54
    register_urlparse_netloc_protocol,
54
55
    Server,
55
56
    split_url,
392
393
                f.prefetch()
393
394
            return f
394
395
        except (IOError, paramiko.SSHException), e:
395
 
            self._translate_io_exception(e, path, ': error retrieving')
 
396
            self._translate_io_exception(e, path, ': error retrieving',
 
397
                raise_on_failure=False)
 
398
            # a paramiko generic failure occured.
 
399
            return LateReadError(relpath)
396
400
 
397
401
    def readv(self, relpath, offsets):
398
402
        """See Transport.readv()"""
682
686
        self._mkdir(self._remote_path(relpath), mode=mode)
683
687
 
684
688
    def _translate_io_exception(self, e, path, more_info='', 
685
 
                                failure_exc=PathError):
 
689
                                failure_exc=PathError,
 
690
                                raise_on_failure=True):
686
691
        """Translate a paramiko or IOError into a friendlier exception.
687
692
 
688
693
        :param e: The original exception
694
699
                           no more information.
695
700
                           If this parameter is set, it defines the exception 
696
701
                           to raise in these cases.
 
702
        :param raise_on_failure: When False do not raise on a generic paramiko
 
703
            'Failure', rather return to the caller to dispatch differently.
697
704
        """
698
705
        # paramiko seems to generate detailless errors.
699
706
        self._translate_error(e, path, raise_generic=False)
705
712
                raise FileExists(path, str(e) + more_info)
706
713
            # strange but true, for the paramiko server.
707
714
            if (e.args == ('Failure',)):
708
 
                raise failure_exc(path, str(e) + more_info)
 
715
                if raise_on_failure:
 
716
                    raise failure_exc(path, str(e) + more_info)
 
717
                else:
 
718
                    return
709
719
            mutter('Raising exception with args %s', e.args)
710
720
        if getattr(e, 'errno', None) is not None:
711
721
            mutter('Raising exception with errno %s', e.errno)