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/12/05 15:32:05 UTC

svn commit: r1905767 - in /subversion/branches/pristines-on-demand-on-mwf/subversion: include/svn_wc.h libsvn_client/textbase.c libsvn_wc/textbase.c

Author: kotkov
Date: Mon Dec  5 15:32:05 2022
New Revision: 1905767

URL: http://svn.apache.org/viewvc?rev=1905767&view=rev
Log:
On the 'pristines-on-demand-on-mwf' branch: Send notifications from the
svn_wc_textbase_sync() function, rather from an internal svn_client function.

Do this to ensure that we'll only send the notifications when a working copy
doesn't store local pristines, as we check that in svn_wc_textbase_sync().
Also this should allow users of the svn_wc API to use the notifications
as well.

* subversion/include/svn_wc.h
  (svn_wc_textbase_sync): Add notify_func and notify_baton.

* subversion/libsvn_wc/textbase.c
  (): Include "svn_path.h".
  (textbase_sync_baton_t): Add `notify_func` and `notify_baton`.
  (textbase_fetch_cb, svn_wc_textbase_sync): Send the notifications from this
   layer instead of sending them from …

* subversion/libsvn_client/textbase.c
  (textbase_fetch_cb, svn_client__textbase_sync): …here.

Modified:
    subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_wc.h
    subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/textbase.c
    subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/textbase.c

Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_wc.h
URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_wc.h?rev=1905767&r1=1905766&r2=1905767&view=diff
==============================================================================
--- subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_wc.h (original)
+++ subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_wc.h Mon Dec  5 15:32:05 2022
@@ -7533,6 +7533,9 @@ typedef svn_error_t *(*svn_wc_textbase_f
  * If @a allow_dehydrate is true, remove the on disk text-base contents
  * that is not required.
  *
+ * If @a notify_func is non-NULL, invoke it with @a notify_baton to report
+ * the progress of the operation.
+ *
  * @see svn_wc_textbase_fetch_cb_t
  * @see svn_client__textbase_sync for usage/implementation example.
  *
@@ -7547,6 +7550,8 @@ svn_wc_textbase_sync(svn_wc_context_t *w
                      void *fetch_baton,
                      svn_cancel_func_t cancel_func,
                      void *cancel_baton,
+                     svn_wc_notify_func2_t notify_func,
+                     void *notify_baton,
                      apr_pool_t *scratch_pool);
 
 /**

Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/textbase.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/textbase.c?rev=1905767&r1=1905766&r2=1905767&view=diff
==============================================================================
--- subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/textbase.c (original)
+++ subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/textbase.c Mon Dec  5 15:32:05 2022
@@ -64,16 +64,6 @@ textbase_fetch_cb(void *baton,
       b->ra_session = session;
     }
 
-  if (b->ctx->notify_func2)
-    {
-      svn_wc_notify_t *notify
-        = svn_wc_create_notify(".", svn_wc_notify_hydrating_file,
-                               scratch_pool);
-      notify->revision = revision;
-      notify->url = url;
-      b->ctx->notify_func2(b->ctx->notify_baton2, notify, scratch_pool);
-    }
-
   SVN_ERR(svn_client__ensure_ra_session_url(&old_url, b->ra_session, url,
                                             scratch_pool));
   SVN_ERR(svn_ra_fetch_file_contents(b->ra_session, "", revision, contents,
@@ -109,14 +99,6 @@ svn_client__textbase_sync(svn_ra_session
   fetch_baton.ctx = ctx;
   fetch_baton.ra_session = ra_session;
 
-  if (ctx->notify_func2 && allow_hydrate)
-    {
-      svn_wc_notify_t *notify
-        = svn_wc_create_notify(local_abspath, svn_wc_notify_hydrating_start,
-                               scratch_pool);
-      ctx->notify_func2(ctx->notify_baton2, notify, scratch_pool);
-    }
-
   if (ra_session)
     SVN_ERR(svn_ra_get_session_url(ra_session, &old_session_url, scratch_pool));
 
@@ -124,19 +106,12 @@ svn_client__textbase_sync(svn_ra_session
                                allow_hydrate, allow_dehydrate,
                                textbase_fetch_cb, &fetch_baton,
                                ctx->cancel_func, ctx->cancel_baton,
+                               ctx->notify_func2, ctx->notify_baton2,
                                scratch_pool));
 
   if (ra_session)
     SVN_ERR(svn_ra_reparent(ra_session, old_session_url, scratch_pool));
 
-  if (ctx->notify_func2 && allow_hydrate)
-    {
-      svn_wc_notify_t *notify
-        = svn_wc_create_notify(local_abspath, svn_wc_notify_hydrating_end,
-                               scratch_pool);
-      ctx->notify_func2(ctx->notify_baton2, notify, scratch_pool);
-    }
-
   if (ra_session_p)
     *ra_session_p = fetch_baton.ra_session;
 

Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/textbase.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/textbase.c?rev=1905767&r1=1905766&r2=1905767&view=diff
==============================================================================
--- subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/textbase.c (original)
+++ subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/textbase.c Mon Dec  5 15:32:05 2022
@@ -22,6 +22,7 @@
  */
 
 #include "svn_dirent_uri.h"
+#include "svn_path.h"
 
 #include "textbase.h"
 #include "wc.h"
@@ -468,6 +469,8 @@ typedef struct textbase_sync_baton_t
   svn_wc__db_t *db;
   svn_wc_textbase_fetch_cb_t fetch_callback;
   void *fetch_baton;
+  svn_wc_notify_func2_t notify_func;
+  void *notify_baton;
 } textbase_sync_baton_t;
 
 /* Decide whether the text base should be referenced (or "pinned")
@@ -527,6 +530,18 @@ textbase_fetch_cb(void *baton,
 {
   textbase_sync_baton_t *b = baton;
 
+  if (b->notify_func)
+    {
+      svn_wc_notify_t *notify
+        = svn_wc_create_notify(".", svn_wc_notify_hydrating_file,
+                               scratch_pool);
+      notify->revision = revision;
+      notify->url = svn_path_url_add_component2(repos_root_url,
+                                                repos_relpath,
+                                                scratch_pool);
+      b->notify_func(b->notify_baton, notify, scratch_pool);
+    }
+
   SVN_ERR(b->fetch_callback(b->fetch_baton, repos_root_url,
                             repos_relpath, revision, contents,
                             cancel_func, cancel_baton, scratch_pool));
@@ -543,6 +558,8 @@ svn_wc_textbase_sync(svn_wc_context_t *w
                      void *fetch_baton,
                      svn_cancel_func_t cancel_func,
                      void *cancel_baton,
+                     svn_wc_notify_func2_t notify_func,
+                     void *notify_baton,
                      apr_pool_t *scratch_pool)
 {
   svn_boolean_t store_pristine;
@@ -558,17 +575,35 @@ svn_wc_textbase_sync(svn_wc_context_t *w
   baton.db = wc_ctx->db;
   baton.fetch_callback = fetch_callback;
   baton.fetch_baton = fetch_baton;
+  baton.notify_func = notify_func;
+  baton.notify_baton = notify_baton;
 
   SVN_ERR(svn_wc__db_textbase_walk(wc_ctx->db, local_abspath,
                                    textbase_walk_cb, &baton,
                                    cancel_func, cancel_baton,
                                    scratch_pool));
 
+  if (notify_func && allow_hydrate)
+    {
+      svn_wc_notify_t *notify
+        = svn_wc_create_notify(local_abspath, svn_wc_notify_hydrating_start,
+                               scratch_pool);
+      notify_func(notify_baton, notify, scratch_pool);
+    }
+
   SVN_ERR(svn_wc__db_textbase_sync(wc_ctx->db, local_abspath,
                                    allow_hydrate, allow_dehydrate,
                                    textbase_fetch_cb, &baton,
                                    cancel_func, cancel_baton,
                                    scratch_pool));
 
+  if (notify_func && allow_hydrate)
+    {
+      svn_wc_notify_t *notify
+        = svn_wc_create_notify(local_abspath, svn_wc_notify_hydrating_end,
+                               scratch_pool);
+      notify_func(notify_baton, notify, scratch_pool);
+    }
+
   return SVN_NO_ERROR;
 }