You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2012/06/28 14:17:07 UTC

svn commit: r1354973 - in /subversion/trunk/subversion/libsvn_wc: conflicts.c conflicts.h props.c

Author: rhuijben
Date: Thu Jun 28 12:17:06 2012
New Revision: 1354973

URL: http://svn.apache.org/viewvc?rev=1354973&view=rev
Log:
Prepare the prototype-only definitions of the libsvn_wc conflict apr for
an implementation following the notes/wc-ng/conflict-storage-2.0 plan.

This includes renaming a few currently used functions to a temporary name
before switching them to the new api pattern.

This patch contains no functional changes, but includes some documentation
on future plans.

* subversion/libsvn_wc/conflicts.c
  (svn_wc__conflict_skel_new): Rename to ...
  (svn_wc__prop_conflict_skel_new): ... this.
  (svn_wc__conflict_skel_add_prop_conflict): Rename ...
  (svn_wc__prop_conflict_skel_add): ... this.

* subversion/libsvn_wc/conflicts.h
  (svn_wc__conflict_skel_new,
   svn_wc__conflict_skel_is_complete,
   svn_wc__conflict_skel_set_op_update,
   svn_wc__conflict_skel_set_op_switch,
   svn_wc__conflict_skel_set_op_merge,
   svn_wc__conflict_skel_add_text_conflict,
   svn_wc__conflict_skel_add_prop_conflict,
   svn_wc__conflict_skel_add_tree_conflict): Update prototypes for new storage
      plans. There are currently no implementations for these functions.
      (Intended to be added soon).

  (svn_wc__conflict_read_prop_conflict,
   svn_wc__conflict_create_property_marker_skel): New prototypes for to be
     added functions that should replace svn_wc__prop_conflict_*() later
     today.

  (svn_wc__prop_conflict_skel_new,
   svn_wc__prop_conflict_skel_add): New functions based on the old
     svn_wc__conflict_skel_new and svn_wc__conflict_skel_add_prop_conflict.

* subversion/libsvn_wc/props.c
  (svn_wc__merge_props): Update caller.

Modified:
    subversion/trunk/subversion/libsvn_wc/conflicts.c
    subversion/trunk/subversion/libsvn_wc/conflicts.h
    subversion/trunk/subversion/libsvn_wc/props.c

Modified: subversion/trunk/subversion/libsvn_wc/conflicts.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/conflicts.c?rev=1354973&r1=1354972&r2=1354973&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/conflicts.c (original)
+++ subversion/trunk/subversion/libsvn_wc/conflicts.c Thu Jun 28 12:17:06 2012
@@ -52,7 +52,7 @@
 #include "svn_private_config.h"
 
 svn_skel_t *
