On 28 May 2015 at 20:11, Philip Martin <philip.mar...@wandisco.com> wrote: > Ivan Zhakov <i...@visualsvn.com> writes: > >> 1. Make svn_io_file_name() consistently return error for cross volume >> renames by fixing APR or using platform specific code. >> 2. For all platforms handle APR_STATUS_IS_EXDEV() like this: copy file >> to temporary file in the same folder as destination and then rename >> it. >> >> I'm ready to implement it if nobody object. > > We do most (all?) of that. svn_io_file_rename() calls apr_file_rename() > and on Unix that calls rename() which can fail with EXDEV. When that > happens svn_io_file_rename() fails. I meant to add platform specific code to svn_io_file_rename() to also fail with EXDEV on Windows for cross-volume copies. It could be nice to fix in APR, but they seem to ignore our patches :(
> svn_io_file_move() catches EXDEV and copies the file to a temporary in > the destination directory and then calls apr_file_rename(). > The svn_io_file_moves() catches EXDEV and perform copy to temp + rename on all platforms, while svn_fs_fs__move_into_place() on Windows doesn't. It relies to the fact that svn_io_file_rename() never fails in Windows, which is should be fixed imo. -- Ivan Zhakov CTO | VisualSVN | http://www.visualsvn.com