[prev in list] [next in list] [prev in thread] [next in thread]
List: subversion-commits
Subject: svn commit: r1847813 - in /subversion/trunk/subversion: include/private/svn_client_private.h libsvn_
From: julianfoad () apache ! org
Date: 2018-11-30 12:46:25
Message-ID: 20181130124625.949853A1EC3 () svn01-us-west ! apache ! org
[Download RAW message or body]
Author: julianfoad
Date: Fri Nov 30 12:46:25 2018
New Revision: 1847813
URL: http://svn.apache.org/viewvc?rev=1847813&view=rev
Log:
For issue #4786 "Create a WC working-mods editor": combine dir and file
versions of a copy API, in the interest of unifying file and dir operations
as much as possible to simplify callers.
* subversion/include/private/svn_client_private.h
(svn_client__repos_to_wc_copy): New.
(svn_client__repos_to_wc_copy_dir,
svn_client__repos_to_wc_copy_file): Delete.
* subversion/libsvn_client/copy.c
(verify_wc_srcs): Add a simple doc string.
(svn_client__repos_to_wc_copy_dir,
svn_client__repos_to_wc_copy_file): Make static.
(svn_client__repos_to_wc_copy): New.
(repos_to_wc_copy_single): Update callers.
* subversion/libsvn_client/conflicts.c
(merge_incoming_added_dir_replace): Update callers.
* subversion/libsvn_client/wc_editor.c
(dir_add,
file_add): Update callers.
Modified:
subversion/trunk/subversion/include/private/svn_client_private.h
subversion/trunk/subversion/libsvn_client/conflicts.c
subversion/trunk/subversion/libsvn_client/copy.c
subversion/trunk/subversion/libsvn_client/wc_editor.c
Modified: subversion/trunk/subversion/include/private/svn_client_private.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/private/svn_client_private.h?rev=1847813&r1=1847812&r2=1847813&view=diff
==============================================================================
--- subversion/trunk/subversion/include/private/svn_client_private.h (original)
+++ subversion/trunk/subversion/include/private/svn_client_private.h Fri Nov 30 \
12:46:25 2018 @@ -414,7 +414,8 @@ svn_client__get_diff_summarize_callbacks
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
-/* Copy a directory tree from SRC_URL @ SRC_REV, to DST_ABSPATH in a WC.
+/* Copy a directory tree or a file (according to KIND) from SRC_URL @ SRC_REV,
+ * to DST_ABSPATH in a WC.
*
* The caller should be holding a WC write lock that allows DST_ABSPATH to
* be created, such as on the parent of DST_ABSPATH.
@@ -428,38 +429,16 @@ svn_client__get_diff_summarize_callbacks
* URL after returning.
*/
svn_error_t *
-svn_client__repos_to_wc_copy_dir(svn_boolean_t *timestamp_sleep,
- const char *src_url,
- svn_revnum_t src_rev,
- const char *dst_abspath,
- svn_boolean_t ignore_externals,
- svn_boolean_t same_repositories,
- svn_ra_session_t *ra_session,
- svn_client_ctx_t *ctx,
- apr_pool_t *pool);
-
-/* Copy a file from SRC_URL @ SRC_REV, to DST_ABSPATH in a WC.
- *
- * The caller should be holding a WC write lock that allows DST_ABSPATH to
- * be created, such as on the parent of DST_ABSPATH.
- *
- * SAME_REPOSITORIES must be true if and only if the source of this copy
- * is from the same repository at the WC parent of DST_ABSPATH.
- * If SAME_REPOSITORIES, then fill in the 'copy-from' in the WC target.
- * If not SAME_REPOSITORIES, then remove any svn:mergeinfo property.
- *
- * Use RA_SESSION to fetch the data. The session may point to a different
- * URL after returning.
- */
-svn_error_t *
-svn_client__repos_to_wc_copy_file(svn_boolean_t *timestamp_sleep,
- const char *src_url,
- svn_revnum_t src_rev,
- const char *dst_abspath,
- svn_boolean_t same_repositories,
- svn_ra_session_t *ra_session,
- svn_client_ctx_t *ctx,
- apr_pool_t *scratch_pool);
+svn_client__repos_to_wc_copy(svn_boolean_t *timestamp_sleep,
+ svn_node_kind_t kind,
+ const char *src_url,
+ svn_revnum_t src_rev,
+ const char *dst_abspath,
+ svn_boolean_t ignore_externals,
+ svn_boolean_t same_repositories,
+ svn_ra_session_t *ra_session,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool);
/** Return an editor for applying local modifications to a WC.
*
Modified: subversion/trunk/subversion/libsvn_client/conflicts.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/conflicts.c?rev=1847813&r1=1847812&r2=1847813&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/conflicts.c (original)
+++ subversion/trunk/subversion/libsvn_client/conflicts.c Fri Nov 30 12:46:25 2018
@@ -8041,13 +8041,13 @@ merge_incoming_added_dir_replace(svn_cli
if (err)
goto unlock_wc;
- err = svn_client__repos_to_wc_copy_dir(×tamp_sleep,
- url,
- incoming_new_pegrev,
- local_abspath,
- TRUE, /* we want to ignore externals */
- TRUE /*same_repositories*/,
- ra_session, ctx, scratch_pool);
+ err = svn_client__repos_to_wc_copy(×tamp_sleep,
+ svn_node_dir,
+ url, incoming_new_pegrev,
+ local_abspath,
+ TRUE, /* we want to ignore externals */
+ TRUE /*same_repositories*/,
+ ra_session, ctx, scratch_pool);
if (err)
goto unlock_wc;
Modified: subversion/trunk/subversion/libsvn_client/copy.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/copy.c?rev=1847813&r1=1847812&r2=1847813&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/copy.c (original)
+++ subversion/trunk/subversion/libsvn_client/copy.c Fri Nov 30 12:46:25 2018
@@ -1099,6 +1099,9 @@ verify_wc_dsts(const apr_array_header_t
return SVN_NO_ERROR;
}
+/* Verify that the WC sources in COPY_PAIRS exist, and set pair->src_kind
+ for each.
+ */
static svn_error_t *
verify_wc_srcs(const apr_array_header_t *copy_pairs,
svn_client_ctx_t *ctx,
@@ -2350,7 +2353,9 @@ notification_adjust_func(void *baton,
nb->inner_func(nb->inner_baton, inner_notify, pool);
}
-svn_error_t *
+/* Implementation of svn_client__repos_to_wc_copy() for a dir.
+ */
+static svn_error_t *
svn_client__repos_to_wc_copy_dir(svn_boolean_t *timestamp_sleep,
const char *src_url,
svn_revnum_t src_revnum,
@@ -2454,7 +2459,12 @@ svn_client__repos_to_wc_copy_dir(svn_boo
return SVN_NO_ERROR;
}
-svn_error_t *
+/* Implementation of svn_client__repos_to_wc_copy() for a file.
+ *
+ * This has no 'ignore_externals' parameter because we don't support the
+ * 'svn:externals' property being set on a file.
+ */
+static svn_error_t *
svn_client__repos_to_wc_copy_file(svn_boolean_t *timestamp_sleep,
const char *src_url,
svn_revnum_t src_rev,
@@ -2498,6 +2508,40 @@ svn_client__repos_to_wc_copy_file(svn_bo
return SVN_NO_ERROR;
}
+svn_error_t *
+svn_client__repos_to_wc_copy(svn_boolean_t *timestamp_sleep,
+ svn_node_kind_t kind,
+ const char *src_url,
+ svn_revnum_t src_rev,
+ const char *dst_abspath,
+ svn_boolean_t ignore_externals,
+ svn_boolean_t same_repositories,
+ svn_ra_session_t *ra_session,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool)
+{
+ if (kind == svn_node_dir)
+ {
+ SVN_ERR(svn_client__repos_to_wc_copy_dir(timestamp_sleep,
+ src_url, src_rev,
+ dst_abspath,
+ ignore_externals,
+ same_repositories,
+ ra_session,
+ ctx, scratch_pool));
+ }
+ else if (kind == svn_node_file)
+ {
+ SVN_ERR(svn_client__repos_to_wc_copy_file(timestamp_sleep,
+ src_url, src_rev,
+ dst_abspath,
+ same_repositories,
+ ra_session,
+ ctx, scratch_pool));
+ }
+ return SVN_NO_ERROR;
+}
+
/* Peform each individual copy operation for a repos -> wc copy. A
helper for repos_to_wc_copy().
@@ -2537,24 +2581,25 @@ repos_to_wc_copy_single(svn_boolean_t *t
SVN_ERR(ctx->cancel_func(ctx->cancel_baton));
}
+ /* Avoid a chicken-and-egg problem:
+ * If pinning externals we'll need to adjust externals
+ * properties before checking out any externals.
+ * But copy needs to happen before pinning because else there
+ * are no svn:externals properties to pin. */
+ if (pin_externals)
+ ignore_externals = TRUE;
+
+ SVN_ERR(svn_client__repos_to_wc_copy(timestamp_sleep,
+ pair->src_kind,
+ pair->src_abspath_or_url,
+ pair->src_revnum,
+ dst_abspath,
+ ignore_externals,
+ same_repositories,
+ ra_session, ctx, pool));
+
if (pair->src_kind == svn_node_dir)
{
- /* Avoid a chicken-and-egg problem:
- * If pinning externals we'll need to adjust externals
- * properties before checking out any externals.
- * But copy needs to happen before pinning because else there
- * are no svn:externals properties to pin. */
- if (pin_externals)
- ignore_externals = TRUE;
-
- SVN_ERR(svn_client__repos_to_wc_copy_dir(timestamp_sleep,
- pair->src_abspath_or_url,
- pair->src_revnum,
- dst_abspath,
- ignore_externals,
- same_repositories,
- ra_session, ctx, pool));
-
if (same_repositories && pin_externals)
{
apr_hash_t *pinned_externals;
@@ -2609,17 +2654,6 @@ repos_to_wc_copy_single(svn_boolean_t *t
ctx, iterpool));
svn_pool_destroy(iterpool);
}
- } /* end directory case */
-
- else if (pair->src_kind == svn_node_file)
- {
- SVN_ERR(svn_client__repos_to_wc_copy_file(timestamp_sleep,
- pair->src_abspath_or_url,
- pair->src_revnum,
- dst_abspath,
- same_repositories,
- ra_session,
- ctx, pool));
}
if (same_repositories)
Modified: subversion/trunk/subversion/libsvn_client/wc_editor.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/wc_editor.c?rev=1847813&r1=1847812&r2=1847813&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/wc_editor.c (original)
+++ subversion/trunk/subversion/libsvn_client/wc_editor.c Fri Nov 30 12:46:25 2018
@@ -253,14 +253,15 @@ dir_add(const char *path,
db->eb->ra_session, db->local_abspath,
db->eb->ctx, db->pool));
- SVN_ERR(svn_client__repos_to_wc_copy_dir(×tamp_sleep,
- copyfrom_path,
- copyfrom_revision,
- db->local_abspath,
- TRUE /*ignore_externals*/,
- same_repository,
- db->eb->ra_session,
- db->eb->ctx, db->pool));
+ SVN_ERR(svn_client__repos_to_wc_copy(×tamp_sleep,
+ svn_node_dir,
+ copyfrom_path,
+ copyfrom_revision,
+ db->local_abspath,
+ TRUE /*ignore_externals*/,
+ same_repository,
+ db->eb->ra_session,
+ db->eb->ctx, db->pool));
}
*child_baton = db;
@@ -443,13 +444,15 @@ file_add(const char *path,
fb->eb->ra_session, fb->local_abspath,
fb->eb->ctx, fb->pool));
- SVN_ERR(svn_client__repos_to_wc_copy_file(×tamp_sleep,
- copyfrom_path,
- copyfrom_revision,
- fb->local_abspath,
- same_repository,
- fb->eb->ra_session,
- fb->eb->ctx, fb->pool));
+ SVN_ERR(svn_client__repos_to_wc_copy(×tamp_sleep,
+ svn_node_file,
+ copyfrom_path,
+ copyfrom_revision,
+ fb->local_abspath,
+ TRUE /*ignore_externals*/,
+ same_repository,
+ fb->eb->ra_session,
+ fb->eb->ctx, fb->pool));
}
*file_baton = fb;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic