Greg,
If you have some time to spare, could you please review this patch?
I don't think we have a lot of svn_wc_entry_t experts that can review this patch at short notice. This to allow getting it in 1.7.1.
Thanks,
Bert
> -----Original Message-----
> From: rhuijben_at_apache.org [mailto:rhuijben_at_apache.org]
> Sent: dinsdag 18 oktober 2011 23:45
> To: commits_at_subversion.apache.org
> Subject: svn commit: r1185886 - in /subversion/trunk/subversion:
> libsvn_wc/entries.c tests/cmdline/upgrade_tests.py
>
> Author: rhuijben
> Date: Tue Oct 18 21:45:09 2011
> New Revision: 1185886
>
> URL: http://svn.apache.org/viewvc?rev=1185886&view=rev
> Log:
> Make it possible to upgrade server-excluded (or 'absent') nodes from their
> entries representation. Before this patch server-excluded directories were
> accidentally upgraded as incomplete directories.
>
> * subversion/libsvn_wc/entries.c
> (insert_node): Make it possible to write server-excluded presence.
> (write_entry): Handle server-excluded like how we handle not-present.
> This
> presence can't be combined with incomplete and there is no subdirectory
> with more data which can fill in details later. Absent nodes can't be
> shadowed.
>
> Assert earlier code already set the right presence instead of setting the
> value again. Copy revision set code from the block that previously handled
> absent nodes.
>
> * subversion/tests/cmdline/upgrade_tests.py
> (upgrade_absent): Remove XFail marking and test that the update doesn't
> perform any changes.
>
> Modified:
> subversion/trunk/subversion/libsvn_wc/entries.c
> subversion/trunk/subversion/tests/cmdline/upgrade_tests.py
>
> Modified: subversion/trunk/subversion/libsvn_wc/entries.c
> URL:
> http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/entri
> es.c?rev=1185886&r1=1185885&r2=1185886&view=diff
> ==========================================================
> ====================
> --- subversion/trunk/subversion/libsvn_wc/entries.c (original)
> +++ subversion/trunk/subversion/libsvn_wc/entries.c Tue Oct 18 21:45:09
> 2011
> @@ -1466,6 +1466,8 @@ insert_node(svn_sqlite__db_t *sdb,
> SVN_ERR(svn_sqlite__bind_text(stmt, 8, "incomplete"));
> else if (node->presence == svn_wc__db_status_excluded)
> SVN_ERR(svn_sqlite__bind_text(stmt, 8, "excluded"));
> + else if (node->presence == svn_wc__db_status_server_excluded)
> + SVN_ERR(svn_sqlite__bind_text(stmt, 8, "absent"));
>
> if (node->kind == svn_node_none)
> SVN_ERR(svn_sqlite__bind_text(stmt, 10, "unknown"));
> @@ -1697,10 +1699,10 @@ write_entry(struct write_baton **entry_n
> SVN_ERR_ASSERT(!entry->incomplete);
> base_node->presence = svn_wc__db_status_not_present;
> }
> -
> - if (entry->absent)
> + else if (entry->absent)
> {
> - SVN_ERR_ASSERT(base_node && !working_node);
> + SVN_ERR_ASSERT(base_node && !working_node &&
> !below_working_node);
> + SVN_ERR_ASSERT(!entry->incomplete);
> base_node->presence = svn_wc__db_status_server_excluded;
> }
>
> @@ -1873,9 +1875,22 @@ write_entry(struct write_baton **entry_n
>
> if (entry->deleted)
> {
> - base_node->presence = svn_wc__db_status_not_present;
> + SVN_ERR_ASSERT(base_node->presence ==
> svn_wc__db_status_not_present);
> + /* ### should be svn_node_unknown, but let's store what we have.
> */
> + base_node->kind = entry->kind;
> + }
> + else if (entry->absent)
> + {
> + SVN_ERR_ASSERT(base_node->presence
> + == svn_wc__db_status_server_excluded);
> /* ### should be svn_node_unknown, but let's store what we have. */
> base_node->kind = entry->kind;
> +
> + /* Store the most likely revision in the node to avoid
> + base nodes without a valid revision. Of course
> + we remember that the data is still incomplete. */
> + if (!SVN_IS_VALID_REVNUM(base_node->revision) && parent_node-
> >base)
> + base_node->revision = parent_node->base->revision;
> }
> else
> {
>
> Modified: subversion/trunk/subversion/tests/cmdline/upgrade_tests.py
> URL:
> http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/
> upgrade_tests.py?rev=1185886&r1=1185885&r2=1185886&view=diff
> ==========================================================
> ====================
> --- subversion/trunk/subversion/tests/cmdline/upgrade_tests.py (original)
> +++ subversion/trunk/subversion/tests/cmdline/upgrade_tests.py Tue Oct
> 18 21:45:09 2011
> @@ -1199,36 +1199,40 @@ def upgrade_file_externals(sbox):
> })
>
> @Skip(svntest.main.is_ra_type_file)
> -_at_XFail()
> def upgrade_absent(sbox):
> - "upgrade absent nodes"
> -
> + "upgrade absent nodes to server-excluded"
> +
> # Install wc and repos
> replace_sbox_with_tarfile(sbox, 'upgrade_absent.tar.bz2')
> replace_sbox_repo_with_tarfile(sbox, 'upgrade_absent_repos.tar.bz2')
> -
> +
> # Update config for authz
> svntest.main.write_restrictive_svnserve_conf(sbox.repo_dir)
> svntest.main.write_authz_file(sbox, { "/" : "*=rw",
> "/A/B" : "*=",
> "/A/B/E" : "jrandom = rw"})
> -
> +
> # Attempt to use the working copy, this should give an error
> expected_stderr = wc_is_too_old_regex
> svntest.actions.run_and_verify_svn(None, None, expected_stderr,
> 'info', sbox.wc_dir)
> +
> # Now upgrade the working copy
> svntest.actions.run_and_verify_svn(None, None, [],
> 'upgrade', sbox.wc_dir)
>
> - #
> + # Relocate to allow finding the repository
> svntest.actions.run_and_verify_svn(None, None, [], 'relocate',
> 'svn://127.0.0.1/authz_tests-2',
> sbox.repo_url, sbox.wc_dir)
>
> - # This currently fails because the absent node is incorrectly upgraded
> - sbox.simple_update()
> -
> + expected_output = svntest.wc.State(sbox.wc_dir, {
> + })
> +
> + # Expect no changes and certainly no errors
> + svntest.actions.run_and_verify_update(sbox.wc_dir, expected_output,
> + None, None)
> +
>
> ##########################################################
> ##############
> # Run the tests
>
>
Received on 2011-10-19 00:09:29 CEST