~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/transport/sftp.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2010-09-29 22:03:03 UTC
  • mfrom: (5416.2.6 jam-integration)
  • Revision ID: pqm@pqm.ubuntu.com-20100929220303-cr95h8iwtggco721
(mbp) Add 'break-lock --force'

Show diffs side-by-side

added added

removed removed

Lines of Context:
82
82
else:
83
83
    from paramiko.sftp import (SFTP_FLAG_WRITE, SFTP_FLAG_CREATE,
84
84
                               SFTP_FLAG_EXCL, SFTP_FLAG_TRUNC,
85
 
                               CMD_HANDLE, CMD_OPEN)
 
85
                               SFTP_OK, CMD_HANDLE, CMD_OPEN)
86
86
    from paramiko.sftp_attr import SFTPAttributes
87
87
    from paramiko.sftp_file import SFTPFile
88
88
 
389
389
                                         self._host, self._port)
390
390
        return connection, (user, password)
391
391
 
 
392
    def disconnect(self):
 
393
        connection = self._get_connection()
 
394
        if connection is not None:
 
395
            connection.close()
 
396
 
392
397
    def _get_sftp(self):
393
398
        """Ensures that a connection is established"""
394
399
        connection = self._get_connection()
715
720
            if (e.args[0].startswith('Directory not empty: ')
716
721
                or getattr(e, 'errno', None) == errno.ENOTEMPTY):
717
722
                raise errors.DirectoryNotEmpty(path, str(e))
 
723
            if e.args == ('Operation unsupported',):
 
724
                raise errors.TransportNotPossible()
718
725
            mutter('Raising exception with args %s', e.args)
719
726
        if getattr(e, 'errno', None) is not None:
720
727
            mutter('Raising exception with errno %s', e.errno)
810
817
        """Return the stat information for a file."""
811
818
        path = self._remote_path(relpath)
812
819
        try:
813
 
            return self._get_sftp().stat(path)
 
820
            return self._get_sftp().lstat(path)
814
821
        except (IOError, paramiko.SSHException), e:
815
822
            self._translate_io_exception(e, path, ': unable to stat')
816
823
 
 
824
    def readlink(self, relpath):
 
825
        """See Transport.readlink."""
 
826
        path = self._remote_path(relpath)
 
827
        try:
 
828
            return self._get_sftp().readlink(path)
 
829
        except (IOError, paramiko.SSHException), e:
 
830
            self._translate_io_exception(e, path, ': unable to readlink')
 
831
 
 
832
    def symlink(self, source, link_name):
 
833
        """See Transport.symlink."""
 
834
        try:
 
835
            conn = self._get_sftp()
 
836
            sftp_retval = conn.symlink(source, link_name)
 
837
            if SFTP_OK != sftp_retval:
 
838
                raise TransportError(
 
839
                    '%r: unable to create symlink to %r' % (link_name, source),
 
840
                    sftp_retval
 
841
                )
 
842
        except (IOError, paramiko.SSHException), e:
 
843
            self._translate_io_exception(e, link_name,
 
844
                                         ': unable to create symlink to %r' % (source))
 
845
 
817
846
    def lock_read(self, relpath):
818
847
        """
819
848
        Lock the given file for shared (read) access.