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: [email protected] [mailto:[email protected]]
> Sent: dinsdag 18 oktober 2011 23:45
> To: [email protected]
> 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)
> -@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
> 
> 


Reply via email to