You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Daniel Shahaf <da...@elego.de> on 2011/03/26 06:41:10 UTC

[PATCH] #3840: Re: Error with tree conflict data in database after update from 1.6

I've added my thoughts to the issue [1]; essentially, I've observed that
svn 1.6 stores tree_conflict_data="(foo bar)" where 1.7 stores
tree_conflict_data="foo bar", and this patch makes 'svn upgrade'
adjust accordingly.

I haven't tested upgrading from interim 1.7-dev formats, and I don't
recall offhand at which point we made the transition to lose the extra
level of ().

Reviews welcome, otherwise I'll commit it in a few days.

[[[
Fix issue #3840, "empty conflict description in db after update from 1.6".

* subversion/libsvn_wc/entries.c
  (write_entry): Strip one level of skel-wrapping () from TREE_CONFLICT_DATA
    when upgrading entries.
]]]

[[[
Index: subversion/libsvn_wc/entries.c
===================================================================
--- subversion/libsvn_wc/entries.c	(revision 1085641)
+++ subversion/libsvn_wc/entries.c	(working copy)
@@ -1824,8 +1824,20 @@ write_entry(struct write_baton **entry_node,
 
   if (entry->tree_conflict_data)
     {
+      /* Issue #3840: 1.6 uses one pair of () more than we do, so
+         strip it.  Thus, "()" becomes NULL and "((skel1) (skel2))"
+         becomes "(skel1) (skel2)". */
+      svn_skel_t *skel;
+
       actual_node = MAYBE_ALLOC(actual_node, scratch_pool);
-      actual_node->tree_conflict_data = entry->tree_conflict_data;
+      skel = svn_skel__parse(entry->tree_conflict_data,
+                             strlen(entry->tree_conflict_data),
+                             scratch_pool);
+      if (skel->children)
+        actual_node->tree_conflict_data = svn_skel__unparse(skel->children,
+                                                            result_pool)->data;
+      else
+        actual_node->tree_conflict_data = NULL;
     }
 
   if (entry->file_external_path != NULL)
]]]

[1] http://subversion.tigris.org/issues/show_bug.cgi?id=3840

Alan Wood wrote on Mon, Mar 21, 2011 at 23:52:20 +1300:
> 
> On 21 Mar 2011 at 10:48, Stefan Sperling wrote:
> 
> > On Mon, Mar 21, 2011 at 12:33:34PM +1300, Alan Wood wrote:
> > >  There should not have been any conflict data of any sort in this 
> > > working copy as I am the only developer and I have only every had 
> > > one working copy.
> > 
> > That's not a valid assumption.
> > It is possible to inflict tree conflicts upon yourself, with only
> > one working copy: http://subversion.apache.org/faq.html#self-tree-conflict
> 
> Thanks for the link. I had read this a while ago, but forgotton all about it.
> 
> > > I hope someone may be able to plug this little hole in the upgrade 
> > > system.
> > 
> > Looks like the upgrade code shouldn't insert empty conflict description
> > skels into the DB. Can you file an issue that points to this mailing list
> > thread, so that this doesn't fall through the cracks? Thanks.
> 
> Filed issue# 3840
> http://subversion.tigris.org/issues/show_bug.cgi?id=3840
> 
> Sorry for the confusion with the version labels.
> 
> > 
> > And thanks for testing!
> No trouble, would like to have more time for it.
> 
> Alan
> 
> 
> 
> Alan Wood
> 
> Napier
> New Zealand
> Phone +64 6 835 4505
>