You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by jc...@apache.org on 2010/11/21 01:48:26 UTC
svn commit: r1037363 [5/22] - in
/subversion/branches/diff-optimizations-bytes: ./ build/ build/generator/
build/generator/templates/ build/win32/ subversion/bindings/javahl/native/
subversion/bindings/javahl/src/org/apache/subversion/javahl/ subversio...
Modified: subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/upgrade.c
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/upgrade.c?rev=1037363&r1=1037362&r2=1037363&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/upgrade.c (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/upgrade.c Sun Nov 21 00:48:20 2010
@@ -372,14 +372,15 @@ get_versioned_files(const apr_array_head
}
-/* */
+/* Return the path of the old-school administrative lock file
+ associated with LOCAL_DIR_ABSPATH, allocated from RESULT_POOL. */
static const char *
build_lockfile_path(const char *local_dir_abspath,
apr_pool_t *result_pool)
{
return svn_dirent_join_many(result_pool,
local_dir_abspath,
- ".svn", /* ### switch to dynamic? */
+ svn_wc_get_adm_dir(result_pool),
ADM_LOCK,
NULL);
}
@@ -630,91 +631,60 @@ bump_to_13(void *baton, svn_sqlite__db_t
return SVN_NO_ERROR;
}
-
-#if 0 /* ### no tree conflict migration yet */
-
-/* ### duplicated from wc_db.c */
-static const char *
-kind_to_word(svn_wc__db_kind_t kind)
-{
- switch (kind)
- {
- case svn_wc__db_kind_dir:
- return "dir";
- case svn_wc__db_kind_file:
- return "file";
- case svn_wc__db_kind_symlink:
- return "symlink";
- case svn_wc__db_kind_unknown:
- return "unknown";
- case svn_wc__db_kind_subdir:
- return "subdir";
- default:
- SVN_ERR_MALFUNCTION_NO_RETURN();
- }
-}
-
-
-/* */
-static const char *
-conflict_kind_to_word(svn_wc_conflict_kind_t conflict_kind)
-{
- switch (conflict_kind)
- {
- case svn_wc_conflict_kind_text:
- return "text";
- case svn_wc_conflict_kind_property:
- return "property";
- case svn_wc_conflict_kind_tree:
- return "tree";
- default:
- SVN_ERR_MALFUNCTION_NO_RETURN();
- }
-}
-
-
-/* */
-static const char *
-conflict_action_to_word(svn_wc_conflict_action_t action)
-{
- return svn_token__to_word(svn_wc__conflict_action_map, action);
-}
-
-
-/* */
-static const char *
-conflict_reason_to_word(svn_wc_conflict_reason_t reason)
+/*
+ * Read tree conflict descriptions from @a conflict_data. Set @a *conflicts
+ * to a hash of pointers to svn_wc_conflict_description2_t objects indexed by
+ * svn_wc_conflict_description2_t.local_abspath, all newly allocated in @a
+ * pool. @a dir_path is the path to the working copy directory whose conflicts
+ * are being read. The conflicts read are the tree conflicts on the immediate
+ * child nodes of @a dir_path. Do all allocations in @a pool.
+ *
+ * Note: There were some concerns about this function:
+ *
+ * ### this is BAD. the CONFLICTS structure should not be dependent upon
+ * ### DIR_PATH. each conflict should be labeled with an entry name, not
+ * ### a whole path. (and a path which happens to vary based upon invocation
+ * ### of the user client and these APIs)
+ *
+ * those assumptions were baked into former versions of the data model, so
+ * they have to stick around here. But they have been removed from the
+ * New Way. */
+static svn_error_t *
+read_tree_conflicts(apr_hash_t **conflicts,
+ const char *conflict_data,
+ const char *dir_path,
+ apr_pool_t *pool)
{
- return svn_token__to_word(svn_wc__conflict_reason_map, reason);
-}
+ const svn_skel_t *skel;
+ apr_pool_t *iterpool;
+ *conflicts = apr_hash_make(pool);
-/* */
-static const char *
-wc_operation_to_word(svn_wc_operation_t operation)
-{
- return svn_token__to_word(svn_wc__operation_map, operation);
-}
+ if (conflict_data == NULL)
+ return SVN_NO_ERROR;
+ skel = svn_skel__parse(conflict_data, strlen(conflict_data), pool);
+ if (skel == NULL)
+ return svn_error_create(SVN_ERR_WC_CORRUPT, NULL,
+ _("Error parsing tree conflict skel"));
-/* */
-static svn_wc__db_kind_t
-db_kind_from_node_kind(svn_node_kind_t node_kind)
-{
- switch (node_kind)
+ iterpool = svn_pool_create(pool);
+ for (skel = skel->children; skel != NULL; skel = skel->next)
{
- case svn_node_file:
- return svn_wc__db_kind_file;
- case svn_node_dir:
- return svn_wc__db_kind_dir;
- case svn_node_unknown:
- case svn_node_none:
- return svn_wc__db_kind_unknown;
- default:
- SVN_ERR_MALFUNCTION_NO_RETURN();
+ const svn_wc_conflict_description2_t *conflict;
+
+ svn_pool_clear(iterpool);
+ SVN_ERR(svn_wc__deserialize_conflict(&conflict, skel, dir_path,
+ pool, iterpool));
+ if (conflict != NULL)
+ apr_hash_set(*conflicts, svn_dirent_basename(conflict->local_abspath,
+ pool),
+ APR_HASH_KEY_STRING, conflict);
}
-}
+ svn_pool_destroy(iterpool);
+ return SVN_NO_ERROR;
+}
/* */
static svn_error_t *
@@ -724,16 +694,12 @@ migrate_single_tree_conflict_data(svn_sq
const char *local_relpath,
apr_pool_t *scratch_pool)
{
- svn_sqlite__stmt_t *insert_stmt;
apr_hash_t *conflicts;
apr_hash_index_t *hi;
apr_pool_t *iterpool;
- SVN_ERR(svn_sqlite__get_statement(&insert_stmt, sdb,
- STMT_INSERT_NEW_CONFLICT));
-
- SVN_ERR(svn_wc__read_tree_conflicts(&conflicts, tree_conflict_data,
- local_relpath, scratch_pool));
+ SVN_ERR(read_tree_conflicts(&conflicts, tree_conflict_data, local_relpath,
+ scratch_pool));
iterpool = svn_pool_create(scratch_pool);
for (hi = apr_hash_first(scratch_pool, conflicts);
@@ -743,8 +709,10 @@ migrate_single_tree_conflict_data(svn_sq
const svn_wc_conflict_description2_t *conflict =
svn__apr_hash_index_val(hi);
const char *conflict_relpath;
- apr_int64_t left_repos_id;
- apr_int64_t right_repos_id;
+ const char *conflict_data;
+ svn_sqlite__stmt_t *stmt;
+ svn_boolean_t have_row;
+ svn_skel_t *skel;
svn_pool_clear(iterpool);
@@ -753,72 +721,34 @@ migrate_single_tree_conflict_data(svn_sq
conflict->local_abspath, iterpool),
iterpool);
- /* Optionally get the right repos ids. */
- if (conflict->src_left_version)
- {
- SVN_ERR(svn_wc__db_upgrade_get_repos_id(
- &left_repos_id,
- sdb,
- conflict->src_left_version->repos_url,
- iterpool));
- }
-
- if (conflict->src_right_version)
- {
- SVN_ERR(svn_wc__db_upgrade_get_repos_id(
- &right_repos_id,
- sdb,
- conflict->src_right_version->repos_url,
- iterpool));
- }
+ SVN_ERR(svn_wc__serialize_conflict(&skel, conflict, iterpool, iterpool));
+ conflict_data = svn_skel__unparse(skel, iterpool)->data;
- SVN_ERR(svn_sqlite__bindf(insert_stmt, "is", wc_id, conflict_relpath));
+ /* See if we need to update or insert an ACTUAL node. */
+ SVN_ERR(svn_sqlite__get_statement(&stmt, sdb, STMT_SELECT_ACTUAL_NODE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wc_id, conflict_relpath));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ SVN_ERR(svn_sqlite__reset(stmt));
- SVN_ERR(svn_sqlite__bind_text(insert_stmt, 3,
- svn_dirent_dirname(conflict_relpath,
- iterpool)));
- SVN_ERR(svn_sqlite__bind_text(insert_stmt, 4,
- kind_to_word(db_kind_from_node_kind(
- conflict->node_kind))));
- SVN_ERR(svn_sqlite__bind_text(insert_stmt, 5,
- conflict_kind_to_word(conflict->kind)));
-
- if (conflict->property_name)
- SVN_ERR(svn_sqlite__bind_text(insert_stmt, 6,
- conflict->property_name));
-
- SVN_ERR(svn_sqlite__bind_text(insert_stmt, 7,
- conflict_action_to_word(conflict->action)));
- SVN_ERR(svn_sqlite__bind_text(insert_stmt, 8,
- conflict_reason_to_word(conflict->reason)));
- SVN_ERR(svn_sqlite__bind_text(insert_stmt, 9,
- wc_operation_to_word(conflict->operation)));
-
- if (conflict->src_left_version)
+ if (have_row)
{
- SVN_ERR(svn_sqlite__bind_int64(insert_stmt, 10, left_repos_id));
- SVN_ERR(svn_sqlite__bind_text(insert_stmt, 11,
- conflict->src_left_version->path_in_repos));
- SVN_ERR(svn_sqlite__bind_int64(insert_stmt, 12,
- conflict->src_left_version->peg_rev));
- SVN_ERR(svn_sqlite__bind_text(insert_stmt, 13,
- kind_to_word(db_kind_from_node_kind(
- conflict->src_left_version->node_kind))));
+ /* There is an existing ACTUAL row, so just update it. */
+ SVN_ERR(svn_sqlite__get_statement(&stmt, sdb,
+ STMT_UPDATE_ACTUAL_CONFLICT_DATA));
}
-
- if (conflict->src_right_version)
+ else
{
- SVN_ERR(svn_sqlite__bind_int64(insert_stmt, 14, right_repos_id));
- SVN_ERR(svn_sqlite__bind_text(insert_stmt, 15,
- conflict->src_right_version->path_in_repos));
- SVN_ERR(svn_sqlite__bind_int64(insert_stmt, 16,
- conflict->src_right_version->peg_rev));
- SVN_ERR(svn_sqlite__bind_text(insert_stmt, 17,
- kind_to_word(db_kind_from_node_kind(
- conflict->src_right_version->node_kind))));
+ /* We need to insert an ACTUAL row with the tree conflict data. */
+ SVN_ERR(svn_sqlite__get_statement(&stmt, sdb,
+ STMT_INSERT_ACTUAL_CONFLICT_DATA));
}
- SVN_ERR(svn_sqlite__insert(NULL, insert_stmt));
+ SVN_ERR(svn_sqlite__bindf(stmt, "iss", wc_id, conflict_relpath,
+ conflict_data));
+ if (!have_row)
+ SVN_ERR(svn_sqlite__bind_text(stmt, 4, local_relpath));
+
+ SVN_ERR(svn_sqlite__step_done(stmt));
}
svn_pool_destroy(iterpool);
@@ -829,22 +759,20 @@ migrate_single_tree_conflict_data(svn_sq
/* */
static svn_error_t *
-migrate_tree_conflicts(svn_sqlite__db_t *sdb,
- apr_pool_t *scratch_pool)
+migrate_tree_conflict_data(svn_sqlite__db_t *sdb, apr_pool_t *scratch_pool)
{
- svn_sqlite__stmt_t *select_stmt;
- svn_sqlite__stmt_t *erase_stmt;
+ svn_sqlite__stmt_t *stmt;
svn_boolean_t have_row;
apr_pool_t *iterpool = svn_pool_create(scratch_pool);
/* Iterate over each node which has a set of tree conflicts, then insert
all of them into the new schema. */
- SVN_ERR(svn_sqlite__get_statement(&select_stmt, sdb,
+ SVN_ERR(svn_sqlite__get_statement(&stmt, sdb,
STMT_SELECT_OLD_TREE_CONFLICT));
/* Get all the existing tree conflict data. */
- SVN_ERR(svn_sqlite__step(&have_row, select_stmt));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
while (have_row)
{
apr_int64_t wc_id;
@@ -853,33 +781,28 @@ migrate_tree_conflicts(svn_sqlite__db_t
svn_pool_clear(iterpool);
- wc_id = svn_sqlite__column_int64(select_stmt, 0);
- local_relpath = svn_sqlite__column_text(select_stmt, 1, iterpool);
- tree_conflict_data = svn_sqlite__column_text(select_stmt, 2,
- iterpool);
+ wc_id = svn_sqlite__column_int64(stmt, 0);
+ local_relpath = svn_sqlite__column_text(stmt, 1, iterpool);
+ tree_conflict_data = svn_sqlite__column_text(stmt, 2, iterpool);
- SVN_ERR(migrate_single_tree_conflict_data(sdb,
- tree_conflict_data,
+ SVN_ERR(migrate_single_tree_conflict_data(sdb, tree_conflict_data,
wc_id, local_relpath,
iterpool));
/* We don't need to do anything but step over the previously
prepared statement. */
- SVN_ERR(svn_sqlite__step(&have_row, select_stmt));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
}
- SVN_ERR(svn_sqlite__reset(select_stmt));
+ SVN_ERR(svn_sqlite__reset(stmt));
/* Erase all the old tree conflict data. */
- SVN_ERR(svn_sqlite__get_statement(&erase_stmt, sdb,
- STMT_ERASE_OLD_CONFLICTS));
- SVN_ERR(svn_sqlite__step_done(erase_stmt));
+ SVN_ERR(svn_sqlite__get_statement(&stmt, sdb, STMT_ERASE_OLD_CONFLICTS));
+ SVN_ERR(svn_sqlite__step_done(stmt));
svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
-#endif /* ### no tree conflict migration yet */
-
/* */
static svn_error_t *
@@ -1195,7 +1118,6 @@ bump_to_17(void *baton, svn_sqlite__db_t
return SVN_NO_ERROR;
}
-#if (SVN_WC__VERSION > 19)
static svn_error_t *
bump_to_20(void *baton, svn_sqlite__db_t *sdb, apr_pool_t *scratch_pool)
{
@@ -1203,25 +1125,15 @@ bump_to_20(void *baton, svn_sqlite__db_t
SVN_ERR(svn_sqlite__exec_statements(sdb, STMT_UPGRADE_TO_20));
return SVN_NO_ERROR;
}
-#endif
-
-#if 0 /* ### no tree conflict migration yet */
-
-/* */
static svn_error_t *
-bump_to_XXX(void *baton, svn_sqlite__db_t *sdb, apr_pool_t *scratch_pool)
+bump_to_21(void *baton, svn_sqlite__db_t *sdb, apr_pool_t *scratch_pool)
{
- const char *wcroot_abspath = ((struct bump_baton *)baton)->wcroot_abspath;
-
- SVN_ERR(svn_sqlite__exec_statements(sdb, STMT_UPGRADE_TO_XXX));
-
- SVN_ERR(migrate_tree_conflicts(sdb, scratch_pool));
-
+ SVN_ERR(svn_sqlite__exec_statements(sdb, STMT_UPGRADE_TO_21));
+ SVN_ERR(migrate_tree_conflict_data(sdb, scratch_pool));
return SVN_NO_ERROR;
}
-#endif /* ### no tree conflict migration yet */
struct upgrade_data_t {
svn_sqlite__db_t *sdb;
@@ -1244,7 +1156,9 @@ struct upgrade_data_t {
Uses SCRATCH_POOL for all temporary allocation. */
static svn_error_t *
-upgrade_to_wcng(svn_wc__db_t *db,
+upgrade_to_wcng(void **dir_baton,
+ void *parent_baton,
+ svn_wc__db_t *db,
const char *dir_abspath,
int old_format,
svn_wc_upgrade_get_repos_info_t repos_info_func,
@@ -1346,11 +1260,11 @@ upgrade_to_wcng(svn_wc__db_t *db,
scratch_pool));
}
- SVN_ERR(svn_wc__write_upgraded_entries(db, data->sdb,
+ SVN_ERR(svn_wc__write_upgraded_entries(dir_baton, parent_baton, db, data->sdb,
data->repos_id, data->wc_id,
dir_abspath, data->root_abspath,
entries,
- scratch_pool));
+ result_pool, scratch_pool));
/***** WC PROPS *****/
@@ -1498,13 +1412,17 @@ svn_wc__upgrade_sdb(int *result_format,
"use 'tools/dev/wc-ng/bump-to-19.py' to "
"upgrade it"), wcroot_abspath);
-#if (SVN_WC__VERSION > 19)
case 19:
SVN_ERR(svn_sqlite__with_transaction(sdb, bump_to_20, &bb,
scratch_pool));
*result_format = 20;
/* FALLTHROUGH */
-#endif
+
+ case 20:
+ SVN_ERR(svn_sqlite__with_transaction(sdb, bump_to_21, &bb,
+ scratch_pool));
+ *result_format = 21;
+ /* FALLTHROUGH */
/* ### future bumps go here. */
#if 0
@@ -1537,7 +1455,9 @@ svn_wc__upgrade_sdb(int *result_format,
/* */
static svn_error_t *
-upgrade_working_copy(svn_wc__db_t *db,
+upgrade_working_copy(void **dir_baton,
+ void *parent_baton,
+ svn_wc__db_t *db,
const char *dir_abspath,
svn_wc_upgrade_get_repos_info_t repos_info_func,
void *repos_info_baton,
@@ -1547,6 +1467,7 @@ upgrade_working_copy(svn_wc__db_t *db,
void *cancel_baton,
svn_wc_notify_func2_t notify_func,
void *notify_baton,
+ apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
int old_format;
@@ -1591,7 +1512,7 @@ upgrade_working_copy(svn_wc__db_t *db,
}
- SVN_ERR(upgrade_to_wcng(db, dir_abspath, old_format,
+ SVN_ERR(upgrade_to_wcng(dir_baton, parent_baton, db, dir_abspath, old_format,
repos_info_func, repos_info_baton,
repos_cache, data, scratch_pool, iterpool));
@@ -1604,15 +1525,16 @@ upgrade_working_copy(svn_wc__db_t *db,
for (i = 0; i < subdirs->nelts; ++i)
{
const char *child_abspath = APR_ARRAY_IDX(subdirs, i, const char *);
+ void *child_baton;
svn_pool_clear(iterpool);
- SVN_ERR(upgrade_working_copy(db, child_abspath,
+ SVN_ERR(upgrade_working_copy(&child_baton, *dir_baton, db, child_abspath,
repos_info_func, repos_info_baton,
repos_cache, data,
cancel_func, cancel_baton,
notify_func, notify_baton,
- iterpool));
+ iterpool, iterpool));
}
svn_pool_destroy(iterpool);
@@ -1674,6 +1596,7 @@ svn_wc_upgrade(svn_wc_context_t *wc_ctx,
struct upgrade_data_t data = { NULL };
svn_skel_t *work_item, *work_items = NULL;
const char *pristine_from, *pristine_to, *db_from, *db_to;
+ void *parent_baton;
if (!is_old_wcroot(local_abspath, scratch_pool))
return svn_error_createf(
@@ -1695,12 +1618,12 @@ svn_wc_upgrade(svn_wc_context_t *wc_ctx,
scratch_pool, scratch_pool));
/* Upgrade the pre-wcng into a wcng in a temporary location. */
- SVN_ERR(upgrade_working_copy(db, local_abspath,
+ SVN_ERR(upgrade_working_copy(&parent_baton, NULL, db, local_abspath,
repos_info_func, repos_info_baton,
apr_hash_make(scratch_pool), &data,
cancel_func, cancel_baton,
notify_func, notify_baton,
- scratch_pool));
+ scratch_pool, scratch_pool));
/* A workqueue item to move the pristine dir into place */
pristine_from = svn_wc__adm_child(data.root_abspath, PRISTINE_STORAGE_RELPATH,
Modified: subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/wc-metadata.sql
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/wc-metadata.sql?rev=1037363&r1=1037362&r2=1037363&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/wc-metadata.sql (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/wc-metadata.sql Sun Nov 21 00:48:20 2010
@@ -626,6 +626,16 @@ DROP TABLE WORKING_NODE;
PRAGMA user_version = 20;
+
+/* ------------------------------------------------------------------------- */
+
+/* Format 21 involves no schema changes, it moves the tree conflict victim
+ information to victime nodes, rather than parents. */
+
+-- STMT_UPGRADE_TO_21
+PRAGMA user_version = 21;
+
+
/* ------------------------------------------------------------------------- */
/* Format YYY introduces new handling for conflict information. */
Modified: subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/wc-queries.sql
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/wc-queries.sql?rev=1037363&r1=1037362&r2=1037363&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/wc-queries.sql (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/wc-queries.sql Sun Nov 21 00:48:20 2010
@@ -72,12 +72,24 @@ WHERE wc_id = ?1 AND local_relpath = ?2
ORDER BY op_depth DESC
LIMIT 1;
+-- STMT_SELECT_LOWEST_WORKING_NODE
+SELECT op_depth, presence
+FROM nodes
+WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > 0
+ORDER BY op_depth
+LIMIT 1;
+
-- STMT_SELECT_ACTUAL_NODE
SELECT prop_reject, changelist, conflict_old, conflict_new,
conflict_working, tree_conflict_data, properties, conflict_data
FROM actual_node
WHERE wc_id = ?1 AND local_relpath = ?2;
+-- STMT_SELECT_ACTUAL_TREE_CONFLICT
+SELECT conflict_data
+FROM actual_node
+WHERE wc_id = ?1 AND local_relpath = ?2 AND conflict_data IS NOT NULL;
+
-- STMT_SELECT_NODE_CHILDREN_INFO
/* Getting rows in an advantageous order using
ORDER BY local_relpath, op_depth DESC
@@ -297,6 +309,13 @@ WHERE wc_id = ?1 AND local_relpath = ?2
AND op_depth = (SELECT MAX(op_depth) FROM nodes
WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > 0);
+-- STMT_DELETE_LOWEST_WORKING_NODE
+DELETE FROM nodes
+WHERE wc_id = ?1 AND local_relpath = ?2
+ AND op_depth = (SELECT MIN(op_depth) FROM nodes
+ WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > 0)
+ AND presence = 'base-deleted';
+
-- STMT_DELETE_ALL_WORKING_NODES
DELETE FROM nodes
WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > 0;
@@ -314,6 +333,11 @@ DELETE FROM actual_node
WHERE wc_id = ?1 AND local_relpath = ?2
AND changelist IS NULL;
+-- STMT_DELETE_ACTUAL_NODE_WITHOUT_CONFLICT
+DELETE FROM actual_node
+WHERE wc_id = ?1 AND local_relpath = ?2
+ AND conflict_data IS NULL;
+
-- STMT_DELETE_NOT_PRESENT_NODES_RECURSIVE
DELETE FROM nodes
WHERE wc_id = ?1 AND local_relpath LIKE ?2 ESCAPE '#' AND op_depth = ?3
@@ -334,6 +358,21 @@ SET properties = NULL,
right_checksum = NULL
WHERE wc_id = ?1 and local_relpath = ?2;
+-- STMT_CLEAR_ACTUAL_NODE_LEAVING_CONFLICT
+UPDATE actual_node
+SET properties = NULL,
+ text_mod = NULL,
+ changelist = NULL,
+ tree_conflict_data = NULL,
+ conflict_old = NULL,
+ conflict_new = NULL,
+ conflict_working = NULL,
+ prop_reject = NULL,
+ older_checksum = NULL,
+ left_checksum = NULL,
+ right_checksum = NULL
+WHERE wc_id = ?1 and local_relpath = ?2;
+
-- STMT_UPDATE_NODE_BASE_DEPTH
UPDATE nodes SET depth = ?3
WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0;
@@ -421,7 +460,8 @@ SELECT local_relpath
FROM actual_node
WHERE wc_id = ?1 AND parent_relpath = ?2 AND
NOT ((prop_reject IS NULL) AND (conflict_old IS NULL)
- AND (conflict_new IS NULL) AND (conflict_working IS NULL))
+ AND (conflict_new IS NULL) AND (conflict_working IS NULL)
+ AND (conflict_data IS NULL))
-- STMT_SELECT_ACTUAL_CHILDREN_TREE_CONFLICT
SELECT local_relpath, conflict_data
@@ -473,7 +513,7 @@ VALUES (?1, ?2, 0,
?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14, ?15, ?16);
-- STMT_INSERT_WORKING_NODE_FROM_BASE
-INSERT INTO nodes (
+INSERT OR REPLACE INTO nodes (
wc_id, local_relpath, op_depth, parent_relpath, presence, kind, checksum,
changed_revision, changed_date, changed_author, depth, symlink_target,
translated_size, last_mod_time, properties)
@@ -483,27 +523,29 @@ SELECT wc_id, local_relpath, ?3 AS op_de
FROM nodes
WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0;
--- STMT_INSERT_WORKING_NODE_NORMAL_FROM_BASE
+-- STMT_INSERT_WORKING_NODE_FROM_BASE_COPY
INSERT INTO nodes (
wc_id, local_relpath, op_depth, parent_relpath, repos_id, repos_path,
revision, presence, depth, kind, changed_revision, changed_date,
changed_author, checksum, properties, translated_size, last_mod_time,
symlink_target )
SELECT wc_id, local_relpath, ?3 AS op_depth, parent_relpath, repos_id,
- repos_path, revision, 'normal', depth, kind, changed_revision,
+ repos_path, revision, presence, depth, kind, changed_revision,
changed_date, changed_author, checksum, properties, translated_size,
last_mod_time, symlink_target
FROM nodes
WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0;
-
--- STMT_INSERT_WORKING_NODE_NOT_PRESENT_FROM_BASE
+-- STMT_INSERT_WORKING_NODE_FROM_BASE_COPY_PRESENCE
INSERT INTO nodes (
wc_id, local_relpath, op_depth, parent_relpath, repos_id, repos_path,
- revision, presence, kind, changed_revision, changed_date, changed_author )
-SELECT wc_id, local_relpath, ?3 as op_depth, parent_relpath, repos_id,
- repos_path, revision, 'not-present', kind, changed_revision,
- changed_date, changed_author
+ revision, presence, depth, kind, changed_revision, changed_date,
+ changed_author, checksum, properties, translated_size, last_mod_time,
+ symlink_target )
+SELECT wc_id, local_relpath, ?3 AS op_depth, parent_relpath, repos_id,
+ repos_path, revision, ?4 AS presence, depth, kind, changed_revision,
+ changed_date, changed_author, checksum, properties, translated_size,
+ last_mod_time, symlink_target
FROM nodes
WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0;
@@ -672,7 +714,8 @@ WHERE wc_id = ?1 AND (local_relpath = ?2
-- STMT_SELECT_ACTUAL_NODE_RECURSIVE
SELECT 1
FROM actual_node
-WHERE wc_id = ?1 AND (local_relpath = ?2 OR local_relpath LIKE ?3 ESCAPE '#');
+WHERE wc_id = ?1 AND (local_relpath = ?2 OR local_relpath LIKE ?3 ESCAPE '#')
+ AND conflict_data IS NULL;
/* ------------------------------------------------------------------------- */
@@ -718,15 +761,6 @@ SELECT wc_id, local_relpath, tree_confli
FROM actual_node
WHERE tree_conflict_data IS NOT NULL;
--- STMT_INSERT_NEW_CONFLICT
-INSERT INTO conflict_victim (
- wc_id, local_relpath, parent_relpath, node_kind, conflict_kind,
- property_name, conflict_action, conflict_reason, operation,
- left_repos_id, left_repos_relpath, left_peg_rev, left_kind,
- right_repos_id, right_repos_relpath, right_peg_rev, right_kind)
-VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14, ?15,
- ?16, ?17);
-
-- STMT_ERASE_OLD_CONFLICTS
UPDATE actual_node SET tree_conflict_data = NULL;
Modified: subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/wc.h
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/wc.h?rev=1037363&r1=1037362&r2=1037363&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/wc.h (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/wc.h Sun Nov 21 00:48:20 2010
@@ -129,7 +129,7 @@ extern "C" {
* Please document any further format changes here.
*/
-#define SVN_WC__VERSION 20
+#define SVN_WC__VERSION 21
/* Formats <= this have no concept of "revert text-base/props". */
#define SVN_WC__NO_REVERT_FILES 4