~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/transport/sftp.py

make sure to always close the file object.

Show diffs side-by-side

added added

removed removed

Lines of Context:
639
639
        #       set the file mode at create time. If it does, use it.
640
640
        #       But for now, we just chmod later anyway.
641
641
 
642
 
        fout = None
643
642
        def _open_and_write_file():
644
643
            """Try to open the target file, raise error on failure"""
 
644
            fout = None
645
645
            try:
646
 
                fout = self._sftp.file(abspath, mode='wb')
647
 
                fout.set_pipelined(True)
648
 
                self._pump(f, fout)
649
 
            except (paramiko.SSHException, IOError), e:
650
 
                self._translate_io_exception(e, abspath, ': unable to open')
 
646
                try:
 
647
                    fout = self._sftp.file(abspath, mode='wb')
 
648
                    fout.set_pipelined(True)
 
649
                    self._pump(f, fout)
 
650
                except (paramiko.SSHException, IOError), e:
 
651
                    self._translate_io_exception(e, abspath, ': unable to open')
651
652
 
652
 
            # This is designed to chmod() right before we close.
653
 
            # Because we set_pipelined() earlier, theoretically we might 
654
 
            # avoid the round trip for fout.close()
655
 
            if mode is not None:
656
 
                self._sftp.chmod(abspath, mode)
657
 
            fout.close()
 
653
                # This is designed to chmod() right before we close.
 
654
                # Because we set_pipelined() earlier, theoretically we might 
 
655
                # avoid the round trip for fout.close()
 
656
                if mode is not None:
 
657
                    self._sftp.chmod(abspath, mode)
 
658
            finally:
 
659
                if fout is not None:
 
660
                    fout.close()
658
661
 
659
662
        if not create_parent_dir:
660
663
            _open_and_write_file()