Diffstat (limited to 'subversion/libsvn_client/client.h')
1 files changed, 36 insertions, 67 deletions
diff --git a/subversion/libsvn_client/client.h b/subversion/libsvn_client/client.h
index c0a794712f3f..97cd1e297c02 100644
@@ -682,34 +682,6 @@ svn_client__get_diff_editor2(const svn_delta_editor_t **editor,
/* ---------------------------------------------------------------- */
-/*** Editor for diff summary ***/
-/* Set *DIFF_PROCESSOR to a diff processor that will report a diff summary
- to SUMMARIZE_FUNC.
- P_ROOT_RELPATH will return a pointer to a string that must be set to
- the root of the operation before the processor is called.
- ORIGINAL_PATH specifies the original path and will be used with
- **ANCHOR_PATH to create paths as the user originally provided them
- to the diff function.
- SUMMARIZE_FUNC is called with SUMMARIZE_BATON as parameter by the
- created callbacks for each changed item.
- const svn_diff_tree_processor_t **diff_processor,
- const char ***p_root_relpath,
- svn_client_diff_summarize_func_t summarize_func,
- void *summarize_baton,
- const char *original_target,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-/* ---------------------------------------------------------------- */
/*** Copy Stuff ***/
/* This structure is used to associate a specific copy or move SRC with a
@@ -754,40 +726,23 @@ typedef struct svn_client__copy_pair_t
/*** Commit Stuff ***/
-/* WARNING: This is all new, untested, un-peer-reviewed conceptual
+/* The "Harvest Committables" System
- The day that 'svn switch' came into existence, our old commit
- crawler (svn_wc_crawl_local_mods) became obsolete. It relied far
- too heavily on the on-disk hierarchy of files and directories, and
- simply had no way to support disjoint working copy trees or nest
- working copies. The primary reason for this is that commit
- process, in order to guarantee atomicity, is a single drive of a
+ The commit process requires, per repository, a single drive of a
commit editor which is based not on working copy paths, but on
- URLs. With the completion of 'svn switch', it became all too
- likely that the on-disk working copy hierarchy would no longer be
- guaranteed to map to a similar in-repository hierarchy.
- Aside from this new brokenness of the old system, an unrelated
- feature request had cropped up -- the ability to know in advance of
- your commit, exactly what would be committed (so that log messages
- could be initially populated with this information). Since the old
- crawler discovered commit candidates while in the process of
- committing, it was impossible to harvest this information upfront.
- As a workaround, svn_wc_statuses() was used to stat the whole
- working copy for changes before the commit started...and then the
- commit would again stat the whole tree for changes.
- Enter the new system.
+ URLs. The on-disk working copy hierarchy does not, in general,
+ map to a similar in-repository hierarchy, due to switched subtrees
+ and disjoint working copies.
+ Also we wish to know exactly what would be committed, in advance of
+ the commit, so that a log message editor can be initially populated
+ with this information.
The primary goal of this system is very straightforward: harvest
all commit candidate information up front, and cache enough info in
the process to use this to drive a URL-sorted commit.
- *** END-OF-KNOWLEDGE ***
- The prototypes below are still in development. In general, the
- idea is that commit-y processes ('svn mkdir URL', 'svn delete URL',
+ The idea is that commit-y processes ('svn mkdir URL', 'svn delete URL',
'svn commit', 'svn copy WC_PATH URL', 'svn copy URL1 URL2', 'svn
move URL1 URL2', others?) generate the cached commit candidate
information, and hand this information off to a consumer which is
@@ -844,7 +799,7 @@ typedef svn_error_t *(*svn_client__check_url_kind_t)(void *baton,
- if the candidate has a lock token, add it to the LOCK_TOKENS hash.
- if the candidate is a directory scheduled for deletion, crawl
- the directories children recursively for any lock tokens and
+ the directory's children recursively for any lock tokens and
add them to the LOCK_TOKENS array.
At the successful return of this function, COMMITTABLES will point
@@ -915,6 +870,18 @@ svn_client__condense_commit_items(const char **base_url,
+/* Rewrite the COMMIT_ITEMS array to be sorted by URL.
+ Rewrite the items' URLs to be relative to BASE_URL.
+ COMMIT_ITEMS is an array of (svn_client_commit_item3_t *) items.
+ Afterwards, some of the items in COMMIT_ITEMS may contain data
+ allocated in POOL. */
+svn_client__condense_commit_items2(const char *base_url,
+ apr_array_header_t *commit_items,
+ apr_pool_t *pool);
/* Commit the items in the COMMIT_ITEMS array using EDITOR/EDIT_BATON
to describe the committed local mods. Prior to this call,
COMMIT_ITEMS should have been run through (and BASE_URL generated
@@ -1129,24 +1096,26 @@ svn_client__resolve_conflicts(svn_boolean_t *conflicts_remain,
-/* Produce a diff with depth DEPTH between two files or two directories at
- * LEFT_ABSPATH1 and RIGHT_ABSPATH, using the provided diff callbacks to
- * show changes in files. The files and directories involved may be part of
- * a working copy or they may be unversioned. For versioned files, show
- * property changes, too.
+/* Produce a diff with depth DEPTH between the file or directory at
+ * LEFT_ABSPATH and the file or directory at RIGHT_ABSPATH, reporting
+ * differences to DIFF_PROCESSOR.
+ * The files and directories involved may be part of a working copy or
+ * they may be unversioned. For versioned files, show property changes,
+ * too.
- * If ANCHOR_ABSPATH is not null, set it to the anchor of the diff before
- * the first processor call. (The anchor is LEFT_ABSPATH or an ancestor of it)
+ * No copy or move information is reported to the diff processor.
+ * Anchor the DIFF_PROCESSOR at the requested diff targets (LEFT_ABSPATH,
+ * RIGHT_ABSPATH). As any children reached by recursion are matched by
+ * name, a diff processor relpath applies equally to both sides of the diff.
-svn_client__arbitrary_nodes_diff(const char **root_relpath,
- svn_boolean_t *root_is_dir,
- const char *left_abspath,
+svn_client__arbitrary_nodes_diff(const char *left_abspath,
const char *right_abspath,
const svn_diff_tree_processor_t *diff_processor,
- apr_pool_t *result_pool,