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
