Author: kotkov Date: Tue Nov 29 12:08:53 2022 New Revision: 1905602 URL: http://svn.apache.org/viewvc?rev=1905602&view=rev Log: On the 'pristines-on-demand-on-mwf' branch: Fix a layering violation in the implementation of svn_wc__db_textbase_sync() by using the single svn_wc__db_wcroot_t that we've opened, instead of passing DB+WRI_ABSPATH further and letting the following functions open and use their own wcroot object.
* subversion/libsvn_wc/wc_db_private.h (svn_wc__db_pristine_prepare_install_internal, svn_wc__db_pristine_dehydrate_internal): New internal versions of the corresponding functions, accepting a svn_wc__db_wcroot_t. * subversion/libsvn_wc/wc_db_pristine.c (svn_wc__db_pristine_prepare_install, svn_wc__db_pristine_prepare_install_internal, svn_wc__db_pristine_dehydrate, svn_wc__db_pristine_dehydrate_internal): Implement the original versions of these functions by calling their new internal versions. * subversion/libsvn_wc/wc_db_textbase.c (svn_wc__db_textbase_sync, textbase_hydrate): Switch to the new internal versions of the functions. Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_pristine.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_private.h subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_textbase.c Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_pristine.c URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_pristine.c?rev=1905602&r1=1905601&r2=1905602&view=diff ============================================================================== --- subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_pristine.c (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_pristine.c Tue Nov 29 12:08:53 2022 @@ -401,11 +401,8 @@ svn_wc__db_pristine_prepare_install(svn_ apr_pool_t *result_pool, apr_pool_t *scratch_pool) { - svn_stream_t *stream; - svn_wc__db_install_data_t *install_data; svn_wc__db_wcroot_t *wcroot; const char *local_relpath; - const char *temp_dir_abspath; SVN_ERR_ASSERT(svn_dirent_is_absolute(wri_abspath)); @@ -413,6 +410,27 @@ svn_wc__db_pristine_prepare_install(svn_ wri_abspath, scratch_pool, scratch_pool)); VERIFY_USABLE_WCROOT(wcroot); + SVN_ERR(svn_wc__db_pristine_prepare_install_internal( + stream_p, install_data_p, sha1_checksum_p, md5_checksum_p, + wcroot, hydrated, result_pool, scratch_pool)); + + return SVN_NO_ERROR; +} + +svn_error_t * +svn_wc__db_pristine_prepare_install_internal(svn_stream_t **stream_p, + svn_wc__db_install_data_t **install_data_p, + svn_checksum_t **sha1_checksum_p, + svn_checksum_t **md5_checksum_p, + svn_wc__db_wcroot_t *wcroot, + svn_boolean_t hydrated, + apr_pool_t *result_pool, + apr_pool_t *scratch_pool) +{ + svn_stream_t *stream; + svn_wc__db_install_data_t *install_data; + const char *temp_dir_abspath; + temp_dir_abspath = pristine_get_tempdir(wcroot, scratch_pool, scratch_pool); install_data = apr_pcalloc(result_pool, sizeof(*install_data)); @@ -987,16 +1005,31 @@ svn_wc__db_pristine_dehydrate(svn_wc__db { svn_wc__db_wcroot_t *wcroot; const char *local_relpath; - const char *pristine_abspath; - svn_sqlite__stmt_t *stmt; SVN_ERR_ASSERT(svn_dirent_is_absolute(wri_abspath)); - SVN_ERR_ASSERT(sha1_checksum->kind == svn_checksum_sha1); SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db, wri_abspath, scratch_pool, scratch_pool)); VERIFY_USABLE_WCROOT(wcroot); + SVN_ERR(svn_wc__db_pristine_dehydrate_internal(wcroot, sha1_checksum, + scratch_pool)); + + return SVN_NO_ERROR; +} + + +svn_error_t * +svn_wc__db_pristine_dehydrate_internal(svn_wc__db_wcroot_t *wcroot, + const svn_checksum_t *sha1_checksum, + apr_pool_t *scratch_pool) +{ + ; + const char *pristine_abspath; + svn_sqlite__stmt_t *stmt; + + SVN_ERR_ASSERT(sha1_checksum->kind == svn_checksum_sha1); + SVN_ERR(get_pristine_fname(&pristine_abspath, wcroot->abspath, sha1_checksum, scratch_pool, scratch_pool)); Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_private.h URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_private.h?rev=1905602&r1=1905601&r2=1905602&view=diff ============================================================================== --- subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_private.h (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_private.h Tue Nov 29 12:08:53 2022 @@ -566,4 +566,23 @@ svn_wc__db_verify_db_full_internal(svn_w void *baton, apr_pool_t *scratch_pool); +/* Like svn_wc__db_pristine_prepare_install() but taking WCROOT instead + of DB+WRI_ABSPATH. */ +svn_error_t * +svn_wc__db_pristine_prepare_install_internal(svn_stream_t **stream_p, + svn_wc__db_install_data_t **install_data_p, + svn_checksum_t **sha1_checksum_p, + svn_checksum_t **md5_checksum_p, + svn_wc__db_wcroot_t *wcroot, + svn_boolean_t hydrated, + apr_pool_t *result_pool, + apr_pool_t *scratch_pool); + +/* Like svn_wc__db_pristine_dehydrate() but taking WCROOT instead + of DB+WRI_ABSPATH. */ +svn_error_t * +svn_wc__db_pristine_dehydrate_internal(svn_wc__db_wcroot_t *wcroot, + const svn_checksum_t *sha1_checksum, + apr_pool_t *scratch_pool); + #endif /* WC_DB_PRIVATE_H */ Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_textbase.c URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_textbase.c?rev=1905602&r1=1905601&r2=1905602&view=diff ============================================================================== --- subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_textbase.c (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_textbase.c Tue Nov 29 12:08:53 2022 @@ -160,8 +160,7 @@ svn_wc__db_textbase_walk(svn_wc__db_t *d } static svn_error_t * -textbase_hydrate(svn_wc__db_t *db, - const char *wri_abspath, +textbase_hydrate(svn_wc__db_wcroot_t *wcroot, svn_wc__db_textbase_hydrate_cb_t hydrate_callback, void *hydrate_baton, svn_cancel_func_t cancel_func, @@ -178,14 +177,10 @@ textbase_hydrate(svn_wc__db_t *db, svn_checksum_t *install_md5_checksum; svn_error_t *err; - /* ### Use svn_wc__db_wcroot_t */ - - SVN_ERR(svn_wc__db_pristine_prepare_install(&install_stream, - &install_data, - &install_sha1_checksum, - &install_md5_checksum, - db, wri_abspath, TRUE, - scratch_pool, scratch_pool)); + SVN_ERR(svn_wc__db_pristine_prepare_install_internal( + &install_stream, &install_data, + &install_sha1_checksum, &install_md5_checksum, + wcroot, TRUE, scratch_pool, scratch_pool)); err = hydrate_callback(hydrate_baton, repos_root_url, repos_relpath, revision, @@ -325,10 +320,10 @@ svn_wc__db_textbase_sync(svn_wc__db_t *d svn_checksum_to_cstring_display(checksum, iterpool)); } - err = textbase_hydrate(db, local_abspath, hydrate_callback, - hydrate_baton, cancel_func, cancel_baton, - checksum, repos_root_url, repos_relpath, - revision, iterpool); + err = textbase_hydrate(wcroot, hydrate_callback, hydrate_baton, + cancel_func, cancel_baton, checksum, + repos_root_url, repos_relpath, revision, + iterpool); if (err) return svn_error_compose_create(err, svn_sqlite__reset(stmt)); } @@ -337,8 +332,8 @@ svn_wc__db_textbase_sync(svn_wc__db_t *d { if (allow_dehydrate) { - err = svn_wc__db_pristine_dehydrate(db, local_abspath, - checksum, iterpool); + err = svn_wc__db_pristine_dehydrate_internal(wcroot, checksum, + iterpool); if (err) return svn_error_compose_create(err, svn_sqlite__reset(stmt)); }