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