Modified: subversion/branches/javahl-ra/subversion/libsvn_wc/update_editor.c URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/libsvn_wc/update_editor.c?rev=1426116&r1=1426115&r2=1426116&view=diff ============================================================================== --- subversion/branches/javahl-ra/subversion/libsvn_wc/update_editor.c (original) +++ subversion/branches/javahl-ra/subversion/libsvn_wc/update_editor.c Thu Dec 27 04:03:49 2012 @@ -496,19 +496,6 @@ cleanup_edit_baton(void *edit_baton) return APR_SUCCESS; } -/* An APR pool cleanup handler. This is a child handler, it removes - the mail pool handler. - <stsp> mail pool? - <hwright> that's where the missing commit mails are going! */ -static apr_status_t -cleanup_edit_baton_child(void *edit_baton) -{ - struct edit_baton *eb = edit_baton; - apr_pool_cleanup_kill(eb->pool, eb, cleanup_edit_baton); - return APR_SUCCESS; -} - - /* Make a new dir baton in a subpool of PB->pool. PB is the parent baton. If PATH and PB are NULL, this is the root directory of the edit; in this case, make the new dir baton in a subpool of EB->pool. @@ -1200,7 +1187,7 @@ open_root(void *edit_baton, &db->old_repos_relpath, NULL, NULL, &db->changed_rev, &db->changed_date, &db->changed_author, &db->ambient_depth, - NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, eb->db, db->local_abspath, db->pool, pool)); db->was_incomplete = (status == svn_wc__db_status_incomplete); @@ -1660,7 +1647,7 @@ delete_entry(const char *path, SVN_ERR(svn_wc__db_base_get_info(&base_status, &base_kind, &old_revision, &repos_relpath, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, eb->db, local_abspath, scratch_pool, scratch_pool)); @@ -2236,7 +2223,7 @@ open_directory(const char *path, &db->old_repos_relpath, NULL, NULL, &db->changed_rev, &db->changed_date, &db->changed_author, &db->ambient_depth, - NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, eb->db, db->local_abspath, db->pool, pool)); @@ -2394,9 +2381,9 @@ close_directory(void *dir_baton, if (db->add_existed) { /* This node already exists. Grab the current pristine properties. */ - SVN_ERR(svn_wc__get_pristine_props(&base_props, - eb->db, db->local_abspath, - scratch_pool, scratch_pool)); + SVN_ERR(svn_wc__db_read_pristine_props(&base_props, + eb->db, db->local_abspath, + scratch_pool, scratch_pool)); } else if (!db->adding_dir) { @@ -2502,15 +2489,10 @@ close_directory(void *dir_baton, &new_actual_props, eb->db, db->local_abspath, - svn_kind_dir, NULL /* use baseprops */, base_props, actual_props, regular_prop_changes, - TRUE /* base_merge */, - FALSE /* dry_run */, - eb->cancel_func, - eb->cancel_baton, db->pool, scratch_pool), _("Couldn't do property merge")); @@ -2563,7 +2545,7 @@ close_directory(void *dir_baton, /* ### We just check if there is some node in BASE at this path */ err = svn_wc__db_base_get_info(&status, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, eb->db, child_abspath, iterpool, iterpool); @@ -3298,7 +3280,7 @@ open_file(const char *path, &fb->changed_rev, &fb->changed_date, &fb->changed_author, NULL, &fb->original_checksum, NULL, NULL, - NULL, NULL, + NULL, NULL, NULL, eb->db, fb->local_abspath, fb->pool, scratch_pool)); @@ -3975,6 +3957,7 @@ close_file(void *file_baton, apr_pool_t *scratch_pool = fb->pool; /* Destroyed at function exit */ svn_boolean_t keep_recorded_info = FALSE; const svn_checksum_t *new_checksum; + apr_array_header_t *iprops = NULL; if (fb->skip_this) { @@ -4076,9 +4059,9 @@ close_file(void *file_baton, if (fb->add_existed) { /* This node already exists. Grab the current pristine properties. */ - SVN_ERR(svn_wc__get_pristine_props(¤t_base_props, - eb->db, fb->local_abspath, - scratch_pool, scratch_pool)); + SVN_ERR(svn_wc__db_read_pristine_props(¤t_base_props, + eb->db, fb->local_abspath, + scratch_pool, scratch_pool)); current_actual_props = local_actual_props; } else if (!fb->adding_file) @@ -4116,14 +4099,10 @@ close_file(void *file_baton, &new_actual_props, eb->db, fb->local_abspath, - svn_kind_file, NULL /* server_baseprops (update, not merge) */, current_base_props, current_actual_props, regular_prop_changes, /* propchanges */ - TRUE /* base_merge */, - FALSE /* dry_run */, - eb->cancel_func, eb->cancel_baton, scratch_pool, scratch_pool)); /* We will ALWAYS have properties to save (after a not-dry-run merge). */ @@ -4251,14 +4230,10 @@ close_file(void *file_baton, &new_actual_props, eb->db, fb->local_abspath, - svn_kind_file, NULL /* server_baseprops (not merging) */, current_base_props /* pristine_props */, fake_actual_props /* actual_props */, regular_prop_changes, /* propchanges */ - TRUE /* base_merge */, - FALSE /* dry_run */, - eb->cancel_func, eb->cancel_baton, scratch_pool, scratch_pool)); @@ -4299,6 +4274,22 @@ close_file(void *file_baton, scratch_pool); } + /* Any inherited props to be set set for this base node? */ + if (eb->wcroot_iprops) + { + iprops = apr_hash_get(eb->wcroot_iprops, fb->local_abspath, + APR_HASH_KEY_STRING); + + /* close_edit may also update iprops for switched nodes, catching + those for which close_directory is never called (e.g. a switch + with no changes). So as a minor optimization we remove any + iprops from the hash so as not to set them again in + close_edit. */ + if (iprops) + apr_hash_set(eb->wcroot_iprops, fb->local_abspath, + APR_HASH_KEY_STRING, NULL); + } + SVN_ERR(svn_wc__db_base_add_file(eb->db, fb->local_abspath, eb->wcroot_abspath, fb->new_relpath, @@ -4317,6 +4308,7 @@ close_file(void *file_baton, (fb->add_existed && fb->adding_file), (! fb->shadowed) && new_base_props, new_actual_props, + iprops, keep_recorded_info, (fb->shadowed && fb->obstruction_found), conflict_skel, @@ -4458,7 +4450,7 @@ close_edit(void *edit_baton, have to worry about removing it. */ err = svn_wc__db_base_get_info(&status, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, + NULL, NULL, NULL, NULL, eb->db, eb->target_abspath, scratch_pool, scratch_pool); if (err) @@ -4615,7 +4607,7 @@ make_editor(svn_revnum_t *target_revisio eb->ext_patterns = preserved_exts; apr_pool_cleanup_register(edit_pool, eb, cleanup_edit_baton, - cleanup_edit_baton_child); + apr_pool_cleanup_null); /* Construct an editor. */ tree_editor->set_target_revision = set_target_revision; @@ -4656,7 +4648,7 @@ make_editor(svn_revnum_t *target_revisio err = svn_wc__db_base_get_info(&dir_status, &dir_kind, NULL, &dir_repos_relpath, NULL, NULL, NULL, NULL, NULL, &dir_depth, NULL, NULL, NULL, - NULL, NULL, + NULL, NULL, NULL, db, eb->target_abspath, scratch_pool, scratch_pool); @@ -4712,7 +4704,7 @@ make_editor(svn_revnum_t *target_revisio NULL, &dir_repos_relpath, NULL, NULL, NULL, NULL, NULL, &dir_depth, NULL, - NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, db, child_abspath, iterpool, iterpool)); @@ -4991,163 +4983,27 @@ svn_wc__get_switch_editor(const svn_delt svn_error_t * -svn_wc__check_wc_root(svn_boolean_t *wc_root, - svn_kind_t *kind, - svn_boolean_t *switched, - svn_wc__db_t *db, - const char *local_abspath, - apr_pool_t *scratch_pool) -{ - const char *parent_abspath, *name; - const char *repos_relpath, *repos_root, *repos_uuid; - svn_wc__db_status_t status; - svn_kind_t my_kind; - - if (!kind) - kind = &my_kind; - - /* Initialize our return values to the most common (code-wise) values. */ - *wc_root = TRUE; - if (switched) - *switched = FALSE; - - SVN_ERR(svn_wc__db_read_info(&status, kind, NULL, &repos_relpath, - &repos_root, &repos_uuid, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, - db, local_abspath, - scratch_pool, scratch_pool)); - - if (repos_relpath == NULL) - { - /* If we inherit our URL, then we can't be a root, nor switched. */ - *wc_root = FALSE; - return SVN_NO_ERROR; - } - if (*kind != svn_kind_dir) - { - /* File/symlinks cannot be a root. */ - *wc_root = FALSE; - } - else if (status == svn_wc__db_status_added - || status == svn_wc__db_status_deleted) - { - *wc_root = FALSE; - } - else if (status == svn_wc__db_status_server_excluded - || status == svn_wc__db_status_excluded - || status == svn_wc__db_status_not_present) - { - return svn_error_createf( - SVN_ERR_WC_PATH_NOT_FOUND, NULL, - _("The node '%s' was not found."), - svn_dirent_local_style(local_abspath, scratch_pool)); - } - else if (svn_dirent_is_root(local_abspath, strlen(local_abspath))) - return SVN_NO_ERROR; - - if (!*wc_root && switched == NULL ) - return SVN_NO_ERROR; /* No more info needed */ - - svn_dirent_split(&parent_abspath, &name, local_abspath, scratch_pool); - - /* Check if the node is recorded in the parent */ - if (*wc_root) - { - svn_boolean_t is_root; - SVN_ERR(svn_wc__db_is_wcroot(&is_root, db, local_abspath, scratch_pool)); - - if (is_root) - { - /* We're not in the (versioned) parent directory's list of - children, so we must be the root of a distinct working copy. */ - return SVN_NO_ERROR; - } - } - - { - const char *parent_repos_root; - const char *parent_repos_relpath; - const char *parent_repos_uuid; - - SVN_ERR(svn_wc__db_scan_base_repos(&parent_repos_relpath, - &parent_repos_root, - &parent_repos_uuid, - db, parent_abspath, - scratch_pool, scratch_pool)); - - if (strcmp(repos_root, parent_repos_root) != 0 - || strcmp(repos_uuid, parent_repos_uuid) != 0) - { - /* This should never happen (### until we get mixed-repos working - copies). If we're in the parent, then we should be from the - same repository. For this situation, just declare us the root - of a separate, unswitched working copy. */ - return SVN_NO_ERROR; - } - - *wc_root = FALSE; - - if (switched) - { - const char *expected_relpath = svn_relpath_join(parent_repos_relpath, - name, scratch_pool); - - *switched = (strcmp(expected_relpath, repos_relpath) != 0); - } - } - - return SVN_NO_ERROR; -} - -svn_error_t * -svn_wc__internal_is_wc_root(svn_boolean_t *wc_root, - svn_wc__db_t *db, - const char *local_abspath, - apr_pool_t *scratch_pool) +svn_wc_check_root(svn_boolean_t *is_wcroot, + svn_boolean_t *is_switched, + svn_kind_t *kind, + svn_wc_context_t *wc_ctx, + const char *local_abspath, + apr_pool_t *scratch_pool) { - svn_boolean_t is_root; - svn_boolean_t is_switched; - svn_kind_t kind; - svn_error_t *err; SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath)); - err = svn_wc__check_wc_root(&is_root, &kind, &is_switched, - db, local_abspath, scratch_pool); - - if (err) - { - if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND && - err->apr_err != SVN_ERR_WC_NOT_WORKING_COPY) - return svn_error_trace(err); - - return svn_error_create(SVN_ERR_ENTRY_NOT_FOUND, err, err->message); - } - - *wc_root = is_root || is_switched; - - return SVN_NO_ERROR; + return svn_error_trace(svn_wc__db_is_switched(is_wcroot,is_switched, kind, + wc_ctx->db, local_abspath, + scratch_pool)); } svn_error_t * -svn_wc_is_wc_root2(svn_boolean_t *wc_root, - svn_wc_context_t *wc_ctx, - const char *local_abspath, - apr_pool_t *scratch_pool) -{ - return svn_error_trace(svn_wc__internal_is_wc_root(wc_root, wc_ctx->db, - local_abspath, - scratch_pool)); -} - -svn_error_t* -svn_wc__strictly_is_wc_root(svn_boolean_t *wc_root, - svn_wc_context_t *wc_ctx, - const char *local_abspath, - apr_pool_t *scratch_pool) +svn_wc__is_wcroot(svn_boolean_t *is_wcroot, + svn_wc_context_t *wc_ctx, + const char *local_abspath, + apr_pool_t *scratch_pool) { - return svn_error_trace(svn_wc__db_is_wcroot(wc_root, + return svn_error_trace(svn_wc__db_is_wcroot(is_wcroot, wc_ctx->db, local_abspath, scratch_pool)); @@ -5181,9 +5037,9 @@ svn_wc_get_actual_target2(const char **a SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, scratch_pool)); - err = svn_wc__check_wc_root(&is_wc_root, &kind, &is_switched, - wc_ctx->db, local_abspath, - scratch_pool); + err = svn_wc__db_is_switched(&is_wc_root, &is_switched, &kind, + wc_ctx->db, local_abspath, + scratch_pool); if (err) { @@ -5443,7 +5299,7 @@ svn_wc_add_repos_file4(svn_wc_context_t /* If new contents were provided, then we do NOT want to record the file information. We assume the new contents do not match the - "proper" values for TRANSLATED_SIZE and LAST_MOD_TIME. */ + "proper" values for RECORDED_SIZE and RECORDED_TIME. */ record_fileinfo = (new_contents == NULL); /* Install the working copy file (with appropriate translation) from
Modified: subversion/branches/javahl-ra/subversion/libsvn_wc/upgrade.c URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/libsvn_wc/upgrade.c?rev=1426116&r1=1426115&r2=1426116&view=diff ============================================================================== --- subversion/branches/javahl-ra/subversion/libsvn_wc/upgrade.c (original) +++ subversion/branches/javahl-ra/subversion/libsvn_wc/upgrade.c Thu Dec 27 04:03:49 2012 @@ -1169,7 +1169,8 @@ bump_to_23(void *baton, svn_sqlite__db_t svn_sqlite__stmt_t *stmt; svn_boolean_t have_row; - SVN_ERR(svn_sqlite__get_statement(&stmt, sdb, STMT_HAS_WORKING_NODES)); + SVN_ERR(svn_sqlite__get_statement(&stmt, sdb, + STMT_UPGRADE_23_HAS_WORKING_NODES)); SVN_ERR(svn_sqlite__step(&have_row, stmt)); SVN_ERR(svn_sqlite__reset(stmt)); if (have_row) @@ -1753,16 +1754,8 @@ upgrade_to_wcng(void **dir_baton, return SVN_NO_ERROR; } - -/* Return a string indicating the released version (or versions) of - * Subversion that used WC format number WC_FORMAT, or some other - * suitable string if no released version used WC_FORMAT. - * - * ### It's not ideal to encode this sort of knowledge in this low-level - * library. On the other hand, it doesn't need to be updated often and - * should be easily found when it does need to be updated. */ -static const char * -version_string_from_format(int wc_format) +const char * +svn_wc__version_string_from_format(int wc_format) { switch (wc_format) { @@ -1770,6 +1763,7 @@ version_string_from_format(int wc_format case 8: return "1.4"; case 9: return "1.5"; case 10: return "1.6"; + case SVN_WC__WC_NG_VERSION: return "1.7"; } return _("(unreleased development version)"); } @@ -1792,7 +1786,7 @@ svn_wc__upgrade_sdb(int *result_format, svn_dirent_local_style(wcroot_abspath, scratch_pool), start_format, - version_string_from_format(start_format)); + svn_wc__version_string_from_format(start_format)); /* Early WCNG formats no longer supported. */ if (start_format < 19) Modified: subversion/branches/javahl-ra/subversion/libsvn_wc/util.c URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/libsvn_wc/util.c?rev=1426116&r1=1426115&r2=1426116&view=diff ============================================================================== --- subversion/branches/javahl-ra/subversion/libsvn_wc/util.c (original) +++ subversion/branches/javahl-ra/subversion/libsvn_wc/util.c Thu Dec 27 04:03:49 2012 @@ -610,8 +610,9 @@ svn_wc__fetch_base_func(const char **fil err = svn_wc__db_base_get_info(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &checksum, - NULL, NULL, NULL, NULL, sfb->db, - local_abspath, scratch_pool, scratch_pool); + NULL, NULL, NULL, NULL, NULL, + sfb->db, local_abspath, + scratch_pool, scratch_pool); if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND) { svn_error_clear(err); Modified: subversion/branches/javahl-ra/subversion/libsvn_wc/wc-metadata.sql URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/libsvn_wc/wc-metadata.sql?rev=1426116&r1=1426115&r2=1426116&view=diff ============================================================================== --- subversion/branches/javahl-ra/subversion/libsvn_wc/wc-metadata.sql (original) +++ subversion/branches/javahl-ra/subversion/libsvn_wc/wc-metadata.sql Thu Dec 27 04:03:49 2012 @@ -181,8 +181,8 @@ CREATE TABLE ACTUAL_NODE ( PRIMARY KEY (wc_id, local_relpath) ); -CREATE INDEX I_ACTUAL_PARENT ON ACTUAL_NODE (wc_id, parent_relpath); -CREATE INDEX I_ACTUAL_CHANGELIST ON ACTUAL_NODE (changelist); +CREATE UNIQUE INDEX I_ACTUAL_PARENT ON ACTUAL_NODE (wc_id, parent_relpath, + local_relpath); /* ------------------------------------------------------------------------- */ @@ -408,8 +408,11 @@ CREATE TABLE NODES ( /* the kind of the new node. may be "unknown" if the node is not present. */ kind TEXT NOT NULL, - /* serialized skel of this node's properties. NULL if we - have no information about the properties (a non-present node). */ + /* serialized skel of this node's properties (when presence is 'normal' or + 'incomplete'); an empty skel or NULL indicates no properties. NULL if + we have no information about the properties (any other presence). + TODO: Choose & require a single representation for 'no properties'. + */ properties BLOB, /* NULL depth means "default" (typically svn_depth_infinity) */ @@ -483,7 +486,8 @@ CREATE TABLE NODES ( ); -CREATE INDEX I_NODES_PARENT ON NODES (wc_id, parent_relpath, op_depth); +CREATE UNIQUE INDEX I_NODES_PARENT ON NODES (wc_id, parent_relpath, + local_relpath, op_depth); /* I_NODES_MOVED is introduced in format 30 */ CREATE UNIQUE INDEX I_NODES_MOVED ON NODES (wc_id, moved_to, op_depth); @@ -553,7 +557,7 @@ CREATE TABLE EXTERNALS ( /* Repository location fields */ repos_id INTEGER NOT NULL REFERENCES REPOSITORY (id), - /* Either 'normal' or 'excluded' */ + /* Either MAP_NORMAL or MAP_EXCLUDED */ presence TEXT NOT NULL, /* the kind of the external. */ @@ -574,7 +578,6 @@ CREATE TABLE EXTERNALS ( PRIMARY KEY (wc_id, local_relpath) ); -CREATE INDEX I_EXTERNALS_PARENT ON EXTERNALS (wc_id, parent_relpath); CREATE UNIQUE INDEX I_EXTERNALS_DEFINED ON EXTERNALS (wc_id, def_local_relpath, local_relpath); @@ -585,13 +588,14 @@ CREATE UNIQUE INDEX I_EXTERNALS_DEFINED -- STMT_UPGRADE_TO_20 -UPDATE BASE_NODE SET checksum=(SELECT checksum FROM pristine - WHERE md5_checksum=BASE_NODE.checksum) -WHERE EXISTS(SELECT 1 FROM pristine WHERE md5_checksum=BASE_NODE.checksum); - -UPDATE WORKING_NODE SET checksum=(SELECT checksum FROM pristine - WHERE md5_checksum=WORKING_NODE.checksum) -WHERE EXISTS(SELECT 1 FROM pristine WHERE md5_checksum=WORKING_NODE.checksum); +UPDATE BASE_NODE SET checksum = (SELECT checksum FROM pristine + WHERE md5_checksum = BASE_NODE.checksum) +WHERE EXISTS (SELECT 1 FROM pristine WHERE md5_checksum = BASE_NODE.checksum); + +UPDATE WORKING_NODE SET checksum = (SELECT checksum FROM pristine + WHERE md5_checksum = WORKING_NODE.checksum) +WHERE EXISTS (SELECT 1 FROM pristine + WHERE md5_checksum = WORKING_NODE.checksum); INSERT INTO NODES ( wc_id, local_relpath, op_depth, parent_relpath, @@ -666,6 +670,9 @@ PRAGMA user_version = 22; -- STMT_UPGRADE_TO_23 PRAGMA user_version = 23; +-- STMT_UPGRADE_23_HAS_WORKING_NODES +SELECT 1 FROM nodes WHERE op_depth > 0 +LIMIT 1 /* ------------------------------------------------------------------------- */ @@ -731,9 +738,9 @@ LIMIT 1 -- STMT_UPGRADE_TO_28 -UPDATE NODES SET checksum=(SELECT checksum FROM pristine - WHERE md5_checksum=nodes.checksum) -WHERE EXISTS(SELECT 1 FROM pristine WHERE md5_checksum=nodes.checksum); +UPDATE NODES SET checksum = (SELECT checksum FROM pristine + WHERE md5_checksum = nodes.checksum) +WHERE EXISTS (SELECT 1 FROM pristine WHERE md5_checksum = nodes.checksum); PRAGMA user_version = 28; @@ -819,6 +826,8 @@ WHERE wc_id = ?1 and local_relpath = ?2 inherited properties */ -- STMT_UPGRADE_TO_31 ALTER TABLE NODES ADD COLUMN inherited_props BLOB; +DROP INDEX IF EXISTS I_ACTUAL_CHANGELIST; +DROP INDEX IF EXISTS I_EXTERNALS_PARENT; PRAGMA user_version = 31; @@ -845,6 +854,23 @@ WHERE (l.local_relpath = '' AND l.repos_ '/')) /* ------------------------------------------------------------------------- */ +/* Format 32 .... */ +-- STMT_UPGRADE_TO_32 + +/* Drop old index. ### Remove this part from the upgrade to 31 once bumped */ +DROP INDEX IF EXISTS I_ACTUAL_CHANGELIST; +DROP INDEX IF EXISTS I_EXTERNALS_PARENT; +CREATE INDEX I_EXTERNALS_PARENT ON EXTERNALS (wc_id, parent_relpath); + +DROP INDEX I_NODES_PARENT; +CREATE UNIQUE INDEX I_NODES_PARENT ON NODES (wc_id, parent_relpath, + local_relpath, op_depth); + +DROP INDEX I_ACTUAL_PARENT; +CREATE UNIQUE INDEX I_ACTUAL_PARENT ON ACTUAL (wc_id, parent_relpath, + local_relpath); + +/* ------------------------------------------------------------------------- */ /* Format YYY introduces new handling for conflict information. */ -- format: YYY @@ -901,8 +927,8 @@ CREATE TABLE ACTUAL_NODE ( PRIMARY KEY (wc_id, local_relpath) ); -CREATE INDEX I_ACTUAL_PARENT ON ACTUAL_NODE (wc_id, parent_relpath); -CREATE INDEX I_ACTUAL_CHANGELIST ON ACTUAL_NODE (changelist); +CREATE UNIQUE INDEX I_ACTUAL_PARENT ON ACTUAL_NODE (wc_id, parent_relpath, + local_relpath); INSERT INTO ACTUAL_NODE SELECT wc_id, local_relpath, parent_relpath, properties, conflict_old, Modified: subversion/branches/javahl-ra/subversion/libsvn_wc/wc-queries.sql URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/libsvn_wc/wc-queries.sql?rev=1426116&r1=1426115&r2=1426116&view=diff ============================================================================== --- subversion/branches/javahl-ra/subversion/libsvn_wc/wc-queries.sql (original) +++ subversion/branches/javahl-ra/subversion/libsvn_wc/wc-queries.sql Thu Dec 27 04:03:49 2012 @@ -29,7 +29,7 @@ -- STMT_SELECT_NODE_INFO SELECT op_depth, repos_id, repos_path, presence, kind, revision, checksum, translated_size, changed_revision, changed_date, changed_author, depth, - symlink_target, last_mod_time, properties, moved_here + symlink_target, last_mod_time, properties, moved_here, inherited_props FROM nodes WHERE wc_id = ?1 AND local_relpath = ?2 ORDER BY op_depth DESC @@ -38,6 +38,7 @@ ORDER BY op_depth DESC SELECT op_depth, nodes.repos_id, nodes.repos_path, presence, kind, revision, checksum, translated_size, changed_revision, changed_date, changed_author, depth, symlink_target, last_mod_time, properties, moved_here, + inherited_props, /* All the columns until now must match those returned by STMT_SELECT_NODE_INFO. The implementation of svn_wc__db_read_info() assumes that these columns are followed by the lock information) */ @@ -97,7 +98,7 @@ WHERE wc_id = ?1 AND local_relpath = ?2 -- STMT_SELECT_LOWEST_WORKING_NODE SELECT op_depth, presence FROM nodes -WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > 0 +WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > ?3 ORDER BY op_depth LIMIT 1 @@ -156,7 +157,7 @@ VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, SELECT local_relpath, kind FROM nodes n WHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) AND op_depth = 0 - AND presence in ('normal', 'incomplete') + AND presence in (MAP_NORMAL, MAP_INCOMPLETE) AND NOT EXISTS(SELECT 1 FROM NODES w WHERE w.wc_id = ?1 AND w.local_relpath = n.local_relpath AND op_depth > 0) @@ -167,7 +168,7 @@ SELECT local_relpath, kind, checksum, tr FROM nodes n WHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) - AND presence in ('normal', 'incomplete') + AND presence in (MAP_NORMAL, MAP_INCOMPLETE) AND op_depth = (SELECT MAX(op_depth) FROM NODES w WHERE w.wc_id = ?1 @@ -197,12 +198,12 @@ WHERE wc_id = ?1 AND IS_STRICT_DESCENDAN WHERE w.wc_id = ?1 AND w.local_relpath = actual_node.local_relpath AND op_depth > 0 - AND presence in ('normal', 'incomplete', 'not-present')) + AND presence in (MAP_NORMAL, MAP_INCOMPLETE, MAP_NOT_PRESENT)) -- STMT_DELETE_WORKING_BASE_DELETE DELETE FROM nodes WHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) - AND presence = 'base-deleted' + AND presence = MAP_BASE_DELETED AND op_depth > 0 AND op_depth = (SELECT MIN(op_depth) FROM nodes n WHERE n.wc_id = ?1 @@ -219,15 +220,43 @@ DELETE FROM nodes WHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) AND op_depth = 0 +-- STMT_DELETE_WORKING_OP_DEPTH +DELETE FROM nodes +WHERE wc_id = ?1 + AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) + AND op_depth = ?3 + +-- STMT_SELECT_LOCAL_RELPATH_OP_DEPTH +SELECT local_relpath +FROM nodes +WHERE wc_id = ?1 + AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) + AND op_depth = ?3 + +-- STMT_COPY_NODE_MOVE +INSERT OR REPLACE 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, moved_here ) +SELECT + wc_id, ?4 /*local_relpath */, ?5 /*op_depth*/, ?6 /* 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, 1 +FROM nodes +WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3 + -- STMT_SELECT_OP_DEPTH_CHILDREN -SELECT local_relpath FROM nodes +SELECT local_relpath, kind FROM nodes WHERE wc_id = ?1 AND parent_relpath = ?2 AND op_depth = ?3 AND (?3 != 0 OR file_external is NULL) -- STMT_SELECT_GE_OP_DEPTH_CHILDREN SELECT 1 FROM nodes WHERE wc_id = ?1 AND parent_relpath = ?2 - AND (op_depth > ?3 OR (op_depth = ?3 AND presence != 'base-deleted')) + AND (op_depth > ?3 OR (op_depth = ?3 AND presence != MAP_BASE_DELETED)) UNION ALL SELECT 1 FROM ACTUAL_NODE WHERE wc_id = ?1 AND parent_relpath = ?2 @@ -238,21 +267,21 @@ DELETE FROM nodes WHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) AND (op_depth < ?3 - OR (op_depth = ?3 AND presence = 'base-deleted')) + OR (op_depth = ?3 AND presence = MAP_BASE_DELETED)) /* Get not-present descendants of a copied node. Not valid for the wc-root */ -- STMT_SELECT_NOT_PRESENT_DESCENDANTS SELECT local_relpath FROM nodes WHERE wc_id = ?1 AND op_depth = ?3 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) - AND presence = 'not-present' + AND presence = MAP_NOT_PRESENT -- STMT_COMMIT_DESCENDANT_TO_BASE UPDATE NODES SET op_depth = 0, repos_id = ?4, repos_path = ?5, revision = ?6, moved_here = NULL, moved_to = NULL, dav_cache = NULL, - presence = CASE presence WHEN 'normal' THEN 'normal' - WHEN 'excluded' THEN 'excluded' - ELSE 'not-present' END + presence = CASE presence WHEN MAP_NORMAL THEN MAP_NORMAL + WHEN MAP_EXCLUDED THEN MAP_EXCLUDED + ELSE MAP_NOT_PRESENT END WHERE wc_id = ?1 AND local_relpath = ?2 and op_depth = ?3 -- STMT_SELECT_NODE_CHILDREN @@ -273,11 +302,7 @@ WHERE wc_id = ?1 AND parent_relpath = ?2 OR (op_depth = (SELECT MAX(op_depth) FROM nodes WHERE wc_id = ?1 AND local_relpath = ?2) - AND presence != 'base-deleted')) - --- STMT_SELECT_BASE_PROPS -SELECT properties FROM nodes -WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 + AND presence != MAP_BASE_DELETED)) -- STMT_SELECT_NODE_PROPS SELECT properties, presence FROM nodes @@ -288,17 +313,6 @@ ORDER BY op_depth DESC SELECT properties FROM actual_node WHERE wc_id = ?1 AND local_relpath = ?2 --- STMT_UPDATE_NODE_BASE_PROPS -UPDATE nodes SET properties = ?3 -WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 - --- STMT_UPDATE_NODE_WORKING_PROPS -UPDATE nodes SET properties = ?3 -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_UPDATE_ACTUAL_PROPS UPDATE actual_node SET properties = ?3 WHERE wc_id = ?1 AND local_relpath = ?2 @@ -407,10 +421,6 @@ 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) --- STMT_UPDATE_NODE_FILEINFO_OPDEPTH -UPDATE nodes SET translated_size = ?3, last_mod_time = ?4 -WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?5 - -- STMT_INSERT_ACTUAL_CONFLICT INSERT INTO actual_node (wc_id, local_relpath, conflict_data, parent_relpath) VALUES (?1, ?2, ?3, ?4) @@ -426,7 +436,7 @@ WHERE wc_id = ?1 AND local_relpath = (SELECT local_relpath FROM targets_list AS t WHERE wc_id = ?1 AND t.local_relpath = actual_node.local_relpath - AND kind = 'file') + AND kind = MAP_FILE) -- STMT_UPDATE_ACTUAL_CLEAR_CHANGELIST UPDATE actual_node SET changelist = NULL @@ -439,7 +449,7 @@ SELECT wc_id, local_relpath, 7, ?3 FROM targets_list WHERE wc_id = ?1 AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) - AND kind = 'dir' + AND kind = MAP_DIR -- STMT_RESET_ACTUAL_WITH_CHANGELIST REPLACE INTO actual_node ( @@ -478,10 +488,6 @@ BEGIN WHERE new.changelist IS NOT NULL; END --- STMT_INSERT_CHANGELIST_LIST -INSERT INTO changelist_list(wc_id, local_relpath, notify, changelist) -VALUES (?1, ?2, ?3, ?4) - -- STMT_FINALIZE_CHANGELIST DROP TRIGGER trigger_changelist_list_change; DROP TABLE changelist_list; @@ -519,7 +525,7 @@ SELECT wc_id, local_relpath, parent_relp FROM nodes_current WHERE wc_id = ?1 AND parent_relpath = ?2 - AND kind = 'file' + AND kind = MAP_FILE -- STMT_INSERT_TARGET_DEPTH_IMMEDIATES INSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind) @@ -551,7 +557,7 @@ SELECT N.wc_id, N.local_relpath, N.paren ON A.wc_id = N.wc_id AND A.local_relpath = N.local_relpath WHERE N.wc_id = ?1 AND N.parent_relpath = ?2 - AND kind = 'file' + AND kind = MAP_FILE AND A.changelist = ?3 -- STMT_INSERT_TARGET_WITH_CHANGELIST_DEPTH_IMMEDIATES @@ -619,8 +625,8 @@ WHERE wc_id = ?1 AND local_relpath = ?2 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' + WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > ?3) + AND presence = MAP_BASE_DELETED -- STMT_DELETE_ALL_LAYERS DELETE FROM nodes @@ -651,7 +657,7 @@ WHERE wc_id = ?1 AND (changelist IS NULL OR NOT EXISTS (SELECT 1 FROM nodes_current c WHERE c.wc_id = ?1 AND c.local_relpath = ?2 - AND c.kind = 'file')) + AND c.kind = MAP_FILE)) -- STMT_DELETE_ACTUAL_NODE_LEAVING_CHANGELIST_RECURSIVE DELETE FROM actual_node @@ -662,7 +668,7 @@ WHERE wc_id = ?1 OR NOT EXISTS (SELECT 1 FROM nodes_current c WHERE c.wc_id = ?1 AND c.local_relpath = actual_node.local_relpath - AND c.kind = 'file')) + AND c.kind = MAP_FILE)) -- STMT_CLEAR_ACTUAL_NODE_LEAVING_CHANGELIST UPDATE actual_node @@ -691,7 +697,7 @@ WHERE wc_id = ?1 -- STMT_UPDATE_NODE_BASE_DEPTH UPDATE nodes SET depth = ?3 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 - AND kind='dir' + AND kind=MAP_DIR -- STMT_UPDATE_NODE_BASE_PRESENCE UPDATE nodes SET presence = ?3 @@ -745,6 +751,9 @@ WHERE refcount = 0 DELETE FROM pristine WHERE checksum = ?1 AND refcount = 0 +-- STMT_VACUUM +VACUUM + -- STMT_SELECT_CONFLICT_VICTIMS SELECT local_relpath, conflict_data FROM actual_node @@ -798,9 +807,9 @@ INSERT OR REPLACE 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, dav_cache, symlink_target, - file_external ) + inherited_props, file_external ) VALUES (?1, ?2, 0, - ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14, ?15, ?16, + ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14, ?15, ?16, ?17, (SELECT file_external FROM nodes WHERE wc_id = ?1 AND local_relpath = ?2 @@ -810,23 +819,20 @@ VALUES (?1, ?2, 0, INSERT OR REPLACE INTO nodes ( wc_id, local_relpath, op_depth, parent_relpath, presence, kind) -SELECT wc_id, local_relpath, ?3 /*op_depth*/, - parent_relpath, ?4 /*presence*/, kind -FROM nodes -WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 +VALUES(?1, ?2, ?3, ?4, MAP_BASE_DELETED, ?5) /* If this query is updated, STMT_INSERT_DELETE_LIST should too. */ -- STMT_INSERT_DELETE_FROM_NODE_RECURSIVE INSERT INTO nodes ( wc_id, local_relpath, op_depth, parent_relpath, presence, kind) -SELECT wc_id, local_relpath, ?4 /*op_depth*/, parent_relpath, 'base-deleted', +SELECT wc_id, local_relpath, ?4 /*op_depth*/, parent_relpath, MAP_BASE_DELETED, kind FROM nodes WHERE wc_id = ?1 AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) AND op_depth = ?3 - AND presence NOT IN ('base-deleted', 'not-present', 'excluded', 'server-excluded') + AND presence NOT IN (MAP_BASE_DELETED, MAP_NOT_PRESENT, MAP_EXCLUDED, MAP_SERVER_EXCLUDED) -- STMT_INSERT_WORKING_NODE_FROM_BASE_COPY INSERT INTO nodes ( @@ -845,7 +851,7 @@ WHERE wc_id = ?1 AND local_relpath = ?2 INSERT INTO nodes ( wc_id, local_relpath, op_depth, parent_relpath, presence, kind) SELECT wc_id, local_relpath, ?3 /*op_depth*/, parent_relpath, - 'base-deleted', kind + MAP_BASE_DELETED, kind FROM nodes WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 @@ -864,7 +870,7 @@ LIMIT 1 SELECT local_relpath FROM nodes WHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) - AND op_depth = 0 AND presence = 'server-excluded' + AND op_depth = 0 AND presence = MAP_SERVER_EXCLUDED LIMIT 1 /* Select all excluded nodes. Not valid on the WC-root */ @@ -873,7 +879,7 @@ SELECT local_relpath FROM nodes WHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) AND op_depth = 0 - AND (presence = 'server-excluded' OR presence = 'excluded') + AND (presence = MAP_SERVER_EXCLUDED OR presence = MAP_EXCLUDED) /* Creates a copy from one top level NODE to a different location */ -- STMT_INSERT_WORKING_NODE_COPY_FROM @@ -948,7 +954,7 @@ WHERE wc_id = ?1 DELETE FROM externals WHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) - AND kind != 'dir' + AND kind != MAP_DIR -- STMT_DELETE_EXTERNAL_REGISTATIONS DELETE FROM externals @@ -1011,7 +1017,7 @@ WHERE wc_id = ?1 AND local_relpath = ?2 * WHERE wc_id = ?1 * AND (local_relpath = ?2 * OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) - * AND kind = 'dir' AND presence IN ('normal', 'incomplete') + * AND kind = MAP_DIR AND presence IN (MAP_NORMAL, MAP_INCOMPLETE) * ### But it would take a double table scan execution plan for it. * ### Maybe there is something else going on? */ SELECT IFNULL((SELECT properties FROM actual_node a @@ -1020,7 +1026,7 @@ SELECT IFNULL((SELECT properties FROM ac local_relpath, depth FROM nodes_current n WHERE wc_id = ?1 AND local_relpath = ?2 - AND kind = 'dir' AND presence IN ('normal', 'incomplete') + AND kind = MAP_DIR AND presence IN (MAP_NORMAL, MAP_INCOMPLETE) UNION ALL SELECT IFNULL((SELECT properties FROM actual_node a WHERE a.wc_id = ?1 AND A.local_relpath = n.local_relpath), @@ -1028,7 +1034,7 @@ SELECT IFNULL((SELECT properties FROM ac local_relpath, depth FROM nodes_current n WHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) - AND kind = 'dir' AND presence IN ('normal', 'incomplete') + AND kind = MAP_DIR AND presence IN (MAP_NORMAL, MAP_INCOMPLETE) -- STMT_SELECT_CURRENT_PROPS_RECURSIVE /* ### Ugly OR to make sqlite use the proper optimizations */ @@ -1066,16 +1072,12 @@ VALUES (?1, ?2, ?3, ?4) -- STMT_SELECT_ALL_FILES SELECT local_relpath FROM nodes_current -WHERE wc_id = ?1 AND parent_relpath = ?2 AND kind = 'file' +WHERE wc_id = ?1 AND parent_relpath = ?2 AND kind = MAP_FILE -- STMT_UPDATE_NODE_PROPS UPDATE nodes SET properties = ?4 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3 --- STMT_HAS_WORKING_NODES -SELECT 1 FROM nodes WHERE op_depth > 0 -LIMIT 1 - /* -------------------------------------------------------------------------- * Complex queries for callback walks, caching results in a temporary table. * @@ -1104,13 +1106,13 @@ INSERT INTO target_prop_cache(local_relp JOIN nodes_current AS n ON t.wc_id= n.wc_id AND t.local_relpath = n.local_relpath WHERE t.wc_id = ?1 - AND (presence='normal' OR presence='incomplete') + AND (presence=MAP_NORMAL OR presence=MAP_INCOMPLETE) -- STMT_CACHE_TARGET_PRISTINE_PROPS INSERT INTO target_prop_cache(local_relpath, kind, properties) SELECT n.local_relpath, n.kind, CASE n.presence - WHEN 'base-deleted' + WHEN MAP_BASE_DELETED THEN (SELECT properties FROM nodes AS p WHERE p.wc_id = n.wc_id AND p.local_relpath = n.local_relpath @@ -1121,9 +1123,9 @@ INSERT INTO target_prop_cache(local_relp JOIN nodes_current AS n ON t.wc_id= n.wc_id AND t.local_relpath = n.local_relpath WHERE t.wc_id = ?1 - AND (presence = 'normal' - OR presence = 'incomplete' - OR presence = 'base-deleted') + AND (presence = MAP_NORMAL + OR presence = MAP_INCOMPLETE + OR presence = MAP_BASE_DELETED) -- STMT_SELECT_ALL_TARGET_PROP_CACHE SELECT local_relpath, properties FROM target_prop_cache @@ -1246,7 +1248,7 @@ WHERE wc_id = ?1 AND op_depth = (SELECT MAX(s.op_depth) FROM nodes AS s WHERE s.wc_id = ?1 AND s.local_relpath = n.local_relpath) - AND presence NOT IN ('base-deleted', 'not-present', 'excluded', 'server-excluded') + AND presence NOT IN (MAP_BASE_DELETED, MAP_NOT_PRESENT, MAP_EXCLUDED, MAP_SERVER_EXCLUDED) -- STMT_SELECT_DELETE_LIST SELECT local_relpath FROM delete_list @@ -1266,7 +1268,7 @@ SELECT MIN(revision), MAX(revision), WHERE wc_id = ?1 AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) - AND presence IN ('normal', 'incomplete') + AND presence IN (MAP_NORMAL, MAP_INCOMPLETE) AND file_external IS NULL AND op_depth = 0 @@ -1276,8 +1278,8 @@ WHERE wc_id = ?1 AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) AND op_depth = 0 - AND (presence IN ('server-excluded', 'excluded') - OR depth NOT IN ('infinity', 'unknown')) + AND (presence IN (MAP_SERVER_EXCLUDED, MAP_EXCLUDED) + OR depth NOT IN (MAP_DEPTH_INFINITY, MAP_DEPTH_UNKNOWN)) AND file_external IS NULL LIMIT 1 @@ -1372,8 +1374,8 @@ WHERE wc_id = ?1 AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) AND op_depth = 0 - AND kind='file' - AND presence='normal' + AND kind=MAP_FILE + AND presence=MAP_NORMAL AND file_external IS NULL /* ### FIXME: op-depth? What about multiple moves? */ @@ -1444,22 +1446,29 @@ SET inherited_props = ?3 WHERE (wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0) /* Select a single path if its base node has cached inherited properties. */ --- STMT_SELECT_INODES -SELECT local_relpath FROM nodes +-- STMT_SELECT_IPROPS_NODE +SELECT local_relpath, repos_path FROM nodes WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 AND (inherited_props not null) -/* Select all paths whose base nodes at or below a given path, which +/* Select all paths whose base nodes are below a given path, which have cached inherited properties. */ --- STMT_SELECT_INODES_RECURSIVE -SELECT local_relpath FROM nodes +-- STMT_SELECT_IPROPS_RECURSIVE +SELECT local_relpath, repos_path FROM nodes WHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) AND op_depth = 0 AND (inherited_props not null) +-- STMT_SELECT_IPROPS_CHILDREN +SELECT local_relpath, repos_path FROM nodes +WHERE wc_id = ?1 + AND parent_relpath = ?2 + AND op_depth = 0 + AND (inherited_props not null) + /* ------------------------------------------------------------------------- */ /* Grab all the statements related to the schema. */ Modified: subversion/branches/javahl-ra/subversion/libsvn_wc/wc.h URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/libsvn_wc/wc.h?rev=1426116&r1=1426115&r2=1426116&view=diff ============================================================================== --- subversion/branches/javahl-ra/subversion/libsvn_wc/wc.h (original) +++ subversion/branches/javahl-ra/subversion/libsvn_wc/wc.h Thu Dec 27 04:03:49 2012 @@ -188,6 +188,16 @@ extern "C" { /* A version < this has no work queue (see workqueue.h). */ #define SVN_WC__HAS_WORK_QUEUE 13 +/* Return a string indicating the released version (or versions) of + * Subversion that used WC format number WC_FORMAT, or some other + * suitable string if no released version used WC_FORMAT. + * + * ### It's not ideal to encode this sort of knowledge in this low-level + * library. On the other hand, it doesn't need to be updated often and + * should be easily found when it does need to be updated. */ +const char * +svn_wc__version_string_from_format(int wc_format); + /* Return true iff error E indicates an "is not a working copy" type of error, either because something wasn't a working copy at all, or because it's a working copy from a previous version (in need of @@ -378,17 +388,24 @@ svn_wc__internal_file_modified_p(svn_boo apr_pool_t *scratch_pool); -/* Merge the difference between LEFT_ABSPATH and RIGHT_ABSPATH into - TARGET_ABSPATH, return the appropriate work queue operations in - *WORK_ITEMS. - - Note that, in the case of updating, the update can have sent new - properties, which could affect the way the wc target is - detranslated and compared with LEFT and RIGHT for merging. - - The merge result is stored in *MERGE_OUTCOME and merge conflicts - are marked in MERGE_RESULT using LEFT_LABEL, RIGHT_LABEL and - TARGET_LABEL. +/* Prepare to merge a file content change into the working copy. This + does not merge properties; see svn_wc__merge_props() for that. This + ### [does | does not] + change the working file on disk as well as returning work items. + + Merge the difference between LEFT_ABSPATH and RIGHT_ABSPATH into + TARGET_ABSPATH. + + Set *WORK_ITEMS to the appropriate work queue operations. + + If there are any conflicts, append a conflict description to + *CONFLICT_SKEL. (First allocate *CONFLICT_SKEL from RESULT_POOL if + it is initially NULL. CONFLICT_SKEL itself must not be NULL.) + Also, unless it is considered to be a 'binary' file, mark any + conflicts in the text of the file TARGET_ABSPATH using LEFT_LABEL, + RIGHT_LABEL and TARGET_LABEL. + + Set *MERGE_OUTCOME to indicate the result. When DRY_RUN is true, no actual changes are made to the working copy. @@ -402,11 +419,17 @@ svn_wc__internal_file_modified_p(svn_boo retrieved. (Interesting for merging file externals). ACTUAL_PROPS is the set of actual properties before merging; used for - detranslating the file before merging. + detranslating the file before merging. This is necessary because, in + the case of updating, the update can have sent new properties, so we + cannot simply fetch and use the current actual properties. + + ### Is ACTUAL_PROPS still necessary, now that we first prepare the + content change and property change and then apply them both to + the WC together? Property changes sent by the update are provided in PROP_DIFF. - For a complete description, see svn_wc_merge3() for which this is + For a complete description, see svn_wc_merge5() for which this is the (loggy) implementation. *WORK_ITEMS will be allocated in RESULT_POOL. All temporary allocations @@ -607,23 +630,6 @@ svn_wc__internal_get_repos_relpath(const apr_pool_t *result_pool, apr_pool_t *scratch_pool); -/* Internal version of svn_wc__get_iprops() */ -svn_error_t * -svn_wc__internal_get_iprops(apr_array_header_t **inherited_props, - svn_wc__db_t *db, - const char *local_abspath, - const char *propname, - apr_pool_t *result_pool, - apr_pool_t *scratch_pool); - -/* Internal version of svn_wc_is_wc_root2() */ -svn_error_t * -svn_wc__internal_is_wc_root(svn_boolean_t *wc_root, - svn_wc__db_t *db, - const char *local_abspath, - apr_pool_t *scratch_pool); - - /* Upgrade the wc sqlite database given in SDB for the wc located at WCROOT_ABSPATH. It's current/starting format is given by START_FORMAT. After the upgrade is complete (to as far as the automatic upgrade will @@ -658,27 +664,6 @@ svn_wc__wipe_postupgrade(const char *dir void *cancel_baton, apr_pool_t *scratch_pool); -/* Check whether a node is a working copy root or switched. - * - * If LOCAL_ABSPATH is the root of a working copy, set *WC_ROOT to TRUE, - * otherwise to FALSE. - * - * If KIND is not null, set *KIND to the node type of LOCAL_ABSPATH. - * - * If LOCAL_ABSPATH is switched against its parent in the same working copy - * set *SWITCHED to TRUE, otherwise to FALSE. SWITCHED can be NULL - * if the result is not important. - * - * Use SCRATCH_POOL for temporary allocations. - */ -svn_error_t * -svn_wc__check_wc_root(svn_boolean_t *wc_root, - svn_kind_t *kind, - svn_boolean_t *switched, - svn_wc__db_t *db, - const char *local_abspath, - apr_pool_t *scratch_pool); - /* Ensure LOCAL_ABSPATH is still locked in DB. Returns the error * SVN_ERR_WC_NOT_LOCKED if this is not the case. */ @@ -772,6 +757,16 @@ svn_wc__fetch_base_func(const char **fil apr_pool_t *result_pool, apr_pool_t *scratch_pool); +/* Find duplicate targets in *EXTERNALS, a list of svn_wc_external_item2_t* + * elements, and store each target string in *DUPLICATE_TARGETS as const + * char * elements. *DUPLICATE_TARGETS will be NULL if no duplicates were + * found. */ +svn_error_t * +svn_wc__externals_find_target_dups(apr_array_header_t **duplicate_targets, + apr_array_header_t *externals, + apr_pool_t *pool, + apr_pool_t *scratch_pool); + #ifdef __cplusplus } #endif /* __cplusplus */
