> -----Original Message----- > From: s...@apache.org [mailto:s...@apache.org] > Sent: dinsdag 5 maart 2013 13:57 > To: comm...@subversion.apache.org > Subject: svn commit: r1452780 - > /subversion/trunk/subversion/libsvn_subr/subst.c > > Author: stsp > Date: Tue Mar 5 12:57:00 2013 > New Revision: 1452780 > > URL: http://svn.apache.org/r1452780 > Log: > Address issue #4331, "working copy permissions change on commit for files > with keywords" by preventing the accidental removal of existing permission > bits set on files which undergo translation. > > This is not a perfect answer to the proposition given in the issue that > "Committing a file should not change its permissions in the WC." > Committed files may still get a new owner/group/other write bit set if > the umask allows this and the file's properties indicate that the file must > be set read-write (see svn_wc__sync_flags_with_props() which might tweak > permission bits of the translated file). But I think this is acceptable. > I'm not sure if never changing the permission bits of committed files is > a realistic requirement. Changing this would require additional effort > and might break other scenarios. > > * subversion/libsvn_subr/subst.c > (svn_subst_copy_and_translate4): Copy file permissions from the source > file > to the temporary file which stores the translated result. The temporary > file might have stricter permissions than the source, due to the way > our APIs for creating temporary files work. Removing permission bits from > files during translation is an unwanted side effect and should be avoided. > > Modified: > subversion/trunk/subversion/libsvn_subr/subst.c > > Modified: subversion/trunk/subversion/libsvn_subr/subst.c > URL: > http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/su > bst.c?rev=1452780&r1=1452779&r2=1452780&view=diff > ========================================================== > ==================== > --- subversion/trunk/subversion/libsvn_subr/subst.c (original) > +++ subversion/trunk/subversion/libsvn_subr/subst.c Tue Mar 5 12:57:00 > 2013 > @@ -1743,7 +1743,12 @@ svn_subst_copy_and_translate4(const char > } > > /* Now that dst_tmp contains the translated data, do the atomic rename. > */ > - return svn_error_trace(svn_io_file_rename(dst_tmp, dst, pool)); > + SVN_ERR(svn_io_file_rename(dst_tmp, dst, pool)); > + > + /* Preserve the source file's permission bits. */ > + SVN_ERR(svn_io_copy_perms(src, dst, pool)); > + > + return SVN_NO_ERROR; > }
There is a possible race condition here, which might be resolved by copying the permissions before moving. (But most likely you just get a different race condition by switching the order) Bert