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 2012/06/30 22:03:53 UTC
svn commit: r1355800 - in /subversion/trunk/subversion:
include/private/svn_wc_private.h libsvn_wc/tree_conflicts.c
libsvn_wc/update_editor.c libsvn_wc/util.c libsvn_wc/wc_db.c
libsvn_wc/wc_db.h tests/libsvn_wc/conflict-data-test.c
Author: rhuijben
Date: Sat Jun 30 20:03:51 2012
New Revision: 1355800
URL: http://svn.apache.org/viewvc?rev=1355800&view=rev
Log:
Remove the tree conflict data read functions from the svn_wc__db_ api.
* subversion/include/private/svn_wc_private.h
(svn_wc__get_all_tree_conflicts): Remove function.
* subversion/libsvn_wc/tree_conflicts.c
(svn_wc__add_tree_conflict): Check existence of tree conflict instead
of reading.
(svn_wc__get_tree_conflict): Read all conflicts and filter.
* subversion/libsvn_wc/update_editor.c
(already_in_a_tree_conflict): Check tree conflict boolean instead of data.
* subversion/libsvn_wc/util.c
(svn_wc__status2_from_3): Use svn_wc__get_tree_conflict() for obtaining tree
conflict data.
* subversion/libsvn_wc/wc_db.c
(read_all_tree_conflicts,
svn_wc__db_op_read_all_tree_conflicts): Remove functions.
(read_tree_conflict): Move documentation from wc_db.h here.
(svn_wc__db_op_read_tree_conflict): Remove function.
* subversion/libsvn_wc/wc_db.h
(svn_wc__db_op_read_all_tree_conflicts,
svn_wc__db_op_read_tree_conflict): Remove functions.
* subversion/tests/libsvn_wc/conflict-data-test.c
(test_read_write_tree_conflicts): Read via common api. Load list of conflict
victims instead of tree conflict victims.
Modified:
subversion/trunk/subversion/include/private/svn_wc_private.h
subversion/trunk/subversion/libsvn_wc/tree_conflicts.c
subversion/trunk/subversion/libsvn_wc/update_editor.c
subversion/trunk/subversion/libsvn_wc/util.c
subversion/trunk/subversion/libsvn_wc/wc_db.c
subversion/trunk/subversion/libsvn_wc/wc_db.h
subversion/trunk/subversion/tests/libsvn_wc/conflict-data-test.c
Modified: subversion/trunk/subversion/include/private/svn_wc_private.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/private/svn_wc_private.h?rev=1355800&r1=1355799&r2=1355800&view=diff
==============================================================================
--- subversion/trunk/subversion/include/private/svn_wc_private.h (original)
+++ subversion/trunk/subversion/include/private/svn_wc_private.h Sat Jun 30 20:03:51 2012
@@ -305,20 +305,6 @@ svn_wc__del_tree_conflict(svn_wc_context
const char *victim_abspath,
apr_pool_t *scratch_pool);
-
-/* Return a hash @a *tree_conflicts of all the children of @a
- * local_abspath that are in tree conflicts. The hash maps local
- * abspaths to pointers to svn_wc_conflict_description2_t, all
- * allocated in result pool.
- */
-svn_error_t *
-svn_wc__get_all_tree_conflicts(apr_hash_t **tree_conflicts,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
-
/** Like svn_wc_is_wc_root(), but it doesn't consider switched subdirs or
* deleted entries as working copy roots.
*/
Modified: subversion/trunk/subversion/libsvn_wc/tree_conflicts.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/tree_conflicts.c?rev=1355800&r1=1355799&r2=1355800&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/tree_conflicts.c (original)
+++ subversion/trunk/subversion/libsvn_wc/tree_conflicts.c Sat Jun 30 20:03:51 2012
@@ -402,14 +402,22 @@ svn_wc__add_tree_conflict(svn_wc_context
const svn_wc_conflict_description2_t *conflict,
apr_pool_t *scratch_pool)
{
- const svn_wc_conflict_description2_t *existing_conflict;
+ svn_boolean_t existing_conflict;
svn_skel_t *conflict_skel;
+ svn_error_t *err;
/* Re-adding an existing tree conflict victim is an error. */
- SVN_ERR(svn_wc__db_op_read_tree_conflict(&existing_conflict, wc_ctx->db,
- conflict->local_abspath,
- scratch_pool, scratch_pool));
- if (existing_conflict != NULL)
+ err = svn_wc__internal_conflicted_p(NULL, NULL, &existing_conflict,
+ wc_ctx->db, conflict->local_abspath,
+ scratch_pool);
+ if (err)
+ {
+ if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND)
+ return svn_error_trace(err);
+
+ svn_error_clear(err);
+ }
+ else if (existing_conflict)
return svn_error_createf(SVN_ERR_WC_CORRUPT, NULL,
_("Attempt to add tree conflict that already "
"exists at '%s'"),
@@ -456,44 +464,37 @@ svn_wc__add_tree_conflict(svn_wc_context
svn_error_t *
svn_wc__get_tree_conflict(const svn_wc_conflict_description2_t **tree_conflict,
svn_wc_context_t *wc_ctx,
- const char *victim_abspath,
+ const char *local_abspath,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- SVN_ERR_ASSERT(svn_dirent_is_absolute(victim_abspath));
+ const apr_array_header_t *conflicts;
+ int i;
+ SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
- return svn_error_trace(
- svn_wc__db_op_read_tree_conflict(tree_conflict, wc_ctx->db, victim_abspath,
- result_pool, scratch_pool));
-}
+ SVN_ERR(svn_wc__db_read_conflicts(&conflicts,
+ wc_ctx->db, local_abspath,
+ scratch_pool, scratch_pool));
-svn_error_t *
-svn_wc__get_all_tree_conflicts(apr_hash_t **tree_conflicts,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- apr_hash_t *conflicts;
- apr_hash_index_t *hi;
-
- SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+ if (!conflicts || conflicts->nelts == 0)
+ {
+ *tree_conflict = NULL;
+ return SVN_NO_ERROR;
+ }
- SVN_ERR(svn_wc__db_op_read_all_tree_conflicts(&conflicts, wc_ctx->db,
- local_abspath,
- result_pool, scratch_pool));
- *tree_conflicts = apr_hash_make(result_pool);
- /* Convert from basenames as keys to abspaths as keys. */
- for (hi = apr_hash_first(scratch_pool, conflicts); hi;
- hi = apr_hash_next(hi))
+ for (i = 0; i < conflicts->nelts; i++)
{
- const char *name = svn__apr_hash_index_key(hi);
- const svn_wc_conflict_description2_t *conflict
- = svn__apr_hash_index_val(hi);
- const char *abspath = svn_dirent_join(local_abspath, name, scratch_pool);
+ const svn_wc_conflict_description2_t *desc;
- apr_hash_set(*tree_conflicts, abspath, APR_HASH_KEY_STRING, conflict);
- }
+ desc = APR_ARRAY_IDX(conflicts, i, svn_wc_conflict_description2_t *);
+ if (desc->kind == svn_wc_conflict_kind_tree)
+ {
+ *tree_conflict = svn_wc__conflict_description2_dup(desc,
+ result_pool);
+ return SVN_NO_ERROR;
+ }
+ }
return SVN_NO_ERROR;
}
+
Modified: subversion/trunk/subversion/libsvn_wc/update_editor.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/update_editor.c?rev=1355800&r1=1355799&r2=1355800&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/update_editor.c (original)
+++ subversion/trunk/subversion/libsvn_wc/update_editor.c Sat Jun 30 20:03:51 2012
@@ -1636,30 +1636,17 @@ already_in_a_tree_conflict(svn_boolean_t
while (TRUE)
{
- svn_boolean_t is_wc_root, has_conflict;
+ svn_boolean_t is_wc_root, tree_conflicted;
svn_pool_clear(iterpool);
- SVN_ERR(svn_wc__db_read_info(NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL,
- &has_conflict, NULL, NULL, NULL,
- NULL, NULL, NULL,
- db, ancestor_abspath, iterpool, iterpool));
+ SVN_ERR(svn_wc__internal_conflicted_p(NULL, NULL, &tree_conflicted,
+ db, ancestor_abspath, iterpool));
- if (has_conflict)
+ if (tree_conflicted)
{
- const svn_wc_conflict_description2_t *conflict;
-
- SVN_ERR(svn_wc__db_op_read_tree_conflict(&conflict, db,
- ancestor_abspath,
- iterpool, iterpool));
-
- if (conflict != NULL)
- {
- *conflicted = TRUE;
- break;
- }
+ *conflicted = TRUE;
+ break;
}
SVN_ERR(svn_wc__db_is_wcroot(&is_wc_root, db, ancestor_abspath,
Modified: subversion/trunk/subversion/libsvn_wc/util.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/util.c?rev=1355800&r1=1355799&r2=1355800&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/util.c (original)
+++ subversion/trunk/subversion/libsvn_wc/util.c Sat Jun 30 20:03:51 2012
@@ -448,9 +448,8 @@ svn_wc__status2_from_3(svn_wc_status2_t
if (old_status->conflicted)
{
const svn_wc_conflict_description2_t *tree_conflict;
- SVN_ERR(svn_wc__db_op_read_tree_conflict(&tree_conflict, wc_ctx->db,
- local_abspath, scratch_pool,
- scratch_pool));
+ SVN_ERR(svn_wc__get_tree_conflict(&tree_conflict, wc_ctx, local_abspath,
+ scratch_pool, scratch_pool));
(*status)->tree_conflict = svn_wc__cd2_to_cd(tree_conflict, result_pool);
}
Modified: subversion/trunk/subversion/libsvn_wc/wc_db.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db.c?rev=1355800&r1=1355799&r2=1355800&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc_db.c (original)
+++ subversion/trunk/subversion/libsvn_wc/wc_db.c Sat Jun 30 20:03:51 2012
@@ -6160,85 +6160,11 @@ svn_wc__db_revert_list_done(svn_wc__db_t
return SVN_NO_ERROR;
}
-/* Like svn_wc__db_op_read_all_tree_conflicts(), but with WCROOT+LOCAL_RELPATH
- instead of DB+LOCAL_ABSPATH. */
-static svn_error_t *
-read_all_tree_conflicts(apr_hash_t **tree_conflicts,
- svn_wc__db_wcroot_t *wcroot,
- const char *local_relpath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- svn_sqlite__stmt_t *stmt;
- svn_boolean_t have_row;
- apr_pool_t *iterpool = svn_pool_create(scratch_pool);
-
- *tree_conflicts = apr_hash_make(result_pool);
-
- /* Get the conflict information for children of LOCAL_ABSPATH. */
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_SELECT_ACTUAL_CHILDREN_TREE_CONFLICT));
- SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
- SVN_ERR(svn_sqlite__step(&have_row, stmt));
- while (have_row)
- {
- const char *child_basename;
- const char *child_relpath;
- const char *child_abspath;
- const char *conflict_data;
- const svn_skel_t *skel;
- const svn_wc_conflict_description2_t *conflict;
-
- svn_pool_clear(iterpool);
-
- child_relpath = svn_sqlite__column_text(stmt, 0, NULL);
- child_basename = svn_relpath_basename(child_relpath, result_pool);
- child_abspath = svn_dirent_join(wcroot->abspath, child_relpath, iterpool);
-
- conflict_data = svn_sqlite__column_text(stmt, 1, NULL);
- skel = svn_skel__parse(conflict_data, strlen(conflict_data), iterpool);
- SVN_ERR(svn_wc__deserialize_conflict(&conflict, skel,
- svn_dirent_dirname(child_abspath, iterpool),
- result_pool, iterpool));
-
- apr_hash_set(*tree_conflicts, child_basename, APR_HASH_KEY_STRING,
- conflict);
-
- SVN_ERR(svn_sqlite__step(&have_row, stmt));
- }
- SVN_ERR(svn_sqlite__reset(stmt));
-
- svn_pool_destroy(iterpool);
-
- return SVN_NO_ERROR;
-}
-
-
-svn_error_t *
-svn_wc__db_op_read_all_tree_conflicts(apr_hash_t **tree_conflicts,
- svn_wc__db_t *db,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- svn_wc__db_wcroot_t *wcroot;
- const char *local_relpath;
+/* Get any tree conflict associated with LOCAL_RELPATH in WCROOT, and put it
+ in *TREE_CONFLICT, allocated in RESULT_POOL.
- SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
-
- SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
- local_abspath, scratch_pool, scratch_pool));
- VERIFY_USABLE_WCROOT(wcroot);
-
- SVN_ERR(read_all_tree_conflicts(tree_conflicts, wcroot, local_relpath,
- result_pool, scratch_pool));
-
- return SVN_NO_ERROR;
-}
-
-
-/* Like svn_wc__db_op_read_tree_conflict(), but with WCROOT+LOCAL_RELPATH
- instead of DB+LOCAL_ABSPATH. */
+ Use SCRATCH_POOL for any temporary allocations.
+ */
static svn_error_t *
read_tree_conflict(const svn_wc_conflict_description2_t **tree_conflict,
svn_wc__db_wcroot_t *wcroot,
@@ -6282,29 +6208,6 @@ read_tree_conflict(const svn_wc_conflict
svn_sqlite__reset(stmt));
}
-
-svn_error_t *
-svn_wc__db_op_read_tree_conflict(
- const svn_wc_conflict_description2_t **tree_conflict,
- svn_wc__db_t *db,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- svn_wc__db_wcroot_t *wcroot;
- const char *local_relpath;
-
- SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
-
- SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
- local_abspath, scratch_pool, scratch_pool));
-
- SVN_ERR(read_tree_conflict(tree_conflict, wcroot, local_relpath,
- result_pool, scratch_pool));
-
- return SVN_NO_ERROR;
-}
-
/* Baton for remove_node_txn */
struct remove_node_baton
{
Modified: subversion/trunk/subversion/libsvn_wc/wc_db.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db.h?rev=1355800&r1=1355799&r2=1355800&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc_db.h (original)
+++ subversion/trunk/subversion/libsvn_wc/wc_db.h Sat Jun 30 20:03:51 2012
@@ -1616,35 +1616,6 @@ svn_wc__db_revert_list_done(svn_wc__db_t
const char *local_abspath,
apr_pool_t *scratch_pool);
-
-/* Return a hash @a *tree_conflicts of all the children of @a
- * local_abspath that are in tree conflicts. The hash maps local
- * basenames to pointers to svn_wc_conflict_description2_t, all
- * allocated in result pool.
- */
-/* ### this is not an OPERATION. remove the _op_. */
-svn_error_t *
-svn_wc__db_op_read_all_tree_conflicts(apr_hash_t **tree_conflicts,
- svn_wc__db_t *db,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
-/* Get any tree conflict associated with LOCAL_ABSPATH in DB, and put it
- in *TREE_CONFLICT, allocated in RESULT_POOL.
-
- Use SCRATCH_POOL for any temporary allocations.
-*/
-/* ### this is not an OPERATION. remove the _op_. */
-svn_error_t *
-svn_wc__db_op_read_tree_conflict(
- const svn_wc_conflict_description2_t **tree_conflict,
- svn_wc__db_t *db,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
-
/* ### status */
Modified: subversion/trunk/subversion/tests/libsvn_wc/conflict-data-test.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/libsvn_wc/conflict-data-test.c?rev=1355800&r1=1355799&r2=1355800&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/libsvn_wc/conflict-data-test.c (original)
+++ subversion/trunk/subversion/tests/libsvn_wc/conflict-data-test.c Sat Jun 30 20:03:51 2012
@@ -245,12 +245,12 @@ test_read_write_tree_conflicts(const svn
SVN_TEST_ASSERT(! text_c && ! prop_c);
}
- /* Read one (conflict1 through WC-DB API, conflict2 through WC API) */
+ /* Read conflicts back */
{
const svn_wc_conflict_description2_t *read_conflict;
- SVN_ERR(svn_wc__db_op_read_tree_conflict(&read_conflict, sbox.wc_ctx->db,
- child1_abspath, pool, pool));
+ SVN_ERR(svn_wc__get_tree_conflict(&read_conflict, sbox.wc_ctx,
+ child1_abspath, pool, pool));
SVN_ERR(compare_conflict(conflict1, read_conflict));
SVN_ERR(svn_wc__get_tree_conflict(&read_conflict, sbox.wc_ctx,
@@ -258,32 +258,17 @@ test_read_write_tree_conflicts(const svn
SVN_ERR(compare_conflict(conflict2, read_conflict));
}
- /* Read many (both through WC-DB API, both through WC API) */
+ /* Read many */
{
- apr_hash_t *all_conflicts;
- const svn_wc_conflict_description2_t *read_conflict;
+ const apr_array_header_t *victims;
- SVN_ERR(svn_wc__db_op_read_all_tree_conflicts(
- &all_conflicts, sbox.wc_ctx->db, parent_abspath, pool, pool));
- SVN_TEST_ASSERT(apr_hash_count(all_conflicts) == 2);
- read_conflict = apr_hash_get(all_conflicts, "foo", APR_HASH_KEY_STRING);
- SVN_ERR(compare_conflict(conflict1, read_conflict));
- read_conflict = apr_hash_get(all_conflicts, "bar", APR_HASH_KEY_STRING);
- SVN_ERR(compare_conflict(conflict2, read_conflict));
-
- SVN_ERR(svn_wc__get_all_tree_conflicts(
- &all_conflicts, sbox.wc_ctx, parent_abspath, pool, pool));
- SVN_TEST_ASSERT(apr_hash_count(all_conflicts) == 2);
- read_conflict = apr_hash_get(all_conflicts, child1_abspath,
- APR_HASH_KEY_STRING);
- SVN_ERR(compare_conflict(conflict1, read_conflict));
- read_conflict = apr_hash_get(all_conflicts, child2_abspath,
- APR_HASH_KEY_STRING);
- SVN_ERR(compare_conflict(conflict2, read_conflict));
+ SVN_ERR(svn_wc__db_read_conflict_victims(&victims,
+ sbox.wc_ctx->db, parent_abspath,
+ pool, pool));
+ SVN_TEST_ASSERT(victims->nelts == 2);
}
/* ### TODO: to test...
- * svn_wc__db_read_conflict_victims
* svn_wc__db_read_conflicts
* svn_wc__node_get_conflict_info
* svn_wc__del_tree_conflict