On Fri, Jul 18, 2014 at 03:09:31PM -0700, Nick Chadwick wrote: > Hello, I just ran into a small issue checking out on Linux (Ubuntu 14.04) > to an exFAT drive. > > The specific error I received was: > > svn: E000038: Can't set permissions on > '/media/exFAT_drive/myrepo/.svn/tmp/svn-5fj4RP': Function not implemented > > I believe this issue stems from an incorrect check for why the permissions > change failed. In subversion/libsvn_subr/io.c on line 895 this error is > first detected from apr_file_perms_set(fname_apr, perms); And on line 955 > there is a check for APR_STATUS_IS_ENOTIMPL which unsets the error when it > stems from APR platform issues. > > But I think in this case, its the actual filesystem, not APR, which doesn't > support permissions changes, but svn dies out rather than ignoring the > error. > > Regards, > > -Nick
Looks like I introduced this problem while improving tempfile handling some years ago. Can you try this patch, please? Index: subversion/libsvn_subr/io.c =================================================================== --- subversion/libsvn_subr/io.c (revision 1611758) +++ subversion/libsvn_subr/io.c (working copy) @@ -4675,8 +4675,25 @@ svn_io_open_unique_file3(apr_file_t **file, * case, but only if the umask allows it. */ if (!using_system_temp_dir) { + svn_error_t *err; + SVN_ERR(merge_default_file_perms(tempfile, &perms, scratch_pool)); - SVN_ERR(file_perms_set2(tempfile, perms, scratch_pool)); + err = file_perms_set2(tempfile, perms, scratch_pool); + if (err) + { + if (APR_STATUS_IS_INCOMPLETE(err->apr_err) || + APR_STATUS_IS_ENOTIMPL(err->apr_err)) + svn_error_clear(err); + else + { + const char *message; + message = apr_psprintf(scratch_pool, + _("Can't set permissions on '%s'"), + svn_dirent_local_style(tempname, + scratch_pool)); + return svn_error_quick_wrap(err, message); + } + } } #endif