~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/transport/ftp.py

Fix ftp transport so that it handles the 'mode' parameter when provided.

* ftp.py:
(FtpTransport.put_file, FtpTransport.mkdir,
FtpTransport._try_append): Use _setmode.
(FtpTransport._setmode): Fix implementation (parameters were
reversed and mode not converted).

* ftp_server.py:
(test_filesystem): New filesystem implementing chmod.
(test_authorizer.authorize): Use our filesystem when authorized.
(ftp_channel.cmd_site): Implement SITE CHOWN.

Show diffs side-by-side

added added

removed removed

Lines of Context:
310
310
            try:
311
311
                f.storbinary('STOR '+tmp_abspath, fp)
312
312
                self._rename_and_overwrite(tmp_abspath, abspath, f)
 
313
                self._setmode(relpath, mode)
313
314
                if bytes is not None:
314
315
                    return len(bytes)
315
316
                else:
351
352
            mutter("FTP mkd: %s", abspath)
352
353
            f = self._get_FTP()
353
354
            f.mkd(abspath)
 
355
            self._setmode(relpath, mode)
354
356
        except ftplib.error_perm, e:
355
357
            self._translate_perm_error(e, abspath,
356
358
                unknown_exc=errors.FileExists)
411
413
            conn = ftp.transfercmd(cmd)
412
414
            conn.sendall(text)
413
415
            conn.close()
414
 
            if mode:
415
 
                self._setmode(relpath, mode)
 
416
            self._setmode(relpath, mode)
416
417
            ftp.getresp()
417
418
        except ftplib.error_perm, e:
418
419
            self._translate_perm_error(e, abspath, extra='error appending',
432
433
        Only set permissions if the FTP server supports the 'SITE CHMOD'
433
434
        extension.
434
435
        """
435
 
        try:
436
 
            mutter("FTP site chmod: setting permissions to %s on %s",
437
 
                str(mode), self._remote_path(relpath))
438
 
            ftp = self._get_FTP()
439
 
            cmd = "SITE CHMOD %s %s" % (self._remote_path(relpath), str(mode))
440
 
            ftp.sendcmd(cmd)
441
 
        except ftplib.error_perm, e:
442
 
            # Command probably not available on this server
443
 
            warning("FTP Could not set permissions to %s on %s. %s",
444
 
                    str(mode), self._remote_path(relpath), str(e))
 
436
        if mode:
 
437
            try:
 
438
                mutter("FTP site chmod: setting permissions to %s on %s",
 
439
                    str(mode), self._remote_path(relpath))
 
440
                ftp = self._get_FTP()
 
441
                cmd = "SITE CHMOD %s %s" % (oct(mode),
 
442
                                            self._remote_path(relpath))
 
443
                ftp.sendcmd(cmd)
 
444
            except ftplib.error_perm, e:
 
445
                # Command probably not available on this server
 
446
                warning("FTP Could not set permissions to %s on %s. %s",
 
447
                        str(mode), self._remote_path(relpath), str(e))
445
448
 
446
449
    # TODO: jam 20060516 I believe ftp allows you to tell an ftp server
447
450
    #       to copy something to another machine. And you may be able