You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2010/07/15 11:57:30 UTC
svn commit: r964357 -
/subversion/trunk/subversion/tests/libsvn_wc/entries-compat.c
Author: rhuijben
Date: Thu Jul 15 09:57:30 2010
New Revision: 964357
URL: http://svn.apache.org/viewvc?rev=964357&view=rev
Log:
* subversion/tests/libsvn_wc/entries-compat.c
(test_access_baton_like_locking):
Extend existing test to specifically show the regression
in wcroot detection currently triggered by update_tests.py 24.
Also avoid assuming that locks stay open after a wc context is closed.
Modified:
subversion/trunk/subversion/tests/libsvn_wc/entries-compat.c
Modified: subversion/trunk/subversion/tests/libsvn_wc/entries-compat.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/libsvn_wc/entries-compat.c?rev=964357&r1=964356&r2=964357&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/libsvn_wc/entries-compat.c (original)
+++ subversion/trunk/subversion/tests/libsvn_wc/entries-compat.c Thu Jul 15 09:57:30 2010
@@ -531,7 +531,7 @@ static svn_error_t *
test_access_baton_like_locking(apr_pool_t *pool)
{
svn_wc__db_t *db;
- svn_wc_context_t *wc_ctx;
+ svn_wc_context_t *wc_ctx, *wc_ctx2;
const char *local_abspath;
const char *D, *D1, *D2, *D3, *D4;
svn_boolean_t locked_here, locked;
@@ -593,14 +593,14 @@ test_access_baton_like_locking(apr_pool_
/* Try reobtaining lock on D3; should succeed */
SVN_ERR(svn_wc__db_wclock_obtain(wc_ctx->db, D3, 0, FALSE, pool));
SVN_ERR(svn_wc__db_wclock_release(wc_ctx->db, D4, pool));
- SVN_ERR(svn_wc_context_destroy(wc_ctx));
+
/* D3 should still be locked; try stealing in a different context */
- SVN_ERR(svn_wc_context_create(&wc_ctx, NULL, pool, pool));
- SVN_ERR(svn_wc_locked2(&locked_here, &locked, wc_ctx, D3, pool));
+ SVN_ERR(svn_wc_context_create(&wc_ctx2, NULL, pool, pool));
+ SVN_ERR(svn_wc_locked2(&locked_here, &locked, wc_ctx2, D3, pool));
SVN_TEST_ASSERT(!locked_here && locked);
- err = svn_wc__db_wclock_obtain(wc_ctx->db, D3, 0, FALSE, pool);
+ err = svn_wc__db_wclock_obtain(wc_ctx2->db, D3, 0, FALSE, pool);
if (err && err->apr_err != SVN_ERR_WC_LOCKED)
return svn_error_return(err);
@@ -608,7 +608,7 @@ test_access_baton_like_locking(apr_pool_
SVN_TEST_ASSERT(err != NULL); /* Can't lock, as it is still locked */
- err = svn_wc__db_wclock_release(wc_ctx->db, D4, pool);
+ err = svn_wc__db_wclock_release(wc_ctx2->db, D4, pool);
if (err && err->apr_err != SVN_ERR_WC_NOT_LOCKED)
return svn_error_return(err);
svn_error_clear(err);
@@ -616,19 +616,54 @@ test_access_baton_like_locking(apr_pool_
SVN_TEST_ASSERT(err != NULL); /* Can't unlock, as it is not ours */
/* Now steal the lock */
- SVN_ERR(svn_wc__db_wclock_obtain(wc_ctx->db, D3, 0, TRUE, pool));
+ SVN_ERR(svn_wc__db_wclock_obtain(wc_ctx2->db, D3, 0, TRUE, pool));
/* We should own the lock now */
- SVN_ERR(svn_wc_locked2(&locked_here, &locked, wc_ctx, D3, pool));
+ SVN_ERR(svn_wc_locked2(&locked_here, &locked, wc_ctx2, D3, pool));
SVN_TEST_ASSERT(locked_here && locked);
- err = svn_wc__db_wclock_release(wc_ctx->db, D4, pool);
+ err = svn_wc__db_wclock_release(wc_ctx2->db, D4, pool);
if (err && err->apr_err != SVN_ERR_WC_NOT_LOCKED)
return svn_error_return(err);
svn_error_clear(err);
SVN_TEST_ASSERT(err != NULL); /* Can't unlock a not locked path */
+ /* Now create a separate working copy from the same repository directly
+ below this WC and test if our code really sees it as a separate wc,
+ for locking and normal operation */
+ {
+ const char *url, *repos_root_url, *repos_uuid;
+ const char *subdir = svn_dirent_join(local_abspath, "sub-wc", pool);
+
+ svn_boolean_t is_root;
+ SVN_ERR(svn_wc__node_get_url(&url, wc_ctx, local_abspath, pool, pool));
+ SVN_ERR(svn_wc__node_get_repos_info(&repos_root_url, &repos_uuid,
+ wc_ctx, local_abspath, FALSE, FALSE,
+ pool, pool));
+
+ SVN_ERR(svn_io_make_dir_recursively(subdir, pool));
+ SVN_ERR(svn_wc_ensure_adm3(subdir, repos_uuid,
+ svn_uri_join(url, "sub-wc", pool),
+ repos_root_url, 0, svn_depth_infinity,
+ pool));
+
+ SVN_ERR(svn_wc__check_wc_root(&is_root, NULL, NULL, wc_ctx->db, subdir,
+ pool));
+
+ SVN_TEST_ASSERT(is_root);
+
+ SVN_ERR(svn_wc__check_wc_root(&is_root, NULL, NULL, wc_ctx2->db, subdir,
+ pool));
+
+ /* This test was added to show a regression where the next check failed,
+ but the check above this succeeded */
+ SVN_TEST_ASSERT(is_root);
+
+ SVN_ERR(svn_wc_locked2(&locked_here, &locked, wc_ctx2, subdir, pool));
+ SVN_TEST_ASSERT(!locked_here && !locked);
+ }
+
return SVN_NO_ERROR;
}