You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2012/01/13 22:40:38 UTC
svn commit: r1231318 [34/35] - in /subversion/branches/revprop-packing: ./
build/ build/ac-macros/ build/generator/ build/generator/templates/
build/win32/ contrib/client-side/emacs/ contrib/server-side/mod_dontdothat/
notes/ notes/http-and-webdav/ not...
Modified: subversion/branches/revprop-packing/subversion/tests/libsvn_wc/op-depth-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/tests/libsvn_wc/op-depth-test.c?rev=1231318&r1=1231317&r2=1231318&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/tests/libsvn_wc/op-depth-test.c (original)
+++ subversion/branches/revprop-packing/subversion/tests/libsvn_wc/op-depth-test.c Fri Jan 13 21:40:26 2012
@@ -77,7 +77,7 @@ open_wc_db(svn_sqlite__db_t **sdb,
apr_pool_t *scratch_pool)
{
SVN_ERR(svn_wc__db_util_open_db(sdb, wc_root_abspath, "wc.db",
- svn_sqlite__mode_readonly, my_statements,
+ svn_sqlite__mode_readwrite, my_statements,
result_pool, scratch_pool));
return SVN_NO_ERROR;
}
@@ -163,9 +163,14 @@ static svn_error_t *
wc_revert(svn_test__sandbox_t *b, const char *path, svn_depth_t depth)
{
const char *abspath = wc_path(b, path);
- const char *dir_abspath = svn_dirent_dirname(abspath, b->pool);
+ const char *dir_abspath;
const char *lock_root_abspath;
+ if (strcmp(abspath, b->wc_abspath))
+ dir_abspath = svn_dirent_dirname(abspath, b->pool);
+ else
+ dir_abspath = abspath;
+
SVN_ERR(svn_wc__acquire_write_lock(&lock_root_abspath, b->wc_ctx,
dir_abspath, FALSE /* lock_anchor */,
b->pool, b->pool));
@@ -264,6 +269,23 @@ wc_move(svn_test__sandbox_t *b, const ch
FALSE, FALSE, NULL, NULL, NULL, ctx, b->pool);
}
+static svn_error_t *
+wc_propset(svn_test__sandbox_t *b,
+ const char *name,
+ const char *value,
+ const char *path)
+{
+ svn_client_ctx_t *ctx;
+ apr_array_header_t *paths = apr_array_make(b->pool, 1,
+ sizeof(const char *));
+
+ SVN_ERR(svn_client_create_context(&ctx, b->pool));
+ APR_ARRAY_PUSH(paths, const char *) = wc_path(b, path);
+ return svn_client_propset_local(name, svn_string_create(value, b->pool),
+ paths, svn_depth_empty, TRUE, NULL, ctx,
+ b->pool);
+}
+
/* Create the Greek tree on disk in the WC, and commit it. */
static svn_error_t *
add_and_commit_greek_tree(svn_test__sandbox_t *b)
@@ -299,26 +321,52 @@ typedef struct nodes_row_t {
const char *presence;
svn_revnum_t repo_revnum;
const char *repo_relpath;
+ svn_boolean_t file_external;
+ const char *moved_to;
+ svn_boolean_t moved_here;
} nodes_row_t;
/* Macro for filling in the REPO_* fields of a non-base NODES_ROW_T
* that has no copy-from info. */
#define NO_COPY_FROM SVN_INVALID_REVNUM, NULL
+#define MOVED_HERE FALSE, NULL, TRUE
/* Return a human-readable string representing ROW. */
static const char *
print_row(const nodes_row_t *row,
apr_pool_t *result_pool)
{
+ const char *file_external_str, *moved_here_str, *moved_to_str;
+
if (row == NULL)
return "(null)";
+
+ if (row->moved_to)
+ moved_to_str = apr_psprintf(result_pool, ", to %s", row->moved_to);
+ else
+ moved_to_str = "";
+
+ if (row->moved_here)
+ moved_here_str = ", here";
+ else
+ moved_here_str = "";
+
+ if (row->file_external)
+ file_external_str = ", file-external";
+ else
+ file_external_str = "";
+
if (row->repo_revnum == SVN_INVALID_REVNUM)
- return apr_psprintf(result_pool, "%d, %s, %s",
- row->op_depth, row->local_relpath, row->presence);
+ return apr_psprintf(result_pool, "%d, %s, %s%s%s%s",
+ row->op_depth, row->local_relpath, row->presence,
+ moved_here_str, moved_to_str,
+ file_external_str);
else
- return apr_psprintf(result_pool, "%d, %s, %s, from ^/%s@%d",
+ return apr_psprintf(result_pool, "%d, %s, %s, from ^/%s@%d%s%s%s",
row->op_depth, row->local_relpath, row->presence,
- row->repo_relpath, (int)row->repo_revnum);
+ row->repo_relpath, (int)row->repo_revnum,
+ moved_here_str, moved_to_str,
+ file_external_str);
}
/* A baton to pass through svn_hash_diff() to compare_nodes_rows(). */
@@ -359,7 +407,13 @@ compare_nodes_rows(const void *key, apr_
}
else if (expected->repo_revnum != found->repo_revnum
|| (strcmp_null(expected->repo_relpath, found->repo_relpath) != 0)
- || (strcmp_null(expected->presence, found->presence) != 0))
+ || (strcmp_null(expected->presence, found->presence) != 0)
+ || (expected->file_external != found->file_external)
+ || (expected->moved_here != found->moved_here)
+ || (expected->moved_to && !found->moved_to)
+ || (!expected->moved_to && found->moved_to)
+ || (expected->moved_to
+ && strcmp(expected->moved_to, found->moved_to)))
{
b->errors = svn_error_createf(
SVN_ERR_TEST_FAILED, b->errors,
@@ -388,9 +442,12 @@ check_db_rows(svn_test__sandbox_t *b,
int i;
svn_sqlite__stmt_t *stmt;
static const char *const statements[] = {
- "SELECT op_depth, presence, local_relpath, revision, repos_path "
- "FROM nodes "
- "WHERE local_relpath = ?1 OR local_relpath LIKE ?2",
+ "SELECT op_depth, nodes.presence, nodes.local_relpath, revision,"
+ " repos_path, file_external, def_local_relpath, moved_to, moved_here"
+ " FROM nodes "
+ " LEFT OUTER JOIN externals"
+ " ON nodes.local_relpath = externals.local_relpath"
+ " WHERE nodes.local_relpath = ?1 OR nodes.local_relpath LIKE ?2",
NULL };
#define STMT_SELECT_NODES_INFO 0
@@ -418,6 +475,13 @@ check_db_rows(svn_test__sandbox_t *b,
row->local_relpath = svn_sqlite__column_text(stmt, 2, b->pool);
row->repo_revnum = svn_sqlite__column_revnum(stmt, 3);
row->repo_relpath = svn_sqlite__column_text(stmt, 4, b->pool);
+ row->file_external = !svn_sqlite__column_is_null(stmt, 5);
+ if (row->file_external && svn_sqlite__column_is_null(stmt, 6))
+ comparison_baton.errors
+ = svn_error_createf(SVN_ERR_TEST_FAILED, comparison_baton.errors,
+ "incomplete {%s}", print_row(row, b->pool));
+ row->moved_to = svn_sqlite__column_text(stmt, 7, b->pool);
+ row->moved_here = svn_sqlite__column_boolean(stmt, 8);
key = apr_psprintf(b->pool, "%d %s", row->op_depth, row->local_relpath);
apr_hash_set(found_hash, key, APR_HASH_KEY_STRING, row);
@@ -439,6 +503,7 @@ check_db_rows(svn_test__sandbox_t *b,
/* Compare EXPECTED_HASH with ACTUAL_HASH and return any errors. */
SVN_ERR(svn_hash_diff(expected_hash, found_hash,
compare_nodes_rows, &comparison_baton, b->pool));
+ SVN_ERR(svn_sqlite__close(sdb));
return comparison_baton.errors;
}
@@ -1648,9 +1713,9 @@ test_wc_move(const svn_test_opts_t *opts
{ 0, "", "normal", 1, "" },
{ 0, "A", "normal", 1, "A" },
{ 0, "A/B", "normal", 1, "A/B" },
- { 0, "A/B/C", "normal", 1, "A/B/C" },
+ { 0, "A/B/C", "normal", 1, "A/B/C", FALSE, "A/B/C-move" },
{ 3, "A/B/C", "base-deleted", NO_COPY_FROM },
- { 3, "A/B/C-move", "normal", 1, "A/B/C" },
+ { 3, "A/B/C-move", "normal", 1, "A/B/C", MOVED_HERE },
{ 0 }
};
SVN_ERR(check_db_rows(&b, "", rows));
@@ -1661,14 +1726,14 @@ test_wc_move(const svn_test_opts_t *opts
nodes_row_t rows[] = {
{ 0, "", "normal", 1, "" },
{ 0, "A", "normal", 1, "A" },
- { 0, "A/B", "normal", 1, "A/B" },
- { 0, "A/B/C", "normal", 1, "A/B/C" },
+ { 0, "A/B", "normal", 1, "A/B", FALSE, "A/B-move" },
+ { 0, "A/B/C", "normal", 1, "A/B/C", FALSE, "A/B-move/C-move" },
{ 2, "A/B", "base-deleted", NO_COPY_FROM },
{ 2, "A/B/C", "base-deleted", NO_COPY_FROM },
- { 2, "A/B-move", "normal", 1, "A/B" },
- { 2, "A/B-move/C", "normal", 1, "A/B/C" },
+ { 2, "A/B-move", "normal", 1, "A/B", MOVED_HERE },
+ { 2, "A/B-move/C", "normal", 1, "A/B/C", MOVED_HERE },
{ 3, "A/B-move/C", "base-deleted", NO_COPY_FROM },
- { 3, "A/B-move/C-move", "normal", 1, "A/B/C" },
+ { 3, "A/B-move/C-move", "normal", 1, "A/B/C", MOVED_HERE },
{ 0 }
};
SVN_ERR(check_db_rows(&b, "", rows));
@@ -3103,7 +3168,9 @@ test_shadowed_update(const svn_test_opts
SVN_ERR(wc_update(&b, "", 2));
SVN_ERR(wc_copy(&b, "A", "A_tmp"));
SVN_ERR(wc_update(&b, "", 1));
- SVN_ERR(wc_move(&b, "A_tmp", "A"));
+ SVN_ERR(wc_move(&b, "A_tmp", "A")); /* ### XFAIL: sets moved-here on
+ A but A_tmp is removed and so
+ does not have moved-to. */
SVN_ERR(wc_mkdir(&b, "K"));
SVN_ERR(wc_mkdir(&b, "K/L"));
@@ -3405,6 +3472,1002 @@ test_case_rename(const svn_test_opts_t *
return SVN_NO_ERROR;
}
+
+static svn_error_t *
+commit_file_external(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "commit_file_external", opts, pool));
+ file_write(&b, "f", "this is f\n");
+ SVN_ERR(wc_add(&b, "f"));
+ SVN_ERR(wc_propset(&b, "svn:externals", "^/f g", ""));
+ SVN_ERR(wc_commit(&b, ""));
+ SVN_ERR(wc_update(&b, "", 1));
+ file_write(&b, "g", "this is f\nmodified via g\n");
+ SVN_ERR(wc_commit(&b, ""));
+ SVN_ERR(wc_update(&b, "", 2));
+
+ {
+ nodes_row_t rows[] = {
+ { 0, "", "normal", 2, "" },
+ { 0, "f", "normal", 2, "f" },
+ { 0, "g", "normal", 2, "f", TRUE },
+ { 0 }
+ };
+ SVN_ERR(check_db_rows(&b, "", rows));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+revert_file_externals(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "revert_file_externals", opts, pool));
+ file_write(&b, "f", "this is f\n");
+ SVN_ERR(wc_add(&b, "f"));
+ SVN_ERR(wc_propset(&b, "svn:externals", "^/f g", ""));
+ SVN_ERR(wc_commit(&b, ""));
+ SVN_ERR(wc_update(&b, "", 1));
+ SVN_ERR(wc_propset(&b, "svn:externals", "^/f h", ""));
+ SVN_ERR(wc_mkdir(&b, "A"));
+ SVN_ERR(wc_propset(&b, "svn:externals", "^/f g", "A"));
+ {
+ nodes_row_t rows[] = {
+ { 0, "", "normal", 1, "" },
+ { 0, "f", "normal", 1, "f" },
+ { 0, "g", "normal", 1, "f", TRUE },
+ { 1, "A", "normal", NO_COPY_FROM },
+ { 0 }
+ };
+ SVN_ERR(check_db_rows(&b, "", rows));
+ }
+
+ SVN_ERR(wc_update(&b, "", 1));
+ {
+ nodes_row_t rows[] = {
+ { 0, "", "normal", 1, "" },
+ { 0, "f", "normal", 1, "f" },
+ { 1, "A", "normal", NO_COPY_FROM },
+ { 0, "h", "normal", 1, "f", TRUE },
+ { 0, "A/g", "normal", 1, "f", TRUE },
+ { 0 }
+ };
+ SVN_ERR(check_db_rows(&b, "", rows));
+ }
+
+ SVN_ERR(wc_revert(&b, "", svn_depth_infinity));
+ {
+ nodes_row_t rows[] = {
+ { 0, "", "normal", 1, "" },
+ { 0, "f", "normal", 1, "f" },
+ { 0, "h", "normal", 1, "f", TRUE },
+ { 0, "A/g", "normal", 1, "f", TRUE },
+ { 0 }
+ };
+ SVN_ERR(check_db_rows(&b, "", rows));
+ }
+
+ SVN_ERR(wc_update(&b, "", 1));
+ {
+ nodes_row_t rows[] = {
+ { 0, "", "normal", 1, "" },
+ { 0, "f", "normal", 1, "f" },
+ { 0, "g", "normal", 1, "f", TRUE },
+ { 0 }
+ };
+ SVN_ERR(check_db_rows(&b, "", rows));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+copy_file_externals(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "copy_file_externals", opts, pool));
+ file_write(&b, "f", "this is f\n");
+ SVN_ERR(wc_add(&b, "f"));
+ SVN_ERR(wc_mkdir(&b, "A"));
+ SVN_ERR(wc_propset(&b, "svn:externals", "^/f g", "A"));
+ SVN_ERR(wc_commit(&b, ""));
+ SVN_ERR(wc_mkdir(&b, "A/B"));
+ SVN_ERR(wc_propset(&b, "svn:externals", "^/f g", "A/B"));
+ SVN_ERR(wc_update(&b, "", 1));
+ {
+ nodes_row_t rows[] = {
+ { 0, "", "normal", 1, "" },
+ { 0, "f", "normal", 1, "f" },
+ { 0, "A", "normal", 1, "A" },
+ { 2, "A/B", "normal", NO_COPY_FROM },
+ { 0, "A/g", "normal", 1, "f", TRUE },
+ { 0, "A/B/g", "normal", 1, "f", TRUE },
+ { 0 }
+ };
+ SVN_ERR(check_db_rows(&b, "", rows));
+ }
+
+ SVN_ERR(wc_copy(&b, "A", "X"));
+ {
+ nodes_row_t rows[] = {
+ { 0, "", "normal", 1, "" },
+ { 0, "f", "normal", 1, "f" },
+ { 0, "A", "normal", 1, "A" },
+ { 2, "A/B", "normal", NO_COPY_FROM },
+ { 0, "A/g", "normal", 1, "f", TRUE },
+ { 0, "A/B/g", "normal", 1, "f", TRUE },
+ { 1, "X", "normal", 1, "A" },
+ { 2, "X/B", "normal", NO_COPY_FROM },
+ { 0 }
+ };
+ SVN_ERR(check_db_rows(&b, "", rows));
+ }
+
+ SVN_ERR(wc_update(&b, "", 1));
+ {
+ nodes_row_t rows[] = {
+ { 0, "", "normal", 1, "" },
+ { 0, "f", "normal", 1, "f" },
+ { 0, "A", "normal", 1, "A" },
+ { 2, "A/B", "normal", NO_COPY_FROM },
+ { 0, "A/g", "normal", 1, "f", TRUE },
+ { 0, "A/B/g", "normal", 1, "f", TRUE },
+ { 1, "X", "normal", 1, "A" },
+ { 2, "X/B", "normal", NO_COPY_FROM },
+ { 0, "X/g", "normal", 1, "f", TRUE },
+ { 0, "X/B/g", "normal", 1, "f", TRUE },
+ { 0 }
+ };
+ SVN_ERR(check_db_rows(&b, "", rows));
+ }
+
+ SVN_ERR(wc_delete(&b, "X"));
+ {
+ nodes_row_t rows[] = {
+ { 0, "", "normal", 1, "" },
+ { 0, "f", "normal", 1, "f" },
+ { 0, "A", "normal", 1, "A" },
+ { 2, "A/B", "normal", NO_COPY_FROM },
+ { 0, "A/g", "normal", 1, "f", TRUE },
+ { 0, "A/B/g", "normal", 1, "f", TRUE },
+ { 0, "X/g", "normal", 1, "f", TRUE },
+ { 0, "X/B/g", "normal", 1, "f", TRUE },
+ { 0 }
+ };
+ SVN_ERR(check_db_rows(&b, "", rows));
+ }
+
+ SVN_ERR(wc_update(&b, "", 1));
+ {
+ nodes_row_t rows[] = {
+ { 0, "", "normal", 1, "" },
+ { 0, "f", "normal", 1, "f" },
+ { 0, "A", "normal", 1, "A" },
+ { 2, "A/B", "normal", NO_COPY_FROM },
+ { 0, "A/g", "normal", 1, "f", TRUE },
+ { 0, "A/B/g", "normal", 1, "f", TRUE },
+ { 0 }
+ };
+ SVN_ERR(check_db_rows(&b, "", rows));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+copy_wc_wc_absent(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+ nodes_row_t before[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/E", "absent", 1, "A/B/E"},
+ {0}
+ };
+ nodes_row_t after[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/E", "absent", 1, "A/B/E"},
+ {1, "X", "normal", 1, "A"},
+ {1, "X/B", "normal", 1, "A/B"},
+ {1, "X/B/E", "incomplete", 1, "A/B/E"},
+ {0}
+ };
+ svn_error_t *err;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "copy_wc_wc_absent", opts, pool));
+ SVN_ERR(insert_dirs(&b, before));
+ SVN_ERR(check_db_rows(&b, "", before));
+ SVN_ERR(disk_mkdir(&b, "A"));
+ err = wc_copy(&b, "A", "X");
+ SVN_TEST_ASSERT(err && err->apr_err == SVN_ERR_WC_PATH_UNEXPECTED_STATUS);
+ svn_error_clear(err);
+ SVN_ERR(check_db_rows(&b, "", after));
+
+ return SVN_NO_ERROR;
+}
+
+/* Issue 4040 */
+static svn_error_t *
+incomplete_switch(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "incomplete_switch", opts, pool));
+
+ SVN_ERR(wc_mkdir(&b, "A"));
+ SVN_ERR(wc_mkdir(&b, "A/B"));
+ SVN_ERR(wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(wc_mkdir(&b, "A/B/C/D"));
+ SVN_ERR(wc_commit(&b, ""));
+ SVN_ERR(wc_copy(&b, "A", "X"));
+ SVN_ERR(wc_commit(&b, ""));
+ SVN_ERR(wc_copy(&b, "A", "X/A"));
+ SVN_ERR(wc_commit(&b, ""));
+ SVN_ERR(wc_delete(&b, "X/A"));
+ SVN_ERR(wc_commit(&b, ""));
+
+ {
+ /* Interrupted switch from A@1 to X@3 */
+ nodes_row_t before[] = {
+ {0, "", "incomplete", 3, "X"},
+ {0, "A", "incomplete", 3, "X/A"},
+ {0, "A/B", "incomplete", 3, "X/A/B"},
+ {0, "A/B/C", "incomplete", 3, "X/A/B/C"},
+ {0, "B", "normal", 1, "A/B"},
+ {0, "B/C", "normal", 1, "A/B/C"},
+ {0, "B/C/D", "normal", 1, "A/B/C/D"},
+ {0}
+ };
+
+ nodes_row_t after_update[] = {
+ {0, "", "normal", 4, "X"},
+ {0, "B", "normal", 4, "A/B"},
+ {0, "B/C", "normal", 4, "A/B/C"},
+ {0, "B/C/D", "normal", 4, "A/B/C/D"},
+ {0}
+ };
+
+ SVN_ERR(insert_dirs(&b, before));
+ SVN_ERR(check_db_rows(&b, "", before));
+ SVN_ERR(wc_update(&b, "", 4));
+ SVN_ERR(check_db_rows(&b, "", after_update));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+nested_moves_child_first(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "nested_moves_child_first", opts, pool));
+
+ SVN_ERR(wc_mkdir(&b, "A"));
+ SVN_ERR(wc_mkdir(&b, "A/B"));
+ SVN_ERR(wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(wc_commit(&b, ""));
+ SVN_ERR(wc_update(&b, "", 1));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+ SVN_ERR(wc_move(&b, "A/B/C", "A/B/C2"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C", FALSE, "A/B/C2"},
+ {3, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {3, "A/B/C2", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+ SVN_ERR(wc_move(&b, "A/B", "A/B2"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B", FALSE, "A/B2"},
+ {0, "A/B/C", "normal", 1, "A/B/C", FALSE, "A/B2/C2"},
+ {2, "A/B", "base-deleted", NO_COPY_FROM},
+ {2, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {2, "A/B2", "normal", 1, "A/B", MOVED_HERE},
+ {2, "A/B2/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {3, "A/B2/C", "base-deleted", NO_COPY_FROM},
+ {3, "A/B2/C2", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+ SVN_ERR(wc_move(&b, "A", "A2"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A", FALSE, "A2"},
+ {0, "A/B", "normal", 1, "A/B", FALSE, "A2/B2"},
+ {0, "A/B/C", "normal", 1, "A/B/C", FALSE, "A2/B2/C2"},
+ {1, "A", "base-deleted", NO_COPY_FROM},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "A2/B/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {2, "A2/B", "base-deleted", NO_COPY_FROM},
+ {2, "A2/B/C", "base-deleted", NO_COPY_FROM},
+ {2, "A2/B2", "normal", 1, "A/B", MOVED_HERE},
+ {2, "A2/B2/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {3, "A2/B2/C", "base-deleted", NO_COPY_FROM},
+ {3, "A2/B2/C2","normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Revert should leave the A to A2 move */
+ SVN_ERR(wc_revert(&b, "A2/B2", svn_depth_infinity));
+ SVN_ERR(wc_revert(&b, "A2/B", svn_depth_infinity));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A", FALSE, "A2"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {1, "A", "base-deleted", NO_COPY_FROM},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "A2/B/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+nested_moves_child_last(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "nested_moves_child_last", opts, pool));
+
+ SVN_ERR(wc_mkdir(&b, "A"));
+ SVN_ERR(wc_mkdir(&b, "A/B"));
+ SVN_ERR(wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(wc_commit(&b, ""));
+ SVN_ERR(wc_update(&b, "", 1));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+ SVN_ERR(wc_move(&b, "A", "A2"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A", FALSE, "A2"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {1, "A", "base-deleted", NO_COPY_FROM},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "A2/B/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+ SVN_ERR(wc_move(&b, "A2/B", "A2/B2"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A", FALSE, "A2"},
+ {0, "A/B", "normal", 1, "A/B", FALSE, "A2/B2"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {1, "A", "base-deleted", NO_COPY_FROM},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "A2/B/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {2, "A2/B", "base-deleted", NO_COPY_FROM},
+ {2, "A2/B/C", "base-deleted", NO_COPY_FROM},
+ {2, "A2/B2", "normal", 1, "A/B", MOVED_HERE},
+ {2, "A2/B2/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+ SVN_ERR(wc_move(&b, "A2/B2/C", "A2/B2/C2"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A", FALSE, "A2"},
+ {0, "A/B", "normal", 1, "A/B", FALSE, "A2/B2"},
+ {0, "A/B/C", "normal", 1, "A/B/C", FALSE, "A2/B2/C2"},
+ {1, "A", "base-deleted", NO_COPY_FROM},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "A2/B/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {2, "A2/B", "base-deleted", NO_COPY_FROM},
+ {2, "A2/B/C", "base-deleted", NO_COPY_FROM},
+ {2, "A2/B2", "normal", 1, "A/B", MOVED_HERE},
+ {2, "A2/B2/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {3, "A2/B2/C", "base-deleted", NO_COPY_FROM},
+ {3, "A2/B2/C2","normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Revert should leave the A to A2 move */
+ SVN_ERR(wc_revert(&b, "A2/B2", svn_depth_infinity));
+ SVN_ERR(wc_revert(&b, "A2/B", svn_depth_infinity));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A", FALSE, "A2"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {1, "A", "base-deleted", NO_COPY_FROM},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "A2/B/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+move_in_copy(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "move_in_copy", opts, pool));
+
+ SVN_ERR(wc_mkdir(&b, "A"));
+ SVN_ERR(wc_mkdir(&b, "A/B"));
+ SVN_ERR(wc_commit(&b, ""));
+ SVN_ERR(wc_update(&b, "", 1));
+ SVN_ERR(wc_copy(&b, "A", "A2"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {1, "A2", "normal", 1, "A"},
+ {1, "A2/B", "normal", 1, "A/B"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+ SVN_ERR(wc_move(&b, "A2/B", "A2/B2")); /* ### Moved-here gets recorded, but
+ not moved-to. */
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {1, "A2", "normal", 1, "A"},
+ {1, "A2/B", "normal", 1, "A/B"},
+ {2, "A2/B", "base-deleted", NO_COPY_FROM},
+ {2, "A2/B2", "normal", 1, "A/B"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+move_in_replace(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "move_in_replace", opts, pool));
+
+ SVN_ERR(wc_mkdir(&b, "A"));
+ SVN_ERR(wc_mkdir(&b, "A/B"));
+ SVN_ERR(wc_mkdir(&b, "X"));
+ SVN_ERR(wc_mkdir(&b, "X/B"));
+ SVN_ERR(wc_commit(&b, ""));
+ SVN_ERR(wc_update(&b, "", 1));
+ SVN_ERR(wc_delete(&b, "A"));
+ SVN_ERR(wc_copy(&b, "X", "A"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "X", "normal", 1, "X"},
+ {0, "X/B", "normal", 1, "X/B"},
+ {1, "A", "normal", 1, "X"},
+ {1, "A/B", "normal", 1, "X/B"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+ SVN_ERR(wc_move(&b, "A/B", "A/B2")); /* ### Moved-to gets recorded on A/B
+ at op-depth=0, that's not the node
+ that got moved. */
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "X", "normal", 1, "X"},
+ {0, "X/B", "normal", 1, "X/B"},
+ {1, "A", "normal", 1, "X"},
+ {1, "A/B", "normal", 1, "X/B"},
+ {2, "A/B", "base-deleted", NO_COPY_FROM},
+ {2, "A/B2", "normal", 1, "X/B", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+copy_a_move(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "copy_a_move", opts, pool));
+
+ SVN_ERR(wc_mkdir(&b, "A"));
+ SVN_ERR(wc_mkdir(&b, "A/B"));
+ SVN_ERR(wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(wc_commit(&b, ""));
+ SVN_ERR(wc_update(&b, "", 1));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+ SVN_ERR(wc_move(&b, "A/B/C", "A/C2"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C", FALSE, "A/C2"},
+ {2, "A/C2", "normal", 1, "A/B/C", MOVED_HERE},
+ {3, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+ /* Copying a move doesn't copy any moved-to/here artifacts, which
+ means that moving inside a copy is not the same as copying
+ something that contains a move? Is this behaviour correct? */
+ SVN_ERR(wc_copy(&b, "A", "A2"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C", FALSE, "A/C2"},
+ {2, "A/C2", "normal", 1, "A/B/C", MOVED_HERE},
+ {3, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A"},
+ {1, "A2/B", "normal", 1, "A/B"},
+ {1, "A2/B/C", "normal", 1, "A/B/C"},
+ {2, "A2/C2", "normal", 1, "A/B/C"},
+ {3, "A2/B/C", "base-deleted", NO_COPY_FROM},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+move_to_swap(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "move_to_swap", opts, pool));
+
+ SVN_ERR(wc_mkdir(&b, "A"));
+ SVN_ERR(wc_mkdir(&b, "A/B"));
+ SVN_ERR(wc_mkdir(&b, "X"));
+ SVN_ERR(wc_mkdir(&b, "X/Y"));
+ SVN_ERR(wc_commit(&b, ""));
+ SVN_ERR(wc_update(&b, "", 1));
+
+ SVN_ERR(wc_move(&b, "A/B", "X/B"));
+ SVN_ERR(wc_move(&b, "X/Y", "A/Y"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B", FALSE, "X/B"},
+ {0, "X", "normal", 1, "X"},
+ {0, "X/Y", "normal", 1, "X/Y", FALSE, "A/Y"},
+ {2, "A/B", "base-deleted", NO_COPY_FROM},
+ {2, "A/Y", "normal", 1, "X/Y", MOVED_HERE},
+ {2, "X/Y", "base-deleted", NO_COPY_FROM},
+ {2, "X/B", "normal", 1, "A/B", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(wc_move(&b, "A", "A2"));
+ SVN_ERR(wc_move(&b, "X", "A"));
+ SVN_ERR(wc_move(&b, "A2", "X"));
+
+ /* Is this correct or should A/Y and X/B at op-depth=1 be marked
+ moved-here? */
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A", FALSE, "X"},
+ {0, "A/B", "normal", 1, "A/B", FALSE, "A/B"},
+ {0, "X", "normal", 1, "X", FALSE, "A"},
+ {0, "X/Y", "normal", 1, "X/Y", FALSE, "X/Y"},
+ {1, "A", "normal", 1, "X", MOVED_HERE},
+ {1, "A/Y", "normal", 1, "X/Y", MOVED_HERE},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "X", "normal", 1, "A", MOVED_HERE},
+ {1, "X/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "X/Y", "base-deleted", NO_COPY_FROM},
+ {2, "A/Y", "base-deleted", NO_COPY_FROM},
+ {2, "X/B", "base-deleted", NO_COPY_FROM},
+ {2, "A/B", "normal", 1, "A/B", MOVED_HERE},
+ {2, "X/Y", "normal", 1, "X/Y", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Revert and try in different order */
+ SVN_ERR(wc_revert(&b, "", svn_depth_infinity));
+
+ SVN_ERR(wc_move(&b, "A", "A2"));
+ SVN_ERR(wc_move(&b, "X", "A"));
+ SVN_ERR(wc_move(&b, "A2", "X"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A", FALSE, "X"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "X", "normal", 1, "X", FALSE, "A"},
+ {0, "X/Y", "normal", 1, "X/Y"},
+ {1, "A", "normal", 1, "X", MOVED_HERE},
+ {1, "A/Y", "normal", 1, "X/Y", MOVED_HERE},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "X", "normal", 1, "A", MOVED_HERE},
+ {1, "X/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "X/Y", "base-deleted", NO_COPY_FROM},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(wc_move(&b, "A/Y", "X/Y"));
+ SVN_ERR(wc_move(&b, "X/B", "A/B"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A", FALSE, "X"},
+ {0, "A/B", "normal", 1, "A/B", FALSE, "A/B"},
+ {0, "X", "normal", 1, "X", FALSE, "A"},
+ {0, "X/Y", "normal", 1, "X/Y", FALSE, "X/Y"},
+ {1, "A", "normal", 1, "X", MOVED_HERE},
+ {1, "A/Y", "normal", 1, "X/Y", MOVED_HERE},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "X", "normal", 1, "A", MOVED_HERE},
+ {1, "X/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "X/Y", "base-deleted", NO_COPY_FROM},
+ {2, "A/Y", "base-deleted", NO_COPY_FROM},
+ {2, "X/B", "base-deleted", NO_COPY_FROM},
+ {2, "A/B", "normal", 1, "A/B", MOVED_HERE},
+ {2, "X/Y", "normal", 1, "X/Y", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+revert_nested_move(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+ nodes_row_t nodes_A_moved[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A", FALSE, "A2"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {1, "A", "base-deleted", NO_COPY_FROM},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "A2/B/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ nodes_row_t nodes_AB_moved[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A", FALSE, "A2"},
+ {0, "A/B", "normal", 1, "A/B", FALSE, "A2/B2"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {1, "A", "base-deleted", NO_COPY_FROM},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "A2/B/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {2, "A2/B", "base-deleted", NO_COPY_FROM},
+ {2, "A2/B/C", "base-deleted", NO_COPY_FROM},
+ {2, "A2/B2", "normal", 1, "A/B", MOVED_HERE},
+ {2, "A2/B2/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ nodes_row_t nodes_ABC_moved[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A", FALSE, "A2"},
+ {0, "A/B", "normal", 1, "A/B", FALSE, "A2/B2"},
+ {0, "A/B/C", "normal", 1, "A/B/C", FALSE, "A2/B2/C2"},
+ {1, "A", "base-deleted", NO_COPY_FROM},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "A2/B/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {2, "A2/B", "base-deleted", NO_COPY_FROM},
+ {2, "A2/B/C", "base-deleted", NO_COPY_FROM},
+ {2, "A2/B2", "normal", 1, "A/B", MOVED_HERE},
+ {2, "A2/B2/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {3, "A2/B2/C", "base-deleted", NO_COPY_FROM},
+ {3, "A2/B2/C2", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+
+ SVN_ERR(svn_test__sandbox_create(&b, "revert_nested_move", opts, pool));
+
+ SVN_ERR(wc_mkdir(&b, "A"));
+ SVN_ERR(wc_mkdir(&b, "A/B"));
+ SVN_ERR(wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(wc_commit(&b, ""));
+ SVN_ERR(wc_update(&b, "", 1));
+
+ SVN_ERR(wc_move(&b, "A", "A2"));
+ SVN_ERR(check_db_rows(&b, "", nodes_A_moved));
+
+ SVN_ERR(wc_move(&b, "A2/B", "A2/B2"));
+ SVN_ERR(check_db_rows(&b, "", nodes_AB_moved));
+
+ SVN_ERR(wc_move(&b, "A2/B2/C", "A2/B2/C2"));
+ SVN_ERR(check_db_rows(&b, "", nodes_ABC_moved));
+
+ SVN_ERR(wc_revert(&b, "A2/B", svn_depth_infinity));
+ SVN_ERR(wc_revert(&b, "A2/B2", svn_depth_infinity));
+ SVN_ERR(check_db_rows(&b, "", nodes_A_moved));
+
+ SVN_ERR(wc_move(&b, "A2/B", "A2/B2"));
+ SVN_ERR(wc_move(&b, "A2/B2/C", "A2/B2/C2"));
+ SVN_ERR(check_db_rows(&b, "", nodes_ABC_moved));
+
+ SVN_ERR(wc_revert(&b, "A2/B2/C", svn_depth_infinity));
+ SVN_ERR(wc_revert(&b, "A2/B2/C2", svn_depth_infinity));
+ SVN_ERR(check_db_rows(&b, "", nodes_AB_moved));
+
+ SVN_ERR(wc_revert(&b, "A2/B", svn_depth_infinity));
+ SVN_ERR(wc_revert(&b, "A2/B2", svn_depth_infinity));
+ SVN_ERR(check_db_rows(&b, "", nodes_A_moved));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+move_on_move(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "move_on_move", opts, pool));
+
+ SVN_ERR(wc_mkdir(&b, "A"));
+ SVN_ERR(wc_mkdir(&b, "A/B"));
+ SVN_ERR(wc_mkdir(&b, "X"));
+ SVN_ERR(wc_mkdir(&b, "X/B"));
+ SVN_ERR(wc_commit(&b, ""));
+ SVN_ERR(wc_update(&b, "", 1));
+
+ SVN_ERR(wc_move(&b, "A/B", "B2"));
+ SVN_ERR(wc_delete(&b, "A"));
+ SVN_ERR(wc_copy(&b, "X", "A"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B", FALSE, "B2"},
+ {0, "X", "normal", 1, "X"},
+ {0, "X/B", "normal", 1, "X/B"},
+ {1, "B2", "normal", 1, "A/B", MOVED_HERE},
+ {1, "A", "normal", 1, "X"},
+ {1, "A/B", "normal", 1, "X/B"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* A/B to B2 is already recorded in A/B but the copy has given us
+ another A/B that we can move. A second move overwites the first
+ move stored in A/B even though it's a different node being moved,
+ and that breaks the recording of the move to B2. */
+ SVN_ERR(wc_move(&b, "A/B", "B3"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B", FALSE, "B2"}, /* XFAIL */
+ {0, "X", "normal", 1, "X"},
+ {0, "X/B", "normal", 1, "X/B"},
+ {1, "B2", "normal", 1, "A/B", MOVED_HERE},
+ {1, "B3", "normal", 1, "X/B", MOVED_HERE},
+ {1, "A", "normal", 1, "X"},
+ {1, "A/B", "normal", 1, "X/B"}, /* moved_to=B3? */
+ {2, "A/B", "base-deleted", NO_COPY_FROM},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+move_on_move2(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "move_on_move2", opts, pool));
+
+ SVN_ERR(wc_mkdir(&b, "A"));
+ SVN_ERR(wc_mkdir(&b, "A/B"));
+ SVN_ERR(wc_mkdir(&b, "X"));
+ SVN_ERR(wc_mkdir(&b, "X/B"));
+ SVN_ERR(wc_commit(&b, ""));
+ SVN_ERR(wc_update(&b, "", 1));
+
+ SVN_ERR(wc_move(&b, "A", "A2"));
+ SVN_ERR(wc_delete(&b, "A"));
+ SVN_ERR(wc_copy(&b, "X", "A"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A", FALSE, "A2"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "X", "normal", 1, "X"},
+ {0, "X/B", "normal", 1, "X/B"},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "A", "normal", 1, "X"},
+ {1, "A/B", "normal", 1, "X/B"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* A/B is already moved to A2/B but there is no explicit moved_to,
+ we derive it from A. The copy has given us another A/B that we
+ can move doing so stores explicit moved_to in A/B that breaks the
+ recording of the first move to A2/B. */
+ SVN_ERR(wc_move(&b, "A/B", "B3"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A", FALSE, "A2"},
+ {0, "A/B", "normal", 1, "A/B"}, /* XFAIL */
+ {0, "X", "normal", 1, "X"},
+ {0, "X/B", "normal", 1, "X/B"},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "B3", "normal", 1, "X/B", MOVED_HERE},
+ {1, "A", "normal", 1, "X"},
+ {1, "A/B", "normal", 1, "X/B"}, /* moved_to=B3? */
+ {2, "A/B", "base-deleted", NO_COPY_FROM},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+move_added(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "move_added", opts, pool));
+
+ SVN_ERR(wc_mkdir(&b, "A"));
+ SVN_ERR(wc_mkdir(&b, "A/B"));
+ SVN_ERR(wc_commit(&b, ""));
+ SVN_ERR(wc_update(&b, "", 1));
+
+ SVN_ERR(wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(wc_move(&b, "A", "A2"));
+ SVN_ERR(wc_mkdir(&b, "A2/B/C2"));
+
+ /* Both A2/B/C and A2/B/C2 are simple adds inside the move. It
+ doesn't seem right for A2/B/C to be marked moved_here. */
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A", FALSE, "A2"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {1, "A", "base-deleted", NO_COPY_FROM},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {3, "A2/B/C", "normal", NO_COPY_FROM}, /* XFAIL */
+ {3, "A2/B/C2", "normal", NO_COPY_FROM},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+
+
/* ---------------------------------------------------------------------- */
/* The list of test functions */
@@ -3451,7 +4514,7 @@ struct svn_test_descriptor_t test_funcs[
"test_op_delete"),
SVN_TEST_OPTS_PASS(test_child_replace_with_same_origin,
"test_child_replace_with_same"),
- SVN_TEST_OPTS_PASS(test_shadowed_update,
+ SVN_TEST_OPTS_XFAIL(test_shadowed_update,
"test_shadowed_update"),
SVN_TEST_OPTS_PASS(test_copy_of_deleted,
"test_copy_of_deleted (issue #3873)"),
@@ -3463,5 +4526,35 @@ struct svn_test_descriptor_t test_funcs[
SVN_TEST_OPTS_XFAIL(test_case_rename,
"test_case_rename on case (in)sensitive system"),
#endif
+ SVN_TEST_OPTS_PASS(commit_file_external,
+ "commit_file_external (issue #4002)"),
+ SVN_TEST_OPTS_PASS(revert_file_externals,
+ "revert_file_externals"),
+ SVN_TEST_OPTS_PASS(copy_file_externals,
+ "copy_file_externals"),
+ SVN_TEST_OPTS_PASS(copy_wc_wc_absent,
+ "test_wc_wc_copy_absent"),
+ SVN_TEST_OPTS_PASS(incomplete_switch,
+ "incomplete_switch (issue 4040)"),
+ SVN_TEST_OPTS_PASS(nested_moves_child_first,
+ "nested_moves_child_first"),
+ SVN_TEST_OPTS_PASS(nested_moves_child_last,
+ "nested_moves_child_last"),
+ SVN_TEST_OPTS_XFAIL(move_in_copy,
+ "move_in_copy"),
+ SVN_TEST_OPTS_XFAIL(move_in_replace,
+ "move_in_replace"),
+ SVN_TEST_OPTS_PASS(copy_a_move,
+ "copy_a_move"),
+ SVN_TEST_OPTS_PASS(move_to_swap,
+ "move_to_swap"),
+ SVN_TEST_OPTS_PASS(revert_nested_move,
+ "revert_nested_move"),
+ SVN_TEST_OPTS_XFAIL(move_on_move,
+ "move_on_move"),
+ SVN_TEST_OPTS_XFAIL(move_on_move2,
+ "move_on_move2"),
+ SVN_TEST_OPTS_XFAIL(move_added,
+ "move_added"),
SVN_TEST_NULL
};
Modified: subversion/branches/revprop-packing/subversion/tests/svn_test_fs.c
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/tests/svn_test_fs.c?rev=1231318&r1=1231317&r2=1231318&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/tests/svn_test_fs.c (original)
+++ subversion/branches/revprop-packing/subversion/tests/svn_test_fs.c Fri Jan 13 21:40:26 2012
@@ -255,7 +255,7 @@ svn_test__stream_to_string(svn_stringbuf
of priorities today, though. */
apr_size_t len;
- svn_stringbuf_t *str = svn_stringbuf_create("", pool);
+ svn_stringbuf_t *str = svn_stringbuf_create_empty(pool);
do
{
@@ -446,7 +446,7 @@ svn_test__validate_tree(svn_fs_root_t *r
{
/* If we don't have a corrupt entries string, make one. */
if (! corrupt_entries)
- corrupt_entries = svn_stringbuf_create("", subpool);
+ corrupt_entries = svn_stringbuf_create_empty(subpool);
/* Append this entry name to the list of corrupt entries. */
svn_stringbuf_appendcstr(corrupt_entries, " ");
@@ -462,7 +462,7 @@ svn_test__validate_tree(svn_fs_root_t *r
{
/* If we don't have a missing entries string, make one. */
if (! missing_entries)
- missing_entries = svn_stringbuf_create("", subpool);
+ missing_entries = svn_stringbuf_create_empty(subpool);
/* Append this entry name to the list of missing entries. */
svn_stringbuf_appendcstr(missing_entries, " ");
@@ -485,7 +485,7 @@ svn_test__validate_tree(svn_fs_root_t *r
/* If we don't have an extra entries string, make one. */
if (! extra_entries)
- extra_entries = svn_stringbuf_create("", subpool);
+ extra_entries = svn_stringbuf_create_empty(subpool);
/* Append this entry name to the list of missing entries. */
svn_stringbuf_appendcstr(extra_entries, " ");
Modified: subversion/branches/revprop-packing/subversion/tests/svn_test_main.c
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/tests/svn_test_main.c?rev=1231318&r1=1231317&r2=1231318&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/tests/svn_test_main.c (original)
+++ subversion/branches/revprop-packing/subversion/tests/svn_test_main.c Fri Jan 13 21:40:26 2012
@@ -53,13 +53,6 @@ const char **test_argv;
/* Test option: Print more output */
static svn_boolean_t verbose_mode = FALSE;
-/* Test option: Trap SVN_ERR_ASSERT failures in the code under test. Default
- * is false so the test can easily be run in a debugger with the debugger
- * catching the assertion failure. Test suites should enable this in order
- * to be able to continue with other sub-tests and report the results even
- * when a test hits an assertion failure. */
-static svn_boolean_t trap_assertion_failures = FALSE;
-
/* Test option: Print only unexpected results */
static svn_boolean_t quiet_mode = FALSE;
@@ -79,7 +72,6 @@ enum {
fstype_opt,
list_opt,
verbose_opt,
- trap_assert_opt,
quiet_opt,
config_opt,
server_minor_version_opt,
@@ -106,8 +98,6 @@ static const apr_getopt_option_t cl_opti
{"server-minor-version", server_minor_version_opt, 1,
N_("set the minor version for the server ('3', '4',\n"
"'5', or '6')")},
- {"trap-assertion-failures", trap_assert_opt, 0,
- N_("catch and report SVN_ERR_ASSERT failures")},
{"quiet", quiet_opt, 0,
N_("print only unexpected results")},
{"allow-segfaults", allow_segfault_opt, 0,
@@ -462,9 +452,6 @@ main(int argc, const char *argv[])
case verbose_opt:
verbose_mode = TRUE;
break;
- case trap_assert_opt:
- trap_assertion_failures = TRUE;
- break;
case quiet_opt:
quiet_mode = TRUE;
break;
@@ -506,7 +493,7 @@ main(int argc, const char *argv[])
cleanup_pool = svn_pool_create(pool);
test_pool = svn_pool_create(pool);
- if (trap_assertion_failures)
+ if (!allow_segfaults)
svn_error_set_malfunction_handler(svn_error_raise_on_malfunction);
if (argc >= 2) /* notice command-line arguments */
Modified: subversion/branches/revprop-packing/tools/buildbot/slaves/win32-SharpSvn/svntest-cleanup.cmd
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/tools/buildbot/slaves/win32-SharpSvn/svntest-cleanup.cmd?rev=1231318&r1=1231317&r2=1231318&view=diff
==============================================================================
--- subversion/branches/revprop-packing/tools/buildbot/slaves/win32-SharpSvn/svntest-cleanup.cmd (original)
+++ subversion/branches/revprop-packing/tools/buildbot/slaves/win32-SharpSvn/svntest-cleanup.cmd Fri Jan 13 21:40:26 2012
@@ -32,7 +32,7 @@ IF NOT EXIST "imports\" (
)
IF NOT EXIST build\imports.done (
copy /y imports\dev-default.build default.build
- nant build %NANTARGS%
+ nant prep-dev %NANTARGS%
IF ERRORLEVEL 1 (
exit /B 1
)
@@ -54,6 +54,7 @@ taskkill /im svnserve.exe /f 2> nul:
taskkill /im svnrdump.exe /f 2> nul:
taskkill /im svnsync.exe /f 2> nul:
taskkill /im httpd.exe /f 2> nul:
+taskkill /im op-depth-test.exe /f 2> nul:
IF EXIST "%TESTDIR%\tests\subversion\tests\cmdline\httpd\" (
rmdir /s /q "%TESTDIR%\tests\subversion\tests\cmdline\httpd"
)
Modified: subversion/branches/revprop-packing/tools/client-side/bash_completion
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/tools/client-side/bash_completion?rev=1231318&r1=1231317&r2=1231318&view=diff
==============================================================================
--- subversion/branches/revprop-packing/tools/client-side/bash_completion (original)
+++ subversion/branches/revprop-packing/tools/client-side/bash_completion Fri Jan 13 21:40:26 2012
@@ -167,7 +167,7 @@ _svn()
cmds="$cmds info list ls lock log merge mergeinfo mkdir move mv rename"
cmds="$cmds patch propdel pdel propedit pedit propget pget proplist"
cmds="$cmds plist propset pset relocate resolve resolved revert status"
- cmds="$cmds switch unlock update"
+ cmds="$cmds switch unlock update upgrade"
# help options have a strange command status...
local helpOpts='--help -h'
@@ -182,7 +182,7 @@ _svn()
optsParam="$optsParam|--old|--new|--config-dir|--config-option"
optsParam="$optsParam|--native-eol|-l|--limit|-c|--change"
optsParam="$optsParam|--depth|--set-depth|--with-revprop"
- optsParam="$optsParam|--changelist|--accept|--show-revs"
+ optsParam="$optsParam|--cl|--changelist|--accept|--show-revs"
# svn:* and other (env SVN_BASH_*_PROPS) properties
local svnProps revProps allProps psCmds propCmds
@@ -788,12 +788,14 @@ _svn()
fi
# otherwise build possible options for the command
- pOpts="--username --password --no-auth-cache --non-interactive"
+ pOpts="--username --password --no-auth-cache --non-interactive \
+ --trust-server-cert"
mOpts="-m --message -F --file --encoding --force-log --with-revprop"
rOpts="-r --revision"
qOpts="-q --quiet"
nOpts="-N --non-recursive --depth"
gOpts="-g --use-merge-history"
+ cOpts="--cl --changelist"
cmdOpts=
case $cmd in
@@ -812,22 +814,23 @@ _svn()
cmdOpts="$rOpts $pOpts"
;;
changelist|cl)
- cmdOpts="--targets $pOpts $qOpts --changelist \
+ cmdOpts="--targets $pOpts $qOpts $cOpts \
-R --recursive --depth --remove"
;;
checkout|co)
cmdOpts="$rOpts $qOpts $nOpts $pOpts --ignore-externals \
- --force --accept"
+ --force"
;;
cleanup)
cmdOpts="--diff3-cmd $pOpts"
;;
commit|ci)
cmdOpts="$mOpts $qOpts $nOpts --targets --editor-cmd $pOpts \
- --no-unlock --changelist --keep-changelists"
+ --no-unlock $cOpts --keep-changelists"
;;
copy|cp)
- cmdOpts="$mOpts $rOpts $qOpts --editor-cmd $pOpts --parents"
+ cmdOpts="$mOpts $rOpts $qOpts --editor-cmd $pOpts --parents \
+ --ignore-externals"
;;
delete|del|remove|rm)
cmdOpts="--force $mOpts $qOpts --targets --editor-cmd $pOpts \
@@ -836,11 +839,12 @@ _svn()
diff|di)
cmdOpts="$rOpts -x --extensions --diff-cmd --no-diff-deleted \
$nOpts $pOpts --force --old --new --notice-ancestry \
- -c --change --summarize --changelist --xml --svnpatch"
+ -c --change --summarize $cOpts --xml --git \
+ --internal-diff --show-copies-as-adds"
;;
export)
cmdOpts="$rOpts $qOpts $pOpts $nOpts --force --native-eol \
- --ignore-externals"
+ --ignore-externals --ignore-keywords"
;;
help|h|\?)
cmdOpts=
@@ -851,7 +855,7 @@ _svn()
;;
info)
cmdOpts="$pOpts $rOpts --targets -R --recursive --depth \
- --incremental --xml --changelist"
+ --incremental --xml $cOpts"
;;
list|ls)
cmdOpts="$rOpts -v --verbose -R --recursive $pOpts \
@@ -864,15 +868,18 @@ _svn()
log)
cmdOpts="$rOpts -v --verbose --targets $pOpts --stop-on-copy \
--incremental --xml $qOpts -l --limit -c --change \
- $gOpts --with-all-revprops --with-revprop"
+ $gOpts --with-all-revprops --with-revprop --depth \
+ --diff --diff-cmd -x --extensions --internal-diff \
+ --with-no-revprops"
;;
merge)
cmdOpts="$rOpts $nOpts $qOpts --force --dry-run --diff3-cmd \
$pOpts --ignore-ancestry -c --change -x --extensions \
- --record-only --accept --reintegrate"
+ --record-only --accept --reintegrate \
+ --allow-mixed-revisions"
;;
mergeinfo)
- cmdOpts="$rOpts $pOpts --show-revs"
+ cmdOpts="$rOpts $pOpts --depth --show-revs -R --recursive"
;;
mkdir)
cmdOpts="$mOpts $qOpts --editor-cmd $pOpts --parents"
@@ -882,10 +889,10 @@ _svn()
--parents"
;;
patch)
- cmdOpts="$qOpts --force"
+ cmdOpts="$qOpts $pOpts --dry-run --ignore-whitespace --reverse-diff --strip"
;;
propdel|pdel|pd)
- cmdOpts="$qOpts -R --recursive $rOpts $pOpts --changelist \
+ cmdOpts="$qOpts -R --recursive $rOpts $pOpts $cOpts \
--depth"
[[ $isRevProp || ! $prop ]] && cmdOpts="$cmdOpts --revprop"
;;
@@ -895,23 +902,23 @@ _svn()
cmdOpts="$cmdOpts --revprop $rOpts"
;;
propget|pget|pg)
- cmdOpts="-v --verbose -R --recursive $rOpts --strict $pOpts --changelist \
+ cmdOpts="-v --verbose -R --recursive $rOpts --strict $pOpts $cOpts \
--depth --xml"
[[ $isRevProp || ! $prop ]] && cmdOpts="$cmdOpts --revprop"
;;
proplist|plist|pl)
cmdOpts="-v --verbose -R --recursive $rOpts --revprop $qOpts \
- $pOpts --changelist --depth --xml"
+ $pOpts $cOpts --depth --xml"
;;
propset|pset|ps)
cmdOpts="$qOpts --targets -R --recursive \
- --encoding $pOpts --force --changelist --depth"
+ --encoding $pOpts --force $cOpts --depth"
[[ $isRevProp || ! $prop ]] && \
cmdOpts="$cmdOpts --revprop $rOpts"
[[ $val ]] || cmdOpts="$cmdOpts -F --file"
;;
relocate)
- cmdOpts="--ignore-externals"
+ cmdOpts="--ignore-externals $pOpts"
;;
resolve)
cmdOpts="--targets -R --recursive $qOpts $pOpts --accept \
@@ -921,25 +928,29 @@ _svn()
cmdOpts="--targets -R --recursive $qOpts $pOpts --depth"
;;
revert)
- cmdOpts="--targets -R --recursive $qOpts --changelist \
+ cmdOpts="--targets -R --recursive $qOpts $cOpts \
--depth $pOpts"
;;
status|stat|st)
cmdOpts="-u --show-updates -v --verbose $nOpts $qOpts $pOpts \
--no-ignore --ignore-externals --incremental --xml \
- --changelist"
+ $cOpts"
;;
switch|sw)
cmdOpts="--relocate $rOpts $nOpts $qOpts $pOpts --diff3-cmd \
- --force --accept --ignore-externals --set-depth"
+ --force --accept --ignore-externals --set-depth \
+ --ignore-ancestry"
;;
unlock)
cmdOpts="--targets --force $pOpts"
;;
update|up)
cmdOpts="$rOpts $nOpts $qOpts $pOpts --diff3-cmd \
- --ignore-externals --force --accept --changelist \
- --editor-cmd --set-depth"
+ --ignore-externals --force --accept $cOpts \
+ --parents --editor-cmd --set-depth"
+ ;;
+ upgrade)
+ cmdOpts="$qOpts $pOpts"
;;
*)
;;
Modified: subversion/branches/revprop-packing/tools/client-side/bash_completion_test
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/tools/client-side/bash_completion_test?rev=1231318&r1=1231317&r2=1231318&view=diff
==============================================================================
--- subversion/branches/revprop-packing/tools/client-side/bash_completion_test (original)
+++ subversion/branches/revprop-packing/tools/client-side/bash_completion_test Fri Jan 13 21:40:26 2012
@@ -116,7 +116,7 @@ get_svn_options() {
{ svn help "$1" |
# Find the relevant lines; remove "arg" and description.
sed -n -e '1,/^Valid options:$/d;/^ -/!d' \
- -e 's/\( arg\)* * : .*//;p' |
+ -e 's/\( ARG\)* * : .*//;p' |
# Remove brackets; put each word on its own line.
tr -d '] ' | tr '[' '\n'
# The following options are always accepted but not listed in the help
Modified: subversion/branches/revprop-packing/tools/client-side/svn-ssl-fingerprints.sh
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/tools/client-side/svn-ssl-fingerprints.sh?rev=1231318&r1=1231317&r2=1231318&view=diff
==============================================================================
--- subversion/branches/revprop-packing/tools/client-side/svn-ssl-fingerprints.sh (original)
+++ subversion/branches/revprop-packing/tools/client-side/svn-ssl-fingerprints.sh Fri Jan 13 21:40:26 2012
@@ -28,6 +28,6 @@
CONFIG_DIR=${1-$HOME/.subversion}
for i in $CONFIG_DIR/auth/svn.ssl.server/????????????????????????????????; do
grep :// $i
- grep '.\{80\}' $i | sed 's/\(.\{64\}\)/\1\n/g' | openssl base64 -d | openssl x509 -inform der -noout -fingerprint | sed 's/=/\n/'
+ grep '.\{80\}' $i | sed 's/\(.\{64\}\)/\1 /g' | xargs -n1 | openssl base64 -d | openssl x509 -inform der -noout -fingerprint | sed 's/=/ /' | xargs -n1
echo
done
Modified: subversion/branches/revprop-packing/tools/client-side/svn-viewspec.py
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/tools/client-side/svn-viewspec.py?rev=1231318&r1=1231317&r2=1231318&view=diff
==============================================================================
--- subversion/branches/revprop-packing/tools/client-side/svn-viewspec.py (original)
+++ subversion/branches/revprop-packing/tools/client-side/svn-viewspec.py Fri Jan 13 21:40:26 2012
@@ -20,6 +20,8 @@
# ====================================================================
"""\
+__SCRIPTNAME__: checkout utility for sparse Subversion working copies
+
Usage: 1. __SCRIPTNAME__ checkout VIEWSPEC-FILE TARGET-DIR
2. __SCRIPTNAME__ examine VIEWSPEC-FILE
3. __SCRIPTNAME__ help
Modified: subversion/branches/revprop-packing/tools/client-side/svnmucc/svnmucc.c
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/tools/client-side/svnmucc/svnmucc.c?rev=1231318&r1=1231317&r2=1231318&view=diff
==============================================================================
--- subversion/branches/revprop-packing/tools/client-side/svnmucc/svnmucc.c (original)
+++ subversion/branches/revprop-packing/tools/client-side/svnmucc/svnmucc.c Fri Jan 13 21:40:26 2012
@@ -109,6 +109,7 @@ create_ra_callbacks(svn_ra_callbacks2_t
const char *username,
const char *password,
const char *config_dir,
+ svn_config_t *cfg_config,
svn_boolean_t non_interactive,
svn_boolean_t no_auth_cache,
apr_pool_t *pool)
@@ -119,7 +120,8 @@ create_ra_callbacks(svn_ra_callbacks2_t
non_interactive,
username, password, config_dir,
no_auth_cache,
- FALSE, NULL, NULL, NULL, pool));
+ FALSE /* trust_server_certs */,
+ cfg_config, NULL, NULL, pool));
(*callbacks)->open_tmp_file = open_tmp_file;
@@ -366,10 +368,7 @@ get_operation(const char *path,
static const char *
subtract_anchor(const char *anchor, const char *url, apr_pool_t *pool)
{
- if (! strcmp(url, anchor))
- return "";
- else
- return svn_uri__is_child(anchor, url, pool);
+ return svn_uri_skip_ancestor(anchor, url, pool);
}
/* Add PATH to the operations tree rooted at OPERATION, creating any
@@ -632,13 +631,17 @@ execute(const apr_array_header_t *action
struct operation root;
svn_error_t *err;
apr_hash_t *config;
+ svn_config_t *cfg_config;
int i;
SVN_ERR(svn_config_get_config(&config, config_dir, pool));
SVN_ERR(svn_cmdline__apply_config_options(config, config_options,
"svnmucc: ", "--config-option"));
+ cfg_config = apr_hash_get(config, SVN_CONFIG_CATEGORY_CONFIG,
+ APR_HASH_KEY_STRING);
SVN_ERR(create_ra_callbacks(&ra_callbacks, username, password, config_dir,
- non_interactive, no_auth_cache, pool));
+ cfg_config, non_interactive, no_auth_cache,
+ pool));
SVN_ERR(svn_ra_open4(&session, NULL, anchor, NULL, ra_callbacks,
NULL, config, pool));
Modified: subversion/branches/revprop-packing/tools/dev/benchmarks/suite1/benchmark.py
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/tools/dev/benchmarks/suite1/benchmark.py?rev=1231318&r1=1231317&r2=1231318&view=diff
==============================================================================
--- subversion/branches/revprop-packing/tools/dev/benchmarks/suite1/benchmark.py (original)
+++ subversion/branches/revprop-packing/tools/dev/benchmarks/suite1/benchmark.py Fri Jan 13 21:40:26 2012
@@ -141,7 +141,7 @@ class Timings:
return '\n'.join(s)
- def compare_to(self, other):
+ def compare_to(self, other, verbose):
def do_div(a, b):
if b:
return float(a) / float(b)
@@ -170,7 +170,10 @@ class Timings:
% (' ' * len(TOTAL_RUN), selftotal, selfname))
- s.append(' min max avg operation')
+ if not verbose:
+ s.append(' avg operation')
+ else:
+ s.append(' min max avg operation')
names = sorted(self.timings.keys())
@@ -182,23 +185,18 @@ class Timings:
min_me, max_me, avg_me = self.min_max_avg(name)
min_other, max_other, avg_other = other.min_max_avg(name)
- s.append('%-16s %-16s %-16s %s' % (
- '%7.2f|%+7.3f' % (
- do_div(min_me, min_other),
- do_diff(min_me, min_other)
- ),
-
- '%7.2f|%+7.3f' % (
- do_div(max_me, max_other),
- do_diff(max_me, max_other)
- ),
-
- '%7.2f|%+7.3f' % (
- do_div(avg_me, avg_other),
- do_diff(avg_me, avg_other)
- ),
+ avg_str = '%7.2f|%+7.3f' % (do_div(avg_me, avg_other),
+ do_diff(avg_me, avg_other))
- name))
+ if not verbose:
+ s.append('%-16s %s' % (avg_str, name))
+ else:
+ min_str = '%7.2f|%+7.3f' % (do_div(min_me, min_other),
+ do_diff(min_me, min_other))
+ max_str = '%7.2f|%+7.3f' % (do_div(max_me, max_other),
+ do_diff(max_me, max_other))
+
+ s.append('%-16s %-16s %-16s %s' % (min_str, max_str, avg_str, name))
s.extend([
'(legend: "1.23|+0.45" means: slower by factor 1.23 and by 0.45 seconds;',
@@ -296,6 +294,9 @@ def up(*args):
def st(*args):
return svn('status', *args)
+def info(*args):
+ return svn('info', *args)
+
_chars = [chr(x) for x in range(ord('a'), ord('z') +1)]
def randstr(len=8):
@@ -444,6 +445,7 @@ def run(levels, spread, N):
ci(wc)
up(wc)
st(wc)
+ info('-R', wc)
trunk_url = file_url + '/trunk'
branch_url = file_url + '/branch'
@@ -453,6 +455,7 @@ def run(levels, spread, N):
up(wc)
st(wc)
+ info('-R', wc)
svn('checkout', trunk_url, wc2)
st(wc2)
@@ -465,6 +468,7 @@ def run(levels, spread, N):
svn('switch', branch_url, wc2)
modify_tree(wc2, 0.5)
st(wc2)
+ info('-R', wc2)
ci(wc2)
up(wc2)
up(wc)
@@ -477,10 +481,12 @@ def run(levels, spread, N):
svn('merge', '--accept=postpone', trunk_url, wc2)
st(wc2)
+ info('-R', wc2)
svn('resolve', '--accept=mine-conflict', wc2)
st(wc2)
svn('resolved', '-R', wc2)
st(wc2)
+ info('-R', wc2)
ci(wc2)
up(wc2)
up(wc)
@@ -542,11 +548,12 @@ def cmd_compare(path1, path2):
t1 = read_from_file(path1)
t2 = read_from_file(path2)
- print t1.summary()
- print '---'
- print t2.summary()
- print '---'
- print t2.compare_to(t1)
+ if options.verbose:
+ print t1.summary()
+ print '---'
+ print t2.summary()
+ print '---'
+ print t2.compare_to(t1, options.verbose)
def cmd_combine(dest, *paths):
total = Timings('--version');
Modified: subversion/branches/revprop-packing/tools/dev/benchmarks/suite1/cronjob
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/tools/dev/benchmarks/suite1/cronjob?rev=1231318&r1=1231317&r2=1231318&view=diff
==============================================================================
--- subversion/branches/revprop-packing/tools/dev/benchmarks/suite1/cronjob (original)
+++ subversion/branches/revprop-packing/tools/dev/benchmarks/suite1/cronjob Fri Jan 13 21:40:26 2012
@@ -1,9 +1,35 @@
#!/bin/bash
+#
+# ====================================================================
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ====================================================================
+#
# This is the cronjob as run on our ASF box aka svn-qavm.
# It uses neels' mad bash script magic called 'pat' to update and
# build the latest trunk, invokes a benchmark and sends as mail.
+#
+# A word on 'pat': this is a grown-out-of-proportions bash script that holds
+# all the small and large tasks that I do while developing on Subversion.
+# While it works for me, it's not particularly beautifully coded --
+# wouldn't publish it in Subversion's trunk, but if you want to find out
+# what it does: http://hofmeyr.de/pat/
-#EMAILS=your@email.addresses
+#EMAILS=your@ema.il add@ress.es
EMAILS=""
if [ "$USER" = "neels" ]; then
@@ -32,14 +58,14 @@ if [ "$?" -ne "0" ]; then
echo "$subject"
else
- rev="$(svn info /home/neels/pat/trunk/src | grep Revision)"
+ rev="$(/home/neels/pat/stable/prefix/bin/svn info /home/neels/pat/trunk/src | grep Revision)"
if [ -z "$rev" ]; then
subject="Working copy problem."
echo "$subject" > "$results"
echo "$subject"
else
- /home/neels/bin/pat remake
+ NONMAINTAINER=1 /home/neels/bin/pat remake
if [ "$?" -ne "0" ]; then
subject="Failed to build $rev."
echo "$subject" > "$results"
Modified: subversion/branches/revprop-packing/tools/dev/benchmarks/suite1/run
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/tools/dev/benchmarks/suite1/run?rev=1231318&r1=1231317&r2=1231318&view=diff
==============================================================================
--- subversion/branches/revprop-packing/tools/dev/benchmarks/suite1/run (original)
+++ subversion/branches/revprop-packing/tools/dev/benchmarks/suite1/run Fri Jan 13 21:40:26 2012
@@ -18,17 +18,10 @@
# under the License.
# Where are the svn binaries you want to benchmark?
-if [ "$USER" = "neels" ]; then
- SVN_A_NAME="1.7.x"
- SVN_A="$HOME/pat/bench/prefix/bin/svn"
- SVN_B_NAME="trunk"
- SVN_B="$HOME/pat/trunk/prefix/bin/svn"
-else
- SVN_A_NAME="1.6"
- SVN_A="$HOME/src/svn-1.6.x/subversion/svn/svn"
- SVN_B_NAME="trunk"
- SVN_B="$HOME/src/svn/subversion/svn/svn"
-fi
+SVN_A_NAME="1.7.x"
+SVN_A="$HOME/pat/bench/prefix/bin/svn"
+SVN_B_NAME="trunk"
+SVN_B="$HOME/pat/trunk/prefix/bin/svn"
benchmark="$PWD/benchmark.py"
@@ -44,13 +37,8 @@ batch(){
spread="$2"
N="$3"
pre="${levels}x${spread}_"
- echo
- echo "---------------------------------------------------------------------"
- echo
- echo "Results for dir levels: $levels spread: $spread"
"$benchmark" "--svn=$SVN_A" run "${pre}$SVN_A_NAME" $levels $spread $N >/dev/null
"$benchmark" "--svn=$SVN_B" run "${pre}$SVN_B_NAME" $levels $spread $N >/dev/null
- "$benchmark" compare "${pre}$SVN_A_NAME" "${pre}$SVN_B_NAME"
}
N=6
@@ -75,22 +63,49 @@ cs=100
{
started="$(date)"
echo "Started at $started"
-echo ""
+
+echo "
+*Disclaimer:* this tests only file://-URL access on a GNU/Linux VM.
+This is intended to measure changes in performance of the local working
+copy layer, *only*. These results are *not* generally true for everyone."
batch $al $as $N
batch $bl $bs $N
batch $cl $cs $N
-echo ""
-echo =========================================================================
-echo ""
"$benchmark" combine "total_$SVN_A_NAME" *x*"_$SVN_A_NAME" >/dev/null
"$benchmark" combine "total_$SVN_B_NAME" *x*"_$SVN_B_NAME" >/dev/null
-echo "comparing averaged totals..."
+echo ""
+echo "Averaged-total results across all runs:"
+echo "---------------------------------------"
+echo ""
"$benchmark" compare "total_$SVN_A_NAME" "total_$SVN_B_NAME"
echo ""
+echo ""
+echo "Above totals split into separate <dir-levels>x<dir-spread> runs:"
+echo "----------------------------------------------------------------"
+echo ""
+
+for pre in "${al}x${as}_" "${bl}x${bs}_" "${cl}x${cs}_"; do
+ "$benchmark" compare "${pre}$SVN_A_NAME" "${pre}$SVN_B_NAME"
+ echo ""
+done
+
+echo ""
+echo ""
+echo "More detail:"
+echo "------------"
+echo ""
+
+for pre in "${al}x${as}_" "${bl}x${bs}_" "${cl}x${cs}_" "total_"; do
+ "$benchmark" compare -v "${pre}$SVN_A_NAME" "${pre}$SVN_B_NAME"
+ echo ""
+ echo ""
+done
+
+echo ""
echo "Had started at $started,"
echo " done at $(date)"
pwd
Modified: subversion/branches/revprop-packing/tools/dev/po-merge.py
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/tools/dev/po-merge.py?rev=1231318&r1=1231317&r2=1231318&view=diff
==============================================================================
--- subversion/branches/revprop-packing/tools/dev/po-merge.py (original)
+++ subversion/branches/revprop-packing/tools/dev/po-merge.py Fri Jan 13 21:40:26 2012
@@ -52,7 +52,7 @@ def parse_translation(f):
line = f.readline()
if line[0] != '"':
break
- msgid += '\n' + line[:-1]
+ msgid = msgid[:-1] + line[1:-1]
# Parse optional msgid_plural
msgid_plural = None
@@ -64,7 +64,7 @@ def parse_translation(f):
line = f.readline()
if line[0] != '"':
break
- msgid_plural += '\n' + line[:-1]
+ msgid_plural = msgid_plural[:-1] + line[1:-1]
# Parse msgstr
msgstr = []
@@ -117,9 +117,9 @@ def main(argv):
argv0 = os.path.basename(argv[0])
sys.exit('Usage: %s <lang.po>\n'
'\n'
- 'This script will replace the translations and flags in lang.po with\n'
- 'the translations and flags in the source po file read from standard\n'
- 'input. Strings that are not found in the source file are left untouched.\n'
+ 'This script will replace the translations and flags in lang.po (LF line endings)\n'
+ 'with the translations and flags in the source po file read from standard input.\n'
+ 'Strings that are not found in the source file are left untouched.\n'
'A backup copy of lang.po is saved as lang.po.bak.\n'
'\n'
'Example:\n'
Modified: subversion/branches/revprop-packing/tools/dev/unix-build/Makefile.svn
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/tools/dev/unix-build/Makefile.svn?rev=1231318&r1=1231317&r2=1231318&view=diff
==============================================================================
--- subversion/branches/revprop-packing/tools/dev/unix-build/Makefile.svn (original)
+++ subversion/branches/revprop-packing/tools/dev/unix-build/Makefile.svn Fri Jan 13 21:40:26 2012
@@ -298,6 +298,10 @@ else
THREADS_FLAG=--disable-threads
endif
+ifdef POOL_DEBUG
+POOL_DEBUG_FLAG=--enable-pool-debug=all
+endif
+
# configure apr
$(APR_OBJDIR)/.configured: $(APR_OBJDIR)/.retrieved
cp $(APR_SRCDIR)/build/apr_hints.m4 \
@@ -311,7 +315,8 @@ $(APR_OBJDIR)/.configured: $(APR_OBJDIR)
$(APR_SRCDIR)/configure \
--prefix=$(PREFIX)/apr \
--enable-maintainer-mode \
- $(THREADS_FLAG)
+ $(THREADS_FLAG) \
+ $(POOL_DEBUG_FLAG)
touch $@
# compile apr
@@ -1032,7 +1037,10 @@ $(PYTHON_OBJDIR)/.retrieved: $(DISTDIR)/
chmod +x $(PYTHON_SRCDIR)/setup.py
# Fixes shared library linking on OpenBSD
# http://bugs.python.org/issue12560
+ # Also fix compilation error on OpenBSD 5.0 and later (undefined
+ # reference to 'lstat' -- already fixed in hg.python.org/cpython).
sed -e '4930s#NetBSD\*|#NetBSD*|OpenBSD*|#' \
+ -e 's#OpenBSD/4\.\[789\]#OpenBSD/*#' \
< $(PYTHON_SRCDIR)/configure \
> $(PYTHON_SRCDIR)/configure.patched
mv $(PYTHON_SRCDIR)/configure.patched $(PYTHON_SRCDIR)/configure
@@ -1223,7 +1231,17 @@ $(SVN_OBJDIR)/.installed: $(SVN_OBJDIR)/
&& make install
touch $@
-$(SVN_OBJDIR)/.bindings-compiled: $(SVN_OBJDIR)/.installed
+# SWIG 1.x and 2.x are not compatible. If SWIG 2.x is used to generated .swg
+# files and 1.x is used to build the bindings, the Python bindings fail to
+# load with errors such as "undefined symbol 'SWIG_Python_str_AsChar'".
+# So clean any pre-generated .swg files to make sure everything is done
+# by the same version of SWIG.
+$(SVN_OBJDIR)/.pre-generated-swig-cleaned:
+ -cd $(svn_builddir) \
+ && make extraclean-swig
+ touch $@
+
+$(SVN_OBJDIR)/.bindings-compiled: $(SVN_OBJDIR)/.installed $(SVN_OBJDIR)/.pre-generated-swig-cleaned
cd $(svn_builddir) \
&& env LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \
make swig-py
@@ -1334,7 +1352,8 @@ endif
.PHONY: libpath
libpath:
- @echo export LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):$$LD_LIBRARY_PATH
+ @echo export LD_LIBRARY_PATH="$(LD_LIBRARY_PATH):$$LD_LIBRARY_PATH" \
+ "PYTHONPATH=$(SVN_PREFIX)/lib/svn-python"
.PHONY: start-svnserve stop-svnserve start-httpd stop-httpd
@@ -1504,3 +1523,9 @@ ifeq ($(ENABLE_JAVA_BINDINGS),yes)
endif
@echo ""
@echo "Signatures:"
+ @echo
+ @echo "subversion-$(TAG).tar.gz"
+ @echo "`cat subversion-$(TAG).tar.gz.asc`"
+ @echo
+ @echo "subversion-$(TAG).tar.bz2"
+ @echo "`cat subversion-$(TAG).tar.bz2.asc`"
Modified: subversion/branches/revprop-packing/tools/dev/wc-format.py
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/tools/dev/wc-format.py?rev=1231318&r1=1231317&r2=1231318&view=diff
==============================================================================
--- subversion/branches/revprop-packing/tools/dev/wc-format.py (original)
+++ subversion/branches/revprop-packing/tools/dev/wc-format.py Fri Jan 13 21:40:26 2012
@@ -51,7 +51,7 @@ def print_format(wc_path):
# 1.4.x: format 8
# 1.5.x: format 9
# 1.6.x: format 10
- # 1.7.x: format XXX
+ # 1.7.x: format 29
formatno = get_format(wc_path)
print '%s: %s' % (wc_path, formatno)
Modified: subversion/branches/revprop-packing/tools/dev/windows-build/README
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/tools/dev/windows-build/README?rev=1231318&r1=1231317&r2=1231318&view=diff
==============================================================================
--- subversion/branches/revprop-packing/tools/dev/windows-build/README (original)
+++ subversion/branches/revprop-packing/tools/dev/windows-build/README Fri Jan 13 21:40:26 2012
@@ -1,5 +1,9 @@
Makefiles for automating the Windows build.
+Should work either either nmake or GNU make.
+
+Doesn't require Cygwin.
+
* TODO:
- document: how to use
- known bugs/shortcomings
@@ -11,3 +15,8 @@ Makefiles for automating the Windows bui
See: http://svn.haxx.se/users/archive-2009-07/0764.shtml
(Message-Id: <al...@daniel2.local>)
+
+
+'cp' and friends can be obtained from gnuwin32.sf.net, unxutils.sf.net,
+cygwin, etc. Or tweak the makefile to use cp.pl or the built-in 'copy'
+command instead.:
Modified: subversion/branches/revprop-packing/tools/dist/backport.pl
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/tools/dist/backport.pl?rev=1231318&r1=1231317&r2=1231318&view=diff
==============================================================================
--- subversion/branches/revprop-packing/tools/dist/backport.pl (original)
+++ subversion/branches/revprop-packing/tools/dist/backport.pl Fri Jan 13 21:40:26 2012
@@ -68,12 +68,12 @@ sub merge {
if ($entry{branch}) {
# NOTE: This doesn't escape the branch into the pattern.
- $pattern = printf '^ [*] %s branch\|Branch:\n *%s', $entry{branch}, $entry{branch};
+ $pattern = sprintf '\V\(%s branch\|branches\/%s\|Branch:\n *%s\)', $entry{branch}, $entry{branch}, $entry{branch};
$mergeargs = "--reintegrate $BRANCHES/$entry{branch}";
print $logmsg_fh "Reintergrate the $entry{header}:";
print $logmsg_fh "";
} elsif (@{$entry{revisions}}) {
- $pattern = 'r' . $entry{revisions}->[0];
+ $pattern = '^ [*] \V' . 'r' . $entry{revisions}->[0];
$mergeargs = join " ", (map { "-c$_" } @{$entry{revisions}}), '^/subversion/trunk';
if (@{$entry{revisions}} > 1) {
print $logmsg_fh "Merge the $entry{header} from trunk:";
@@ -88,7 +88,6 @@ sub merge {
print $logmsg_fh $_ for @{$entry{entry}};
close $logmsg_fh or die "Can't close $logmsg_filename: $!";
- $pattern = '\V'.$pattern;
my $script = <<"EOF";
#!/bin/sh
set -e
@@ -96,7 +95,7 @@ $SVN diff > $backupfile
$SVN revert -R .
$SVN up
$SVN merge $mergeargs
-$VIM -e -s -n -N -i NONE -u NONE -c '/^ [*] $pattern/normal! dap' -c wq $STATUS
+$VIM -e -s -n -N -i NONE -u NONE -c '/$pattern/normal! dap' -c wq $STATUS
if $WET_RUN; then
$SVN commit -F $logmsg_filename
else
@@ -109,8 +108,7 @@ EOF
$script .= <<"EOF" if $entry{branch};
reinteg_rev=\`$SVN info $STATUS | sed -ne 's/Last Changed Rev: //p'\`
if $WET_RUN; then
- $SVN rm $BRANCHES/$entry{branch}\
- -m "Remove the '$entry{branch}' branch, reintegrated in r\$reinteg_rev."
+ $SVN rm $BRANCHES/$entry{branch} -m "Remove the '$entry{branch}' branch, reintegrated in r\$reinteg_rev."
else
echo "Removing reintegrated '$entry{branch}' branch"
fi
@@ -205,15 +203,17 @@ sub main {
usage, exit 0 if @ARGV;
usage, exit 1 unless -r $STATUS;
+ my $sawapproved;
@ARGV = $STATUS;
while (<>) {
my @lines = split /\n/;
# Section header?
+ next unless $sawapproved ||= /^Approved changes/;
print "\n\n=== $lines[0]" and next if $lines[0] =~ /^[A-Z].*:$/i;
# Backport entry?
- handle_entry @lines and next if $lines[0] =~ /^ \*/;
+ handle_entry @lines and next if $lines[0] =~ /^ \*/ and $sawapproved;
warn "Unknown entry '$lines[0]' at $ARGV:$.\n";
}
Modified: subversion/branches/revprop-packing/tools/dist/collect_sigs.py
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/tools/dist/collect_sigs.py?rev=1231318&r1=1231317&r2=1231318&view=diff
==============================================================================
--- subversion/branches/revprop-packing/tools/dist/collect_sigs.py (original)
+++ subversion/branches/revprop-packing/tools/dist/collect_sigs.py Fri Jan 13 21:40:26 2012
@@ -75,7 +75,7 @@ def generate_asc_files(target_dir='.'):
db = sqlite3.connect(os.path.join(target_dir, 'sigs.db'))
curs = db.cursor()
- like_filename = 'subversion-%s%%' % config.version
+ like_filename = 'subversion-%s.%%' % config.version
curs.execute('''SELECT filename, signature FROM signatures
WHERE filename LIKE ?''', (like_filename, ) )
for filename, signature in curs:
@@ -183,7 +183,7 @@ def list_signatures():
lines = ""
curs = db.cursor()
- like_filename = 'subversion-%s%%' % config.version
+ like_filename = 'subversion-%s.%%' % config.version
curs.execute('''SELECT filename, COUNT(*) FROM signatures
WHERE filename LIKE ?
GROUP BY filename ORDER BY filename''',
Modified: subversion/branches/revprop-packing/tools/dist/dist.sh
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/tools/dist/dist.sh?rev=1231318&r1=1231317&r2=1231318&view=diff
==============================================================================
--- subversion/branches/revprop-packing/tools/dist/dist.sh (original)
+++ subversion/branches/revprop-packing/tools/dist/dist.sh Fri Jan 13 21:40:26 2012
@@ -265,15 +265,14 @@ ver_minor=`echo $VERSION | cut -d '.' -f
ver_patch=`echo $VERSION | cut -d '.' -f 3`
vsn_file="$DISTPATH/subversion/include/svn_version.h"
-
-if [ "$VERSION" != "trunk" ]; then
+if [ "$VERSION" != "trunk" ] && [ "$VERSION" != "nightly" ]; then
sed \
- -e "/#define *SVN_VER_MAJOR/s/[0-9]\\+/$ver_major/" \
- -e "/#define *SVN_VER_MINOR/s/[0-9]\\+/$ver_minor/" \
- -e "/#define *SVN_VER_PATCH/s/[0-9]\\+/$ver_patch/" \
+ -e "/#define *SVN_VER_MAJOR/s/[0-9][0-9]*/$ver_major/" \
+ -e "/#define *SVN_VER_MINOR/s/[0-9][0-9]*/$ver_minor/" \
+ -e "/#define *SVN_VER_PATCH/s/[0-9][0-9]*/$ver_patch/" \
-e "/#define *SVN_VER_TAG/s/\".*\"/\" ($VER_TAG)\"/" \
-e "/#define *SVN_VER_NUMTAG/s/\".*\"/\"$VER_NUMTAG\"/" \
- -e "/#define *SVN_VER_REVISION/s/[0-9]\\+/$REVISION/" \
+ -e "/#define *SVN_VER_REVISION/s/[0-9][0-9]*/$REVISION/" \
< "$vsn_file" > "$vsn_file.tmp"
else
# Don't munge the version number if we are creating a nightly trunk tarball
@@ -283,7 +282,6 @@ else
-e "/#define *SVN_VER_REVISION/s/[0-9]\\+/$REVISION/" \
< "$vsn_file" > "$vsn_file.tmp"
fi
-
mv -f "$vsn_file.tmp" "$vsn_file"
echo "Creating svn_version.h.dist, for use in tagging matching tarball..."
Modified: subversion/branches/revprop-packing/tools/dist/nightly.sh
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/tools/dist/nightly.sh?rev=1231318&r1=1231317&r2=1231318&view=diff
==============================================================================
--- subversion/branches/revprop-packing/tools/dist/nightly.sh (original)
+++ subversion/branches/revprop-packing/tools/dist/nightly.sh Fri Jan 13 21:40:26 2012
@@ -76,7 +76,7 @@ echo '-------------------moving results-
--target $target
if [ ! -d "$target/dist" ]; then mkdir "$target/dist"; fi
if [ -d "$target/dist/r$head" ]; then rm -r "$target/dist/r$head"; fi
-mv $target/deploy $target/dist/r$head
+mv roll/deploy $target/dist/r$head
# Some static links for the most recent artifacts.
ln -sf "r$head" "$target/dist/current"
Modified: subversion/branches/revprop-packing/tools/dist/rat-excludes
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/tools/dist/rat-excludes?rev=1231318&r1=1231317&r2=1231318&view=diff
==============================================================================
--- subversion/branches/revprop-packing/tools/dist/rat-excludes (original)
+++ subversion/branches/revprop-packing/tools/dist/rat-excludes Fri Jan 13 21:40:26 2012
@@ -15,6 +15,7 @@ doc/doxygen.conf
notes/**
packages/
subversion/tests/cmdline/getopt_tests_data/*
+subversion/tests/cmdline/diff_tests_data/*
subversion/bindings/swig/NOTES
subversion/libsvn_fs_base/notes/TODO
subversion/libsvn_fs_base/notes/fs-history
@@ -31,8 +32,11 @@ subversion/bindings/ctypes-python/csvn/e
subversion/tests/cmdline/svntest/err.py
tools/buildbot/master/public_html/buildbot.css
tools/dist/rat-excludes
+tools/dist/_gnupg.py
+tools/dist/templates/*.ezt
tools/dev/iz/defect.dem
tools/dev/iz/ff2csv.command
+tools/dev/benchmarks/suite1/crontab.entry
tools/hook-scripts/mailer/tests/mailer-t1.output
**/*.dump
**/*.icns