You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ko...@apache.org on 2022/11/29 12:08:54 UTC
svn commit: r1905602 - in /subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc: wc_db_pristine.c wc_db_private.h wc_db_textbase.c
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));
}