On Jun 19, 2012, at 22:12 , s...@apache.org wrote:

> Author: stsp
> Date: Tue Jun 19 20:12:34 2012
> New Revision: 1351834
> 
> URL: http://svn.apache.org/viewvc?rev=1351834&view=rev
> Log:
> Fix a crash in JavaHL due to my recent changes for delayed invocation of
> the interactive conflict resolution callback.
> 
> Conflict descriptions read back from conflict storage lack some information
> previously passed to the callback during a running update/merge process.
> JavaHL's tigris.org backwards compat code unconditionally dereferenced
> pointers to the left/mine versions contained in conflict descriptions,
> which are no longer provided because of my changes :(
> Let's hope we can fix this properly in the short term by persisting more
> information about conflicts in the conflict store (hi Bert!) and then reading
> it back from there.

I think the problem isn't persisting the information per se, it's whacking all
of the moles^W edge cases.  In the function

  subversion/libsvn_wc/update_editor.c:create_tree_conflict()

there's a conflict for which a version field is NULL: 

[[[
  if (left_repos_relpath == NULL)
    /* A locally added or unversioned path in conflict with an incoming add.
     * Send an 'empty' left revision. */
    src_left_version = NULL;
  else
]]]

This function was written a couple of years ago and hasn't changed much 
since.  If we want a left_revision in all cases, we should revisit it and its 
counterpart in the merge code.  

For reference, here's the original commit of most of the code in 
create_tree_conflict():

  http://svn.apache.org/viewvc?view=revision&revision=911661

and here's the todo-comment mentioned there:

[[[
     /* ###TODO: It would be nice to tell the user at which URL and
       * ### revision source-left was empty, which could be quite difficult
       * ### to code, and is a slight theoretical leap of the svn mind.
       * ### Update should show
       * ###   URL: svn_wc__db_scan_addition( &repos_relpath )
       * ###   REV: The base revision of the parent of before this update
       * ###        started
       * ###        ### BUT what if parent was updated/switched away with
       * ###        ### depth=empty after this node was added?
       * ### Switch should show
       * ###   URL: scan_addition URL of before this switch started
       * ###   REV: same as above */
]]]

See notes/tree-conflicts/all-add-vs-add-tree-conflicts.txt for more details.

Steve
--
Stephen Butler
elego Software Solutions GmbH
http://www.elego.de

Reply via email to