~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/osutils.py

Support Unicode paths for ftp transport (encoded as utf8).

* bzrlib/transport/ftp/__init__.py:
(FtpTransport._remote_path): Remove the work around, we send and
receive utf8 paths.

* bzrlib/tests/per_transport.py:
(TransportTests.test_unicode_paths): Check that the *server* can
support Unicode paths).

* bzrlib/tests/ftp_server/pyftpdlib_based.py:
(BzrConformingFS.ftp2fs): Added to decode utf8 received paths.

* bzrlib/tests/ftp_server/medusa_based.py:
(FTPTestServer): Declare that medusa can't support Unicode paths
in an had-hoc way.

* bzrlib/osutils.py:
(fancy_rename): Ensure all paths are unicode.

Show diffs side-by-side

added added

removed removed

Lines of Context:
202
202
    :param old: The old path, to rename from
203
203
    :param new: The new path, to rename to
204
204
    :param rename_func: The potentially non-atomic rename function
205
 
    :param unlink_func: A way to delete the target file if the full rename succeeds
 
205
    :param unlink_func: A way to delete the target file if the full rename
 
206
        succeeds
206
207
    """
207
 
 
 
208
    new = safe_unicode(new)
208
209
    # sftp rename doesn't allow overwriting, so play tricks:
209
210
    base = os.path.basename(new)
210
211
    dirname = os.path.dirname(new)
211
 
    tmp_name = u'tmp.%s.%.9f.%d.%s' % (base, time.time(), os.getpid(), rand_chars(10))
 
212
    tmp_name = u'tmp.%s.%.9f.%d.%s' % (base, time.time(),
 
213
                                       os.getpid(), rand_chars(10))
212
214
    tmp_name = pathjoin(dirname, tmp_name)
213
215
 
214
216
    # Rename the file out of the way, but keep track if it didn't exist