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

Re: Assert IS_VALID_FORWARD_RANGE fails in merge_tests 125

From: Julian Foad <julianfoad_at_btopenworld.com>
Date: Thu, 29 Nov 2012 01:35:51 +0000 (GMT)

Paul Burba wrote: > Julian Foad wrote: >>>>>>>>   SVN_ERR_ASSERT_NO_RETURN(IS_VALID_FORWARD_RANGE(first)); >> >> I debugged this assertion failure and came up with this fix: >> >> [[[ >> Fix issue #4132 "merge of replaced source asserts", fixing merge_tests 125. >> >> * subversion/libsvn_client/merge.c >>   (find_gaps_in_merge_source_history): Fix an off-by-1 bug. Assert that the >>     function's result constitutes a valid non-empty range. >> >> Index: subversion/libsvn_client/merge.c >> =================================================================== >> --- subversion/libsvn_client/merge.c    (revision 1414469) >> +++ subversion/libsvn_client/merge.c    (working copy) >> @@ -4310,7 +4310,7 @@ find_gaps_in_merge_source_history(svn_re >>    /* Get SOURCE as mergeinfo. */ >>    SVN_ERR(svn_client__get_history_as_mergeinfo(&implicit_src_mergeinfo, NULL, >>                                                 primary_src, >> -                                               primary_src->rev, old_rev, >> +                                               primary_src->rev, old_rev + 1, >>                                                 ra_session, >>                                                 ctx, scratch_pool)); >> >> @@ -4384,6 +4384,9 @@ find_gaps_in_merge_source_history(svn_re >>    SVN_ERR_ASSERT(*gap_start == MIN(source->loc1->rev, source->loc2->rev) >>                   || (*gap_start == SVN_INVALID_REVNUM >>                       && *gap_end == SVN_INVALID_REVNUM)); >> +  SVN_ERR_ASSERT(*gap_end > *gap_start >> +                 || (*gap_start == SVN_INVALID_REVNUM >> +                     && *gap_end == SVN_INVALID_REVNUM)); >>    return SVN_NO_ERROR; >>  } >> ]]] >> >> Trouble is, this fix makes merge_tests.py 100 fail. > merge_tests.py 100 demonstrates the problem with what you propose [...] [...] [...] > Anyway, I hope that helps explain what is happening here. Thanks for the detailed walk-through, Paul. What I have found so far (I spent a bit more time on it today) is that the error is *much* earlier than here, right at the start of the merge: normalize_merge_sources_internal() comes up with the result (2,9). Adding some debugging as in the attached 'merge-t-125-1.patch': $ svn merge -r9:2 .../A A_COPY --dry-run ... DBG: merge.c:6566: oldest 2, youngest 9 DBG: merge.c:6592: Location segments: DBG: merge.c:6597:   0: 2-2 'A' DBG: merge.c:6597:   1: 3-6 '(null)' DBG: merge.c:6597:   2: 7-9 'A' DBG: merge.c:6701: Resulting merge_source_ts: DBG: merge.c:6706:   0: 9 '.../repositories/merge_tests-100/A' DBG: merge.c:6707:      2 '.../repositories/merge_tests-100/A' So that's where I'm at. - Julian

Received on 2012-11-29 02:36:28 CET

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