-svn_wc__conflict_skel_new(apr_pool_t *result_pool)
+svn_wc__prop_conflict_skel_new(apr_pool_t *result_pool)
 {
   svn_skel_t *operation = svn_skel__make_empty_list(result_pool);
   svn_skel_t *result = svn_skel__make_empty_list(result_pool);
@@ -82,7 +82,7 @@ prepend_prop_value(const svn_string_t *v
 
 
 svn_error_t *
-svn_wc__conflict_skel_add_prop_conflict(
+svn_wc__prop_conflict_skel_add(
   svn_skel_t *skel,
   const char *prop_name,
   const svn_string_t *original_value,

Modified: subversion/trunk/subversion/libsvn_wc/conflicts.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/conflicts.h?rev=1354973&r1=1354972&r2=1354973&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/conflicts.h (original)
+++ subversion/trunk/subversion/libsvn_wc/conflicts.h Thu Jun 28 12:17:06 2012
@@ -49,24 +49,45 @@ extern "C" {
 #define SVN_WC__CONFLICT_KIND_REJECT "reject"
 #define SVN_WC__CONFLICT_KIND_OBSTRUCTED "obstructed"
 
+/* Return a new conflict skel, allocated in RESULT_POOL.
 
+   Typically creating a conflict starts with calling this function and then
+   collecting details via one or more calls to svn_wc__conflict_skel_add_*().
 
-/* Return a new conflict skel, allocated in RESULT_POOL. */
+   The caller can then (when necessary) add operation details via
+   svn_wc__conflict_skel_set_op_*() and store the resulting conflict together
+   with the result of its operation in the working copy database.
+*/
 svn_skel_t *
 svn_wc__conflict_skel_new(apr_pool_t *result_pool);
 
+/* Return a boolean in *COMPLETE indicating whether CONFLICT_SKEL contains
+   everything needed for installing in the working copy database.
+
+   This typically checks if CONFLICT_SKEL contains at least one conflict
+   and an operation.
+
+   Perform temporary allocations in SCRATCH_POOL
+   */
+svn_error_t *
+svn_wc__conflict_skel_is_complete(svn_boolean_t *complete,
+                                  svn_skel_t *conflict_skel,
+                                  apr_pool_t *scratch_pool);
+
 
 /* Set 'update' as the conflicting operation in CONFLICT_SKEL.
    Allocate data stored in the skel in RESULT_POOL.
 
-   BASE_REVISION is the revision the node was at before the update.
-   TARGET_REVISION is the revision being updated to.
+   ORIGINAL specifies the BASE node before updating.
 
-   Do temporary allocations in SCRATCH_POOL. */
+   It is an error to set another operation to a conflict skel that
+   already has an operation.
+
+   Do temporary allocations in SCRATCH_POOL. The new skel data is
+   completely stored in RESULT-POOL. */
 svn_error_t *
 svn_wc__conflict_skel_set_op_update(svn_skel_t *conflict_skel,
-                                    svn_revnum_t base_revision,
-                                    svn_revnum_t target_revision,
+                                    svn_wc_conflict_version_t *original,
                                     apr_pool_t *result_pool,
                                     apr_pool_t *scratch_pool);
 
@@ -74,91 +95,164 @@ svn_wc__conflict_skel_set_op_update(svn_
 /* Set 'switch' as the conflicting operation in CONFLICT_SKEL.
    Allocate data stored in the skel in RESULT_POOL.
 
-   BASE_REVISION is the revision the node was at before the switch.
-   TARGET_REVISION is the revision being switched to.
-   REPOS_RELPATH is the path being switched to, relative to the
-   repository root.
+   ORIGINAL specifies the BASE node before switching.
+
+   It is an error to set another operation to a conflict skel that
+   already has an operation.
 
    Do temporary allocations in SCRATCH_POOL. */
 svn_error_t *
 svn_wc__conflict_skel_set_op_switch(svn_skel_t *conflict_skel,
-                                    svn_revnum_t base_revision,
-                                    svn_revnum_t target_revision,
-                                    const char *repos_relpath,
+                                    svn_wc_conflict_version_t *original,
+                                    apr_pool_t *result_pool,
                                     apr_pool_t *scratch_pool);
 
 
 /* Set 'merge' as conflicting operation in CONFLICT_SKEL.
    Allocate data stored in the skel in RESULT_POOL.
 
-   REPOS_UUID is the UUID of the repository accessed via REPOS_ROOT_URL.
-
-   LEFT_REPOS_RELPATH and RIGHT_REPOS_RELPATH paths to the merge-left
-   and merge-right merge sources, relative to REPOS_URL
+   LEFT and RIGHT paths are the merge-left and merge-right merge
+   sources of the merge.
 
-   LEFT_REVISION is the merge-left revision.
-   RIGHT_REVISION is the merge-right revision.
+   It is an error to set another operation to a conflict skel that
+   already has an operation.
 
    Do temporary allocations in SCRATCH_POOL. */
 svn_error_t *
 svn_wc__conflict_skel_set_op_merge(svn_skel_t *conflict_skel,
-                                   const char *repos_uuid,
-                                   const char *repos_root_url,
-                                   svn_revnum_t left_revision,
-                                   const char *left_repos_relpath,
-                                   svn_revnum_t right_revision,
-                                   const char *right_repos_relpath,
+                                   svn_wc_conflict_version_t *left,
+                                   svn_wc_conflict_version_t *right,
                                    apr_pool_t *result_pool,
                                    apr_pool_t *scratch_pool);
 
 
-/* Set 'patch' as the conflicting operation in CONFLICT_SKEL.
+/* Add a text conflict to CONFLICT_SKEL.
    Allocate data stored in the skel in RESULT_POOL.
 
-   PATCH_SOURCE_LABEL is a string identifying the patch source in
-   some way, for display purposes. It is usually the absolute path
-   to the patch file, or a token such as "<stdin>" if the patch source
-   is not a file.
+   The DB, WRI_ABSPATH pair specifies in which working copy the conflict
+   will be recorded. (Needed for making the paths relative).
+
+   ORIGINAL_ABSPATH, MINE_ABSPATH and THEIR_ABSPATH specify the marker
+   files for this text conflict. Each of these values can be NULL to specify
+   that the node doesn't exist in this case.
+
+   ### It is expected that in a future version we will also want to store
+   ### the sha1 checksum of these files to allow reinstalling the conflict
+   ### markers from the pristine store.
+
+   It is an error to add another text conflict to a conflict skel that
+   already contains a text conflict.
 
    Do temporary allocations in SCRATCH_POOL.
 */
 svn_error_t *
-svn_wc__conflict_skel_set_op_patch(svn_skel_t *conflict_skel,
-                                   const char *patch_source_label,
-                                   apr_pool_t *result_pool,
-                                   apr_pool_t *scratch_pool);
+svn_wc__conflict_skel_add_text_conflict(svn_skel_t *conflict_skel,
+                                        svn_wc__db_t *db,
+                                        const char *wri_abspath,
+                                        const char *original_abspath,
+                                        const char *mine_abspath,
+                                        const char *their_abspath,
+                                        apr_pool_t *result_pool,
+                                        apr_pool_t *scratch_pool);
 
 
-/* Add a text conflict to CONFLICT_SKEL.
+/* Add property conflict details to CONFLICT_SKEL.
    Allocate data stored in the skel in RESULT_POOL.
 
-   All checksums passed should be suitable for retreiving conflicted
-   versions of the file from the pristine store.
+   The DB, WRI_ABSPATH pair specifies in which working copy the conflict
+   will be recorded. (Needed for making the paths relative).
 
-   ORIGINAL_CHECKSUM is the checksum of the BASE version of the conflicted
-   file (without local modifications).
-   MINE_CHECKSUM is the checksum of the WORKING version of the conflicted
-   file as of the time the conflicting operation was run (i.e. including
-   local modifications).
-   INCOMING_CHECKSUM is the checksum of the incoming file causing the
-   conflict. ### is this needed for update? what about merge?
+   The ORIGINAL_PROPS, MINE_PROPS and THEIR_PROPS are hashes mapping a
+   const char * property name to a const svn_string_t* value.
 
-   It is an error (### which one?) if no conflicting operation has been
-   set on CONFLICT_SKEL before calling this function.
-   It is an error (### which one?) if CONFLICT_SKEL already contains
-   a text conflict.
+   The CONFLICTED_PROP_NAMES is a const char * property name value mapping
+   to "", recording which properties aren't resolved yet in the current
+   property values.
+   ### Needed for creating the marker file from this conflict data.
+   ### Would also allow per property marking as resolved.
+   ### Maybe useful for calling (legacy) conflict resolvers that expect one
+   ### property conflict per invocation.
+
+   It is an error to add another text conflict to a conflict skel that
+   already contains a text conflict.
 
    Do temporary allocations in SCRATCH_POOL.
 */
 svn_error_t *
-svn_wc__conflict_skel_add_text_conflict(
-  svn_skel_t *conflict_skel,
-  const svn_checksum_t *original_checksum,
-  const svn_checksum_t *mine_checksum,
-  const svn_checksum_t *incoming_checksum,
-  apr_pool_t *result_pool,
-  apr_pool_t *scratch_pool);
+svn_wc__conflict_skel_add_prop_conflict(svn_skel_t *conflict_skel,
+                                        svn_wc__db_t *db,
+                                        const char *wri_abspath,
+                                        const char *marker_abspath,
+                                        apr_hash_t *original_props,
+                                        apr_hash_t *mine_props,
+                                        apr_hash_t *their_props,
+                                        apr_hash_t *conflicted_prop_names,
+                                        apr_pool_t *result_pool,
+                                        apr_pool_t *scratch_pool);
+
+
+/* Add a tree conflict to CONFLICT_SKEL.
+   Allocate data stored in the skel in RESULT_POOL.
+
+   LOCAL_CHANGE is the local tree change made to the node.
+   INCOMING_CHANGE is the incoming change made to the node.
+
+   It is an error to add another tree conflict to a conflict skel that
+   already contains a tree conflict.
 
+   ### Is it an error to add a tree conflict to any existing conflict?
+
+   Do temporary allocations in SCRATCH_POOL.
+*/
+svn_error_t *
+svn_wc__conflict_skel_add_tree_conflict(svn_skel_t *conflict_skel,
+                                        svn_wc_conflict_reason_t local_change,
+                                        svn_wc_conflict_action_t incoming_change,
+                                        apr_pool_t *result_pool,
+                                        apr_pool_t *scratch_pool);
+
+
+/*
+ * -----------------------------------------------------------
+ * Reading conflict skels. Maybe this can be made private later
+ * -----------------------------------------------------------
+ */
+
+/* Reads back the original data stored by svn_wc__conflict_add_prop_conflict()
+ * in CONFLICT_SKEL for a node in DB, WRI_ABSPATH.
+ *
+ * Values as documented for svn_wc__conflict_add_prop_conflict().
+ *
+ * Output arguments can be NULL if the value is not necessary
+ * Allocate the result in RESULT_POOL. Perform temporary allocations in
+ * SCRATCH_POOL.
+ */
+svn_error_t *
+svn_wc__conflict_read_prop_conflict(const char **marker_abspath,
+                                    apr_hash_t **original_props,
+                                    apr_hash_t **mine_props,
+                                    apr_hash_t **their_props,
+                                    apr_hash_t **conflicted_prop_names,
+                                    svn_wc__db_t *db,
+                                    const char *wri_abspath,
+                                    svn_skel_t *conflict_skel,
+                                    apr_pool_t *result_pool,
+                                    apr_pool_t *scratch_pool);
+
+/* (Temporary) helper to create the (intermediate) data necessary for the
+   property marker workqueue data from the conflict skel */
+svn_error_t *
+svn_wc__conflict_create_property_marker_skel(svn_skel_t **marker_skel,
+                                             svn_skel_t *conflict_skel,
+                                             apr_pool_t *result_pool,
+                                             apr_pool_t *scratch_pool);
+
+/* -----------------------------------------
+ * Intermediate property conflict skel store
+ */
+/* Return a new prop_conflict skel, allocated in RESULT_POOL. */
+svn_skel_t *
+svn_wc__prop_conflict_skel_new(apr_pool_t *result_pool);
 
 /* Add a property conflict to SKEL.
 
@@ -182,7 +276,7 @@ svn_wc__conflict_skel_add_text_conflict(
    temporary allocations in SCRATCH_POOL.
 */
 svn_error_t *
-svn_wc__conflict_skel_add_prop_conflict(
+svn_wc__prop_conflict_skel_add(
   svn_skel_t *skel,
   const char *prop_name,
   const svn_string_t *original_value,
@@ -193,89 +287,20 @@ svn_wc__conflict_skel_add_prop_conflict(
   apr_pool_t *scratch_pool);
 
 
-/* Add a tree conflict to CONFLICT_SKEL.
-   Allocate data stored in the skel in RESULT_POOL.
-
-   LOCAL_CHANGE is the local tree change made to the node.
-   ORIGINAL_LOCAL_KIND is the kind of the local node in BASE.
-   If ORIGINAL_LOCAL_KIND is svn_node_file, ORIGINAL_CHECKSUM is the checksum
-   for the BASE of the file, for retrieval from the pristine store.
-
-   MINE_LOCAL_KIND is the kind of the local node in WORKING at the
-   time the conflict was flagged.
-   If MINE_LOCAL_KIND is svn_node_file, ORIGINAL_CHECKSUM is the checksum
-   of the WORKING version of the file at the time the conflict was flagged,
-   for retrieval from the pristine store.
-
-   INCOMING_KIND is the kind of the incoming node.
-   If INCOMING_KIND is svn_node_file, INCOMING_CHECKSUM is the checksum
-   of the INCOMING version of the file, for retrieval from the pristine store.
-
-   It is an error (### which one?) if no conflicting operation has been
-   set on CONFLICT_SKEL before calling this function.
-   It is an error (### which one?) if CONFLICT_SKEL already contains
-   a tree conflict.
-
-   Do temporary allocations in SCRATCH_POOL.
-*/
-svn_error_t *
-svn_wc__conflict_skel_add_tree_conflict(
-  svn_skel_t *skel,
-  svn_wc_conflict_reason_t local_change,
-  svn_kind_t original_local_kind,
-  const svn_checksum_t *original_checksum,
-  svn_kind_t mine_local_kind,
-  const svn_checksum_t *mine_checksum,
-  svn_wc_conflict_action_t incoming_change,
-  svn_kind_t incoming_kind,
-  const svn_checksum_t *incoming_checksum,
-  apr_pool_t *result_pool,
-  apr_pool_t *scratch_pool);
-
-
-/* Add a reject conflict to CONFLICT_SKEL.
-   Allocate data stored in the skel in RESULT_POOL.
-
-   HUNK_ORIGINAL_OFFSET, HUNK_ORIGINAL_LENGTH, HUNK_MODIFIED_OFFSET,
-   and HUNK_MODIFIED_LENGTH is hunk-header data identifying the hunk
-   which was rejected.
+/* Call the interactive conflict resolver RESOLVER_FUNC with RESOLVER_BATON to
+   allow resolving the conflicts on LOCAL_ABSPATH.
 
-   REJECT_DIFF_CHECKSUM is the checksum of the text of the rejected
-   diff, for retrieval from the pristine store.
-
-   It is an error (### which one?) if no conflicting operation has been
-   set on CONFLICT_SKEL before calling this function.
-   It is an error (### which one?) if CONFLICT_SKEL already contains
-   a reject conflict for the hunk.
-
-   Do temporary allocations in SCRATCH_POOL.
-*/
-svn_error_t *
-svn_wc__conflict_skel_add_reject_conflict(
-  svn_skel_t *conflict_skel,
-  svn_linenum_t hunk_original_offset,
-  svn_linenum_t hunk_original_length,
-  svn_linenum_t hunk_modified_offset,
-  svn_linenum_t hunk_modified_length,
-  const svn_checksum_t *reject_diff_checksum,
-  apr_pool_t *result_pool,
-  apr_pool_t *scratch_pool);
-
-
-/* Add an obstruction conflict to CONFLICT_SKEL.
-   Allocate data stored in the skel in RESULT_POOL.
-
-   It is an error (### which one?) if no conflicting operation has been
-   set on CONFLICT_SKEL before calling this function.
-   It is an error (### which one?) if CONFLICT_SKEL already contains
-   an obstruction.
-
-   Do temporary allocations in SCRATCH_POOL.
-*/
+   CONFLICT_SKEL contains the details of the conflicts on LOCAL_ABSPATH.
+   Resolver actions are directly applied to the in-db state of LOCAL_ABSPATH,
+   so the conflict and the state in CONFLICT_SKEL must already be installed in
+   wc.db. */
 svn_error_t *
-svn_wc__conflict_skel_add_obstruction(svn_skel_t *conflict_skel,
-                                      apr_pool_t *result_pool,
-                                      apr_pool_t *scratch_pool);
+svn_wc__conflict_invoke_resolver(svn_wc__db_t *db,
+                                 const char *local_abspath,
+                                 svn_skel_t *conflict_skel,
+                                 svn_wc_conflict_resolver_func2_t *resolver_func,
+                                 void *resolver_baton,
+                                 apr_pool_t *scratch_pool);
 
 
 /* Resolve text conflicts on the given node.  */

Modified: subversion/trunk/subversion/libsvn_wc/props.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/props.c?rev=1354973&r1=1354972&r2=1354973&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/props.c (original)
+++ subversion/trunk/subversion/libsvn_wc/props.c Thu Jun 28 12:17:06 2012
@@ -1659,16 +1659,16 @@ svn_wc__merge_props(svn_skel_t **work_it
             continue;   /* skip to next incoming change */
 
           if (conflict_skel == NULL)
-            conflict_skel = svn_wc__conflict_skel_new(result_pool);
+            conflict_skel = svn_wc__prop_conflict_skel_new(result_pool);
 
-          SVN_ERR(svn_wc__conflict_skel_add_prop_conflict(conflict_skel,
-                                                          propname,
-                                                          base_val,
-                                                          mine_val,
-                                                          to_val,
-                                                          from_val,
-                                                          result_pool,
-                                                          iterpool));
+          SVN_ERR(svn_wc__prop_conflict_skel_add(conflict_skel,
+                                                 propname,
+                                                 base_val,
+                                                 mine_val,
+                                                 to_val,
+                                                 from_val,
+                                                 result_pool,
+                                                 iterpool));
         }
 
     }  /* foreach propchange ... */



Re: svn commit: r1354973 - in /subversion/trunk/subversion/libsvn_wc: conflicts.c conflicts.h props.c

Posted by Greg Stein <gs...@gmail.com>.
On Thu, Jun 28, 2012 at 12:57 PM, Greg Stein <gs...@gmail.com> wrote:
>...
>> +                                        svn_wc__db_t *db,
>> +                                        const char *wri_abspath,
>> +                                        const char *marker_abspath,
>> +                                        apr_hash_t *original_props,
>> +                                        apr_hash_t *mine_props,
>> +                                        apr_hash_t *their_props,
>> +                                        apr_hash_t *conflicted_prop_names,
>> +                                        apr_pool_t *result_pool,
>> +                                        apr_pool_t *scratch_pool);
>
> As I mentioned in conflict-storage-2.0, there are four sets of
> properties. Do we just never generating the incoming-base properties?

Answering myself: yes, we already have the four property values. This
API and the storage should account for that.

(and should CONFLICTED_PROP_NAMES be an array of char* rather than a hash?)

Cheers,
-g

Re: svn commit: r1354973 - in /subversion/trunk/subversion/libsvn_wc: conflicts.c conflicts.h props.c

Posted by Greg Stein <gs...@gmail.com>.
On Thu, Jun 28, 2012 at 8:17 AM,  <rh...@apache.org> wrote:
>...
> +++ subversion/trunk/subversion/libsvn_wc/conflicts.h Thu Jun 28 12:17:06 2012
>...
> +/* Return a boolean in *COMPLETE indicating whether CONFLICT_SKEL contains
> +   everything needed for installing in the working copy database.
> +
> +   This typically checks if CONFLICT_SKEL contains at least one conflict
> +   and an operation.
> +
> +   Perform temporary allocations in SCRATCH_POOL
> +   */
> +svn_error_t *
> +svn_wc__conflict_skel_is_complete(svn_boolean_t *complete,
> +                                  svn_skel_t *conflict_skel,
> +                                  apr_pool_t *scratch_pool);

const

Is that pool *really* necessary? I'm going to say "no", so drop it and
since this is a private API, we can easily add it if/when necessary.

> +
>
>  /* Set 'update' as the conflicting operation in CONFLICT_SKEL.
>    Allocate data stored in the skel in RESULT_POOL.
>
> -   BASE_REVISION is the revision the node was at before the update.
> -   TARGET_REVISION is the revision being updated to.
> +   ORIGINAL specifies the BASE node before updating.
>
> -   Do temporary allocations in SCRATCH_POOL. */
> +   It is an error to set another operation to a conflict skel that
> +   already has an operation.
> +
> +   Do temporary allocations in SCRATCH_POOL. The new skel data is
> +   completely stored in RESULT-POOL. */
>  svn_error_t *
>  svn_wc__conflict_skel_set_op_update(svn_skel_t *conflict_skel,
> -                                    svn_revnum_t base_revision,
> -                                    svn_revnum_t target_revision,
> +                                    svn_wc_conflict_version_t *original,
>                                     apr_pool_t *result_pool,
>                                     apr_pool_t *scratch_pool);

const

Sense a pattern, yet? :-P

>
> @@ -74,91 +95,164 @@ svn_wc__conflict_skel_set_op_update(svn_
>  /* Set 'switch' as the conflicting operation in CONFLICT_SKEL.
>    Allocate data stored in the skel in RESULT_POOL.
>
> -   BASE_REVISION is the revision the node was at before the switch.
> -   TARGET_REVISION is the revision being switched to.
> -   REPOS_RELPATH is the path being switched to, relative to the
> -   repository root.
> +   ORIGINAL specifies the BASE node before switching.
> +
> +   It is an error to set another operation to a conflict skel that
> +   already has an operation.
>
>    Do temporary allocations in SCRATCH_POOL. */
>  svn_error_t *
>  svn_wc__conflict_skel_set_op_switch(svn_skel_t *conflict_skel,
> -                                    svn_revnum_t base_revision,
> -                                    svn_revnum_t target_revision,
> -                                    const char *repos_relpath,
> +                                    svn_wc_conflict_version_t *original,
> +                                    apr_pool_t *result_pool,
>                                     apr_pool_t *scratch_pool);

const

>
>
>  /* Set 'merge' as conflicting operation in CONFLICT_SKEL.
>    Allocate data stored in the skel in RESULT_POOL.
>
> -   REPOS_UUID is the UUID of the repository accessed via REPOS_ROOT_URL.
> -
> -   LEFT_REPOS_RELPATH and RIGHT_REPOS_RELPATH paths to the merge-left
> -   and merge-right merge sources, relative to REPOS_URL
> +   LEFT and RIGHT paths are the merge-left and merge-right merge
> +   sources of the merge.
>
> -   LEFT_REVISION is the merge-left revision.
> -   RIGHT_REVISION is the merge-right revision.
> +   It is an error to set another operation to a conflict skel that
> +   already has an operation.
>
>    Do temporary allocations in SCRATCH_POOL. */
>  svn_error_t *
>  svn_wc__conflict_skel_set_op_merge(svn_skel_t *conflict_skel,
> -                                   const char *repos_uuid,
> -                                   const char *repos_root_url,
> -                                   svn_revnum_t left_revision,
> -                                   const char *left_repos_relpath,
> -                                   svn_revnum_t right_revision,
> -                                   const char *right_repos_relpath,
> +                                   svn_wc_conflict_version_t *left,
> +                                   svn_wc_conflict_version_t *right,
>                                    apr_pool_t *result_pool,
>                                    apr_pool_t *scratch_pool);

double-const! :-)

>...
> +   It is an error to add another text conflict to a conflict skel that
> +   already contains a text conflict.
>
>    Do temporary allocations in SCRATCH_POOL.
>  */
>  svn_error_t *
> -svn_wc__conflict_skel_add_text_conflict(
> -  svn_skel_t *conflict_skel,
> -  const svn_checksum_t *original_checksum,
> -  const svn_checksum_t *mine_checksum,
> -  const svn_checksum_t *incoming_checksum,
> -  apr_pool_t *result_pool,
> -  apr_pool_t *scratch_pool);
> +svn_wc__conflict_skel_add_prop_conflict(svn_skel_t *conflict_skel,

What's that part in the docstring about adding a text conflict? This
is adding a prop conflict.

> +                                        svn_wc__db_t *db,
> +                                        const char *wri_abspath,
> +                                        const char *marker_abspath,
> +                                        apr_hash_t *original_props,
> +                                        apr_hash_t *mine_props,
> +                                        apr_hash_t *their_props,
> +                                        apr_hash_t *conflicted_prop_names,
> +                                        apr_pool_t *result_pool,
> +                                        apr_pool_t *scratch_pool);

As I mentioned in conflict-storage-2.0, there are four sets of
properties. Do we just never generating the incoming-base properties?

>...
> + * Output arguments can be NULL if the value is not necessary
> + * Allocate the result in RESULT_POOL. Perform temporary allocations in
> + * SCRATCH_POOL.
> + */
> +svn_error_t *
> +svn_wc__conflict_read_prop_conflict(const char **marker_abspath,
> +                                    apr_hash_t **original_props,
> +                                    apr_hash_t **mine_props,
> +                                    apr_hash_t **their_props,
> +                                    apr_hash_t **conflicted_prop_names,
> +                                    svn_wc__db_t *db,
> +                                    const char *wri_abspath,
> +                                    svn_skel_t *conflict_skel,
> +                                    apr_pool_t *result_pool,
> +                                    apr_pool_t *scratch_pool);

const on CONFLICT_SKEL.

> +
> +/* (Temporary) helper to create the (intermediate) data necessary for the
> +   property marker workqueue data from the conflict skel */
> +svn_error_t *
> +svn_wc__conflict_create_property_marker_skel(svn_skel_t **marker_skel,
> +                                             svn_skel_t *conflict_skel,
> +                                             apr_pool_t *result_pool,
> +                                             apr_pool_t *scratch_pool);

const

>...
> +svn_wc__conflict_invoke_resolver(svn_wc__db_t *db,
> +                                 const char *local_abspath,
> +                                 svn_skel_t *conflict_skel,
> +                                 svn_wc_conflict_resolver_func2_t *resolver_func,
> +                                 void *resolver_baton,
> +                                 apr_pool_t *scratch_pool);

const

>...

Cheers,
-g