Oooh. Tricky. Good one.
On Tue, Feb 2, 2010 at 13:56, <philip_at_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;
> }
>
>
>
>
Received on 2010-02-02 20:11:33 CET