On Tue, Mar 1, 2011 at 20:47, <julianfoad_at_apache.org> wrote:
> Author: julianfoad
> Date: Tue Mar 1 17:47:04 2011
> New Revision: 1075942
>
> URL: http://svn.apache.org/viewvc?rev=1075942&view=rev
> Log:
> Make the pristine text store guarantee that a pristine text stream being
> read will remain readable even if the text is deleted from the store. To
> ensure that a recently deleted pristine file can be reinstated, on Windows
> we rename it to a new unique name before deleting it. This is probably not
> the most efficient way to work on Windows.
>
[...]
> + * On Windows, the file will not disappear immediately from the directory if
> + * it is still being read so the best thing to do is first rename it to a
> + * unique name. */
> +static svn_error_t *
> +remove_file(const char *file_abspath,
> + svn_wc__db_wcroot_t *wcroot,
> + svn_boolean_t ignore_enoent,
> + apr_pool_t *scratch_pool)
> +{
> +#if 1 /*def WIN32*/
I think it should be "#ifdef WIN32". Isn't it?
> + svn_error_t *err;
> + const char *temp_abspath;
> + const char *temp_dir_abspath
> + = pristine_get_tempdir(wcroot, scratch_pool, scratch_pool);
> +
> + /* To rename the file to a unique name in the temp dir, first create a
> + * uniquely named file in the temp dir and then overwrite it. */
> + SVN_ERR(svn_io_open_unique_file3(NULL, &temp_abspath, temp_dir_abspath,
> + svn_io_file_del_none,
> + scratch_pool, scratch_pool));
> + err = svn_io_file_rename(file_abspath, temp_abspath, scratch_pool);
> + if (err && ignore_enoent && APR_STATUS_IS_ENOENT(err->apr_err))
> + svn_error_clear(err);
> + else
> + SVN_ERR(err);
> + file_abspath = temp_abspath;
> +#endif
> +
> + SVN_ERR(svn_io_remove_file2(file_abspath, ignore_enoent, scratch_pool));
> +
> + return SVN_NO_ERROR;
> +}
> +
[...]
--
Ivan Zhakov
VisualSVN Team
Received on 2011-03-01 20:08:55 CET