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

Re: svn commit: r905744 - in /subversion/trunk/subversion: libsvn_wc/wc_db.c tests/libsvn_wc/db-test.c

From: Greg Stein <gstein_at_gmail.com>
Date: Tue, 2 Feb 2010 14:10:57 -0500

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

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