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));
             }