Author: svn-role Date: Sat Feb 10 04:00:06 2018 New Revision: 1823728 URL: http://svn.apache.org/viewvc?rev=1823728&view=rev Log: Merge the 1.10.x-issue4686 branch:
* r1823202,r1823203 Fix issue #4686 "Unable to parse reversed revision range '19634-19631'" Justification: Assertion failure during certain merges. Branch: ^/subversion/branches/1.10.x-issue4686 Votes: +1: julianfoad, rhuijben, philip Modified: subversion/branches/1.10.x/ (props changed) subversion/branches/1.10.x/STATUS subversion/branches/1.10.x/subversion/libsvn_subr/mergeinfo.c subversion/branches/1.10.x/subversion/tests/libsvn_subr/mergeinfo-test.c Propchange: subversion/branches/1.10.x/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Sat Feb 10 04:00:06 2018 @@ -1,4 +1,5 @@ /subversion/branches/1.10-cache-improvements:1669168-1694487 +/subversion/branches/1.10.x-issue4686:1823212-1823727 /subversion/branches/1.5.x-r30215:870312 /subversion/branches/1.7.x-fs-verify:1146708,1161180 /subversion/branches/1.9-cache-improvements:1678948-1679863 @@ -99,4 +100,4 @@ /subversion/branches/verify-at-commit:1462039-1462408 /subversion/branches/verify-keep-going:1439280-1546110 /subversion/branches/wc-collate-path:1402685-1480384 -/subversion/trunk:1817837,1817856,1818577-1818578,1818584,1818651,1818662,1818727,1818801,1818803,1818807,1818868,1818871,1819036-1819037,1819043,1819049,1819052,1819093,1819146,1819162,1819444,1819556-1819557,1819603,1819804,1819911,1820046-1820047,1820518,1820718,1821183,1821224,1821621,1821678,1822401 +/subversion/trunk:1817837,1817856,1818577-1818578,1818584,1818651,1818662,1818727,1818801,1818803,1818807,1818868,1818871,1819036-1819037,1819043,1819049,1819052,1819093,1819146,1819162,1819444,1819556-1819557,1819603,1819804,1819911,1820046-1820047,1820518,1820718,1821183,1821224,1821621,1821678,1822401,1823202-1823203 Modified: subversion/branches/1.10.x/STATUS URL: http://svn.apache.org/viewvc/subversion/branches/1.10.x/STATUS?rev=1823728&r1=1823727&r2=1823728&view=diff ============================================================================== --- subversion/branches/1.10.x/STATUS (original) +++ subversion/branches/1.10.x/STATUS Sat Feb 10 04:00:06 2018 @@ -57,11 +57,3 @@ Veto-blocked changes: Approved changes: ================= - - * r1823202,r1823203 - Fix issue #4686 "Unable to parse reversed revision range '19634-19631'" - Justification: - Assertion failure during certain merges. - Branch: ^/subversion/branches/1.10.x-issue4686 - Votes: - +1: julianfoad, rhuijben, philip Modified: subversion/branches/1.10.x/subversion/libsvn_subr/mergeinfo.c URL: http://svn.apache.org/viewvc/subversion/branches/1.10.x/subversion/libsvn_subr/mergeinfo.c?rev=1823728&r1=1823727&r2=1823728&view=diff ============================================================================== --- subversion/branches/1.10.x/subversion/libsvn_subr/mergeinfo.c (original) +++ subversion/branches/1.10.x/subversion/libsvn_subr/mergeinfo.c Sat Feb 10 04:00:06 2018 @@ -891,7 +891,7 @@ adjust_remaining_ranges(svn_rangelist_t new_modified_range->end = modified_range->end; new_modified_range->inheritable = FALSE; modified_range->end = next_range->start; - (*range_index)+=2; + (*range_index) += 2 + elements_to_delete; svn_sort__array_insert(rangelist, &new_modified_range, *range_index); /* Recurse with the new range. */ Modified: subversion/branches/1.10.x/subversion/tests/libsvn_subr/mergeinfo-test.c URL: http://svn.apache.org/viewvc/subversion/branches/1.10.x/subversion/tests/libsvn_subr/mergeinfo-test.c?rev=1823728&r1=1823727&r2=1823728&view=diff ============================================================================== --- subversion/branches/1.10.x/subversion/tests/libsvn_subr/mergeinfo-test.c (original) +++ subversion/branches/1.10.x/subversion/tests/libsvn_subr/mergeinfo-test.c Sat Feb 10 04:00:06 2018 @@ -1673,100 +1673,27 @@ test_remove_prefix_from_catalog(apr_pool static svn_error_t * test_rangelist_merge_overlap(apr_pool_t *pool) { - svn_rangelist_t * changes; - /* 15014-19472,19473-19612*,19613-19614,19615-19630*,19631-19634,19635-20055* */ - svn_rangelist_t * rangelist = apr_array_make(pool, 1, sizeof(svn_merge_range_t *)); - svn_merge_range_t *mrange = apr_pcalloc(pool, sizeof(*mrange)); - - /* This range is optional for reproducing issue #4686 */ - mrange->start = 15013; - mrange->end = 19472; - mrange->inheritable = TRUE; - APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) = mrange; - - mrange = apr_pcalloc(pool, sizeof(*mrange)); - mrange->start = 19472; - mrange->end = 19612; - mrange->inheritable = FALSE; - APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) = mrange; - - /* This range is optional for reproducing issue #4686 */ - mrange = apr_pcalloc(pool, sizeof(*mrange)); - mrange->start = 19612; - mrange->end = 19614; - mrange->inheritable = TRUE; - APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) = mrange; - - mrange = apr_pcalloc(pool, sizeof(*mrange)); - mrange->start = 19614; - mrange->end = 19630; - mrange->inheritable = FALSE; - APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) = mrange; - - mrange = apr_pcalloc(pool, sizeof(*mrange)); - mrange->start = 19630; - mrange->end = 19634; - mrange->inheritable = TRUE; - APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) = mrange; - - /* This range is optional for reproducing issue #4686 */ - mrange = apr_pcalloc(pool, sizeof(*mrange)); - mrange->start = 19634; - mrange->end = 20055; - mrange->inheritable = FALSE; - APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) = mrange; - - /* 15014-20515* */ - changes = apr_array_make(pool, 1, sizeof(svn_merge_range_t *)); - mrange = apr_pcalloc(pool, sizeof(*mrange)); - mrange->start = 15013; - mrange->end = 20515; - mrange->inheritable = FALSE; - APR_ARRAY_PUSH(changes, svn_merge_range_t *) = mrange; -#if 0 - { - svn_string_t * tmpString; - - svn_rangelist_to_string(&tmpString, rangelist, pool); - printf("rangelist %s\n", tmpString->data); - } - { - svn_string_t * tmpString; - - svn_rangelist_to_string(&tmpString, changes, pool); - printf("changes %s\n", tmpString->data); - } -#endif - + const char *rangelist_str = "19473-19612*,19615-19630*,19631-19634"; + const char *changes_str = "15014-20515*"; + const char *expected_str = "15014-19630*,19631-19634,19635-20515*"; + /* wrong result: "15014-19630*,19634-19631*,19631-19634,19635-20515*" */ + svn_rangelist_t *rangelist, *changes; + svn_string_t *result_string; + + /* prepare the inputs */ + SVN_ERR(svn_rangelist__parse(&rangelist, rangelist_str, pool)); + SVN_ERR(svn_rangelist__parse(&changes, changes_str, pool)); SVN_TEST_ASSERT(svn_rangelist__is_canonical(rangelist)); SVN_TEST_ASSERT(svn_rangelist__is_canonical(changes)); + /* perform the merge */ SVN_ERR(svn_rangelist_merge2(rangelist, changes, pool, pool)); + /* check the output */ SVN_TEST_ASSERT(svn_rangelist__is_canonical(rangelist)); + SVN_ERR(svn_rangelist_to_string(&result_string, rangelist, pool)); + SVN_TEST_STRING_ASSERT(result_string->data, expected_str); -#if 0 - { - svn_string_t * tmpString; - - svn_rangelist_to_string(&tmpString, rangelist, pool); - printf("result %s\n", tmpString->data); - } -#endif - - /* wrong result - result 15014-19472,19473-19612*,19613-19614,19615-19630*,19634-19631*,19631-19634,19635-20515* - */ - - { - svn_string_t * tmp_string; - svn_rangelist_t *range_list; - - svn_rangelist_to_string(&tmp_string, rangelist, pool); - - SVN_ERR(svn_rangelist__parse(&range_list, tmp_string->data, pool)); - } - return SVN_NO_ERROR; } @@ -1900,9 +1827,9 @@ static struct svn_test_descriptor_t test "diff of rangelists"), SVN_TEST_PASS2(test_remove_prefix_from_catalog, "removal of prefix paths from catalog keys"), - SVN_TEST_XFAIL2(test_rangelist_merge_overlap, + SVN_TEST_PASS2(test_rangelist_merge_overlap, "merge of rangelists with overlaps (issue 4686)"), - SVN_TEST_XFAIL2(test_rangelist_loop, + SVN_TEST_PASS2(test_rangelist_loop, "test rangelist edgecases via loop"), SVN_TEST_NULL };