On Sat, Apr 10, 2010 at 18:08,  <s...@apache.org> wrote:
> Author: stsp
> Date: Sat Apr 10 22:08:37 2010
> New Revision: 932796
>
> URL: http://svn.apache.org/viewvc?rev=932796&view=rev
> Log:
> Add sketchy declarations of functions wrting data to the new conflict store.
> Review and comments welcome.

Upon reflection, this approach will cause atomicity problems. The
ideal situation is to add/replace a node with all of its metadata
(including conflict data!) in one atomic transation.

If you look at svn_wc__db_base_add_*(), they have a parameter named
CONFLICT, which can be inserted during the transaction which
adds/replaces the node data itself.

What I would like to suggest is a "conflict builder" set of APIs that
constructs the svn_skel_t. The operation would be something like this:

svn_skel_t *conflict = svn_wc__builder_create(result_pool);

/* conflict == (()), representing (OPERATION) and OPERATION=() */

SVN_ERR(svn_wc__builder_set_update_op(conflict, base_revision,
target_revision, result_pool, scratch_pool));
SVN_ERR(svn_wc__builder_add_text_conflict(conflict, ...));
SVN_ERR(svn_wc__builder_add_prop_conflict(conflict, ...));
...
SVN_ERR(svn_wc__db_base_add_file(..., conflict, ...));


I don't think we need anything fancier than an svn_skel_t for the
representation. The builder_set_*_op would just replace the OPERATION
subskel with the appropriate data. The build_add_* functions would
append new conflict subskels to the main skel. When everything is
ready, the main skel is passed into wc_db fully-formed and ready for
insertion into the database.

Whatcha think?

Cheers,
-g

Reply via email to