Oooh. Tricky. Good one.
On Tue, Feb 2, 2010 at 13:56, <phi...@apache.org> wrote: > Author: philip > Date: Tue Feb 2 18:56:18 2010 > New Revision: 905744 > > URL: http://svn.apache.org/viewvc?rev=905744&view=rev > Log: > Remove an SVN_ERR_ASSERT that can be triggered. Not all commits trigger > this, it appears to need a sibling (possibly a non-deleted directory) of > the deleted item and it depends on the order in which the committed items > get processed. copy_tests.py 8 still fails but it gets a bit further. > > * subversion/libsvn_wc/wc_db.c > (svn_wc__db_scan_deletion): Remove assert, return work_del_abspath. > > * subversion/tests/libsvn_wc/db-test.c > (test_scan_deletion): Add example. > (test_children): Adjust number of children. > > Modified: > subversion/trunk/subversion/libsvn_wc/wc_db.c > subversion/trunk/subversion/tests/libsvn_wc/db-test.c > > Modified: subversion/trunk/subversion/libsvn_wc/wc_db.c > URL: > http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db.c?rev=905744&r1=905743&r2=905744&view=diff > ============================================================================== > --- subversion/trunk/subversion/libsvn_wc/wc_db.c (original) > +++ subversion/trunk/subversion/libsvn_wc/wc_db.c Tue Feb 2 18:56:18 2010 > @@ -4569,9 +4569,14 @@ > /* No row means no WORKING node at this path, which means we just > fell off the top of the WORKING tree. > > - The child cannot be not-present, as that would imply the > - root of the (added) WORKING subtree was deleted. */ > - SVN_ERR_ASSERT(child_presence != svn_wc__db_status_not_present); > + If the child was not-present this implies the root of the > + (added) WORKING subtree was deleted. This can occur > + during post-commit processing when the added parent that > + was in the WORKING tree has been moved to the BASE tree. */ > + if(work_del_abspath != NULL > + && child_presence == svn_wc__db_status_not_present > + && *work_del_abspath == NULL) > + *work_del_abspath = apr_pstrdup(result_pool, child_abspath); > > /* If the child did not have a BASE node associated with it, then > we're looking at a deletion that occurred within an added tree. > > Modified: subversion/trunk/subversion/tests/libsvn_wc/db-test.c > URL: > http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/libsvn_wc/db-test.c?rev=905744&r1=905743&r2=905744&view=diff > ============================================================================== > --- subversion/trunk/subversion/tests/libsvn_wc/db-test.c (original) > +++ subversion/trunk/subversion/tests/libsvn_wc/db-test.c Tue Feb 2 18:56:18 > 2010 > @@ -302,6 +302,17 @@ > "insert into actual_node values (" > " 1, 'I', '', null, null, null, null, null, 'changelist', null, " > "'" I_TC_DATA "');" > + " " > + "insert into base_node values (" > + " 1, 'M', null, null, '', 'normal', 'dir', " > + " 1, null, null, " > + " 1, " TIME_1s ", '" AUTHOR_1 "', null, null, null, '()', null, null, " > + " null); " > + "insert into working_node values (" > + " 1, 'M/M-a', 'M', 'not-present', 'file', " > + " null, null, " > + " null, null, null, null, null, " > + " null, null, null, 0, null, null, '()', 0); " > ), > > WC_METADATA_SQL_13, > @@ -772,7 +783,7 @@ > SVN_ERR(svn_wc__db_base_get_children(&children, > db, local_abspath, > pool, pool)); > - SVN_TEST_ASSERT(children->nelts == 11); > + SVN_TEST_ASSERT(children->nelts == 12); > for (i = children->nelts; i--; ) > { > const char *name = APR_ARRAY_IDX(children, i, const char *); > @@ -784,7 +795,7 @@ > SVN_ERR(svn_wc__db_read_children(&children, > db, local_abspath, > pool, pool)); > - SVN_TEST_ASSERT(children->nelts == 12); > + SVN_TEST_ASSERT(children->nelts == 13); > for (i = children->nelts; i--; ) > { > const char *name = APR_ARRAY_IDX(children, i, const char *); > @@ -1223,6 +1234,20 @@ > SVN_TEST_ASSERT(validate_abspath(local_abspath, "L/L-a", > work_del_abspath, pool)); > > + /* Root of delete, parent converted to BASE during post-commit. */ > + SVN_ERR(svn_wc__db_scan_deletion( > + &base_del_abspath, > + &base_replaced, > + &moved_to_abspath, > + &work_del_abspath, > + db, svn_dirent_join(local_abspath, "M/M-a", pool), > + pool, pool)); > + SVN_TEST_ASSERT(base_del_abspath == NULL); > + SVN_TEST_ASSERT(!base_replaced); > + SVN_TEST_ASSERT(moved_to_abspath == NULL); > + SVN_TEST_ASSERT(validate_abspath(local_abspath, "M/M-a", > + work_del_abspath, pool)); > + > return SVN_NO_ERROR; > } > > > >