Author: philip
Date: Thu Jul 4 13:22:00 2013
New Revision: 1499747
URL: http://svn.apache.org/r1499747
Log:
Add a regression test for issue 4388.
* subversion/tests/libsvn_wc/op-depth-test.c
(check_db_actual): Reset statement on error.
(move_update_parent_replace): New test.
(test_funcs): Add new test.
Modified:
subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c
Modified: subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c?rev=1499747&r1=1499746&r2=1499747&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c (original)
+++ subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c Thu Jul 4
13:22:00 2013
@@ -1893,7 +1893,7 @@ check_db_actual(svn_test__sandbox_t* b,
{
const char *local_relpath = svn_sqlite__column_text(stmt, 0, b->pool);
if (!apr_hash_get(path_hash, local_relpath, APR_HASH_KEY_STRING))
- return svn_error_createf(SVN_ERR_TEST_FAILED, svn_sqlite__close(sdb),
+ return svn_error_createf(SVN_ERR_TEST_FAILED, svn_sqlite__reset(stmt),
"actual '%s' unexpected", local_relpath);
apr_hash_set(path_hash, local_relpath, APR_HASH_KEY_STRING, NULL);
SVN_ERR(svn_sqlite__step(&have_row, stmt));
@@ -1903,7 +1903,7 @@ check_db_actual(svn_test__sandbox_t* b,
{
const char *local_relpath
= svn__apr_hash_index_key(apr_hash_first(b->pool, path_hash));
- return svn_error_createf(SVN_ERR_TEST_FAILED, svn_sqlite__close(sdb),
+ return svn_error_createf(SVN_ERR_TEST_FAILED, svn_sqlite__reset(stmt),
"actual '%s' expected", local_relpath);
}
@@ -8149,6 +8149,63 @@ update_with_tree_conflict(const svn_test
return SVN_NO_ERROR;
}
+static svn_error_t *
+move_update_parent_replace(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "move_update_parent_replace", opts,
+ pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_delete(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+ SVN_ERR(sbox_wc_move(&b, "A/B/C", "A/C"));
+
+ /* Update breaks the move and leaves a conflict. */
+ SVN_ERR(sbox_wc_update(&b, "", 2));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 2, ""},
+ {0, "A", "normal", 2, "A"},
+ {0, "A/B", "normal", 2, "A/B"},
+ {2, "A/C", "normal", 1, "A/B/C"},
+ {0}
+ };
+ actual_row_t actual[] = {
+ {"A/B", NULL},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ SVN_ERR(check_db_actual(&b, actual));
+ }
+
+ SVN_ERR(sbox_wc_resolve(&b, "A/B", svn_depth_infinity,
+ svn_wc_conflict_choose_mine_conflict));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 2, ""},
+ {0, "A", "normal", 2, "A"},
+ {0, "A/B", "normal", 2, "A/B"},
+ {2, "A/C", "normal", 1, "A/B/C"},
+ {0}
+ };
+ actual_row_t actual[] = {
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ SVN_ERR(check_db_actual(&b, actual));
+ }
+
+ return SVN_NO_ERROR;
+}
+
/* ---------------------------------------------------------------------- */
/* The list of test functions */
@@ -8302,5 +8359,7 @@ struct svn_test_descriptor_t test_funcs[
"move/delete file externals (issue 4293)"),
SVN_TEST_OPTS_PASS(update_with_tree_conflict,
"update with tree conflict (issue 4347)"),
+ SVN_TEST_OPTS_PASS(move_update_parent_replace,
+ "move update with replaced parent (issue 4388)"),
SVN_TEST_NULL
};