[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

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

From: Daniel Shahaf <danielsh_at_elego.de>
Date: Sat, 26 Mar 2011 07:41:10 +0200

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
>
Received on 2011-03-26 05:42:09 CET

This is an archived mail posted to the Subversion Dev mailing list.