log msg += wc_db_pristine.c
hwright_at_apache.org wrote on Mon, Mar 14, 2011 at 19:32:04 -0000:
> Author: hwright
> Date: Mon Mar 14 19:32:04 2011
> New Revision: 1081528
>
> URL: http://svn.apache.org/viewvc?rev=1081528&view=rev
> Log:
> Fix the svnversion test 1 failure introduced in r1081510. This involves
> exposing the wc_db txn handler to the larger library, rather than just
> wc_db.c.
>
> One of the pristine handling functions was using an SQLite txn, which
> couldn't be nested. This change allows that txn to be nested.
>
> * subversion/libsvn_wc/wc_db_txn.c:
> New, copied from wc_db.c, and everything but the txn handling stripped out.
>
> * subversion/libsvn_wc/wc_db_private.h
> (svn_wc__db_txn_callback_t, svn_wc__db_with_txn): New.
>
> * subversion/libsvn_wc/wc_db.c
> (db_txn_callback_t, txn_baton_t, run_txn, with_db_txn): Remove.
> [elsewhere]: Update callers to new function name.
>
> Added:
> subversion/trunk/subversion/libsvn_wc/wc_db_txn.c
> - copied, changed from r1081515, subversion/trunk/subversion/libsvn_wc/wc_db.c
> Modified:
> subversion/trunk/subversion/libsvn_wc/wc_db.c
> subversion/trunk/subversion/libsvn_wc/wc_db_pristine.c
> subversion/trunk/subversion/libsvn_wc/wc_db_private.h
>
> Modified: subversion/trunk/subversion/libsvn_wc/wc_db.c
> URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db.c?rev=1081528&r1=1081527&r2=1081528&view=diff
> ==============================================================================
> --- subversion/trunk/subversion/libsvn_wc/wc_db.c (original)
> +++ subversion/trunk/subversion/libsvn_wc/wc_db.c Mon Mar 14 19:32:04 2011
> @@ -309,63 +309,6 @@ wclock_owns_lock(svn_boolean_t *own_lock
>
>
>
> -/* Some helpful transaction helpers.
> -
> - Instead of directly using SQLite transactions, these wrappers take care of
> - simple cases by allowing consumers to worry about wrapping the wcroot and
> - local_relpath, which are almost always used within the transaction.
> -
> - This also means if we later want to implement some wc_db-specific txn
> - handling, we have a convenient place to do it.
> - */
> -
> -/* A callback which supplies WCROOTs and LOCAL_RELPATHs. */
> -typedef svn_error_t *(*db_txn_callback_t)(void *baton,
> - svn_wc__db_wcroot_t *wcroot,
> - const char *local_relpath,
> - apr_pool_t *scratch_pool);
> -
> -/* Baton for use with run_txn() and with_db_txn(). */
> -struct txn_baton_t
> -{
> - svn_wc__db_wcroot_t *wcroot;
> - const char *local_relpath;
> -
> - db_txn_callback_t cb_func;
> - void *cb_baton;
> -};
> -
> -
> -/* Unwrap the sqlite transaction into a wc_db txn.
> - Implements svn_sqlite__transaction_callback_t. */
> -static svn_error_t *
> -run_txn(void *baton, svn_sqlite__db_t *db, apr_pool_t *scratch_pool)
> -{
> - struct txn_baton_t *tb = baton;
> -
> - return svn_error_return(
> - tb->cb_func(tb->cb_baton, tb->wcroot, tb->local_relpath, scratch_pool));
> -}
> -
> -
> -/* Run CB_FUNC in a SQLite transaction with CB_BATON, using WCROOT and
> - LOCAL_RELPATH. If callbacks require additional information, they may
> - provide it using CB_BATON. */
> -static svn_error_t *
> -with_db_txn(svn_wc__db_wcroot_t *wcroot,
> - const char *local_relpath,
> - db_txn_callback_t cb_func,
> - void *cb_baton,
> - apr_pool_t *scratch_pool)
> -{
> - struct txn_baton_t tb = { wcroot, local_relpath, cb_func, cb_baton };
> -
> - return svn_error_return(
> - svn_sqlite__with_lock(wcroot->sdb, run_txn, &tb, scratch_pool));
> -}
> -
> -
> -
> /* Return the absolute path, in local path style, of LOCAL_RELPATH
> in WCROOT. */
> static const char *
> @@ -1493,8 +1436,8 @@ svn_wc__db_base_add_directory(svn_wc__db
>
> Note: old children can stick around, even if they are no longer present
> in this directory's revision. */
> - SVN_ERR(with_db_txn(wcroot, local_relpath, insert_base_node, &ibb,
> - scratch_pool));
> + SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, insert_base_node, &ibb,
> + scratch_pool));
>
> /* ### worry about flushing child subdirs? */
> SVN_ERR(flush_entries(db, wcroot, local_abspath, scratch_pool));
> @@ -1566,8 +1509,8 @@ svn_wc__db_base_add_file(svn_wc__db_t *d
> ### or maybe let caller deal with that, if there is a possibility
> ### of a node kind change (rather than eat an extra lookup here). */
>
> - SVN_ERR(with_db_txn(wcroot, local_relpath, insert_base_node, &ibb,
> - scratch_pool));
> + SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, insert_base_node, &ibb,
> + scratch_pool));
>
> SVN_ERR(flush_entries(db, wcroot, local_abspath, scratch_pool));
> return SVN_NO_ERROR;
> @@ -1636,8 +1579,8 @@ svn_wc__db_base_add_symlink(svn_wc__db_t
> ### or maybe let caller deal with that, if there is a possibility
> ### of a node kind change (rather than eat an extra lookup here). */
>
> - SVN_ERR(with_db_txn(wcroot, local_relpath, insert_base_node, &ibb,
> - scratch_pool));
> + SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, insert_base_node, &ibb,
> + scratch_pool));
>
> SVN_ERR(flush_entries(db, wcroot, local_abspath, scratch_pool));
> return SVN_NO_ERROR;
> @@ -1701,8 +1644,8 @@ add_absent_excluded_not_present_node(svn
> ### or maybe let caller deal with that, if there is a possibility
> ### of a node kind change (rather than eat an extra lookup here). */
>
> - SVN_ERR(with_db_txn(wcroot, local_relpath, insert_base_node, &ibb,
> - scratch_pool));
> + SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, insert_base_node, &ibb,
> + scratch_pool));
>
> SVN_ERR(flush_entries(db, wcroot, local_abspath, scratch_pool));
>
> @@ -1750,7 +1693,7 @@ svn_wc__db_base_add_not_present_node(svn
> }
>
>
> -/* This implements db_txn_callback_t */
> +/* This implements svn_wc__db_txn_callback_t */
> static svn_error_t *
> db_base_remove(void *baton,
> svn_wc__db_wcroot_t *wcroot,
> @@ -1802,8 +1745,8 @@ svn_wc__db_base_remove(svn_wc__db_t *db,
> scratch_pool, scratch_pool));
> VERIFY_USABLE_WCROOT(wcroot);
>
> - SVN_ERR(with_db_txn(wcroot, local_relpath, db_base_remove, NULL,
> - scratch_pool));
> + SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, db_base_remove, NULL,
> + scratch_pool));
>
> SVN_ERR(flush_entries(db, wcroot, local_abspath, scratch_pool));
>
> @@ -2778,8 +2721,8 @@ svn_wc__db_op_copy_dir(svn_wc__db_t *db,
>
> iwb.work_items = work_items;
>
> - SVN_ERR(with_db_txn(wcroot, local_relpath, insert_working_node, &iwb,
> - scratch_pool));
> + SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, insert_working_node, &iwb,
> + scratch_pool));
> SVN_ERR(flush_entries(db, wcroot, local_abspath, scratch_pool));
>
> return SVN_NO_ERROR;
> @@ -2851,8 +2794,8 @@ svn_wc__db_op_copy_file(svn_wc__db_t *db
>
> iwb.work_items = work_items;
>
> - SVN_ERR(with_db_txn(wcroot, local_relpath, insert_working_node, &iwb,
> - scratch_pool));
> + SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, insert_working_node, &iwb,
> + scratch_pool));
> SVN_ERR(flush_entries(db, wcroot, local_abspath, scratch_pool));
>
> return SVN_NO_ERROR;
> @@ -2920,8 +2863,8 @@ svn_wc__db_op_copy_symlink(svn_wc__db_t
>
> iwb.work_items = work_items;
>
> - SVN_ERR(with_db_txn(wcroot, local_relpath, insert_working_node, &iwb,
> - scratch_pool));
> + SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, insert_working_node, &iwb,
> + scratch_pool));
> SVN_ERR(flush_entries(db, wcroot, local_abspath, scratch_pool));
>
> return SVN_NO_ERROR;
> @@ -2953,8 +2896,8 @@ svn_wc__db_op_add_directory(svn_wc__db_t
>
> iwb.work_items = work_items;
>
> - SVN_ERR(with_db_txn(wcroot, local_relpath, insert_working_node, &iwb,
> - scratch_pool));
> + SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, insert_working_node, &iwb,
> + scratch_pool));
> SVN_ERR(flush_entries(db, wcroot, local_abspath, scratch_pool));
>
> return SVN_NO_ERROR;
> @@ -2986,8 +2929,8 @@ svn_wc__db_op_add_file(svn_wc__db_t *db,
>
> iwb.work_items = work_items;
>
> - SVN_ERR(with_db_txn(wcroot, local_relpath, insert_working_node, &iwb,
> - scratch_pool));
> + SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, insert_working_node, &iwb,
> + scratch_pool));
> SVN_ERR(flush_entries(db, wcroot, local_abspath, scratch_pool));
>
> return SVN_NO_ERROR;
> @@ -3023,8 +2966,8 @@ svn_wc__db_op_add_symlink(svn_wc__db_t *
>
> iwb.work_items = work_items;
>
> - SVN_ERR(with_db_txn(wcroot, local_relpath, insert_working_node, &iwb,
> - scratch_pool));
> + SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, insert_working_node, &iwb,
> + scratch_pool));
> SVN_ERR(flush_entries(db, wcroot, local_abspath, scratch_pool));
>
> return SVN_NO_ERROR;
> @@ -3138,8 +3081,9 @@ svn_wc__db_op_set_props(svn_wc__db_t *db
> spb.conflict = conflict;
> spb.work_items = work_items;
>
> - return svn_error_return(with_db_txn(wcroot, local_relpath, set_props_txn,
> - &spb, scratch_pool));
> + return svn_error_return(svn_wc__db_with_txn(wcroot, local_relpath,
> + set_props_txn, &spb,
> + scratch_pool));
> }
>
>
> @@ -3312,8 +3256,8 @@ svn_wc__db_op_set_changelist(svn_wc__db_
> scratch_pool, scratch_pool));
> VERIFY_USABLE_WCROOT(wcroot);
>
> - SVN_ERR(with_db_txn(wcroot, local_relpath, set_changelist_txn,
> - (void *) changelist, scratch_pool));
> + SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, set_changelist_txn,
> + (void *) changelist, scratch_pool));
>
> /* No need to flush the parent entries; changelists were not stored in the
> stub */
> @@ -3467,8 +3411,8 @@ svn_wc__db_op_set_tree_conflict(svn_wc__
> scratch_pool, scratch_pool));
> VERIFY_USABLE_WCROOT(wcroot);
>
> - SVN_ERR(with_db_txn(wcroot, local_relpath, set_tc_txn2,
> - (void *) tree_conflict, scratch_pool));
> + SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, set_tc_txn2,
> + (void *) tree_conflict, scratch_pool));
>
> /* There may be some entries, and the lock info is now out of date. */
> SVN_ERR(flush_entries(db, wcroot, local_abspath, scratch_pool));
> @@ -3524,7 +3468,7 @@ struct op_revert_baton {
> };
>
>
> -/* This implements db_txn_callback_t */
> +/* This implements svn_wc__db_txn_callback_t */
> static svn_error_t *
> op_revert_txn(void *baton,
> svn_wc__db_wcroot_t *wcroot,
> @@ -3637,7 +3581,7 @@ op_revert_txn(void *baton,
> }
>
>
> -/* This implements db_txn_callback_t */
> +/* This implements svn_wc__db_txn_callback_t */
> static svn_error_t *
> op_revert_recursive_txn(void *baton,
> svn_wc__db_wcroot_t *wcroot,
> @@ -3721,7 +3665,7 @@ svn_wc__db_op_revert(apr_array_header_t
> apr_pool_t *result_pool,
> apr_pool_t *scratch_pool)
> {
> - db_txn_callback_t txn_func;
> + svn_wc__db_txn_callback_t txn_func;
> svn_wc__db_wcroot_t *wcroot;
> const char *local_relpath;
> struct op_revert_baton baton;
> @@ -3751,7 +3695,8 @@ svn_wc__db_op_revert(apr_array_header_t
> scratch_pool, scratch_pool));
> VERIFY_USABLE_WCROOT(wcroot);
>
> - SVN_ERR(with_db_txn(wcroot, local_relpath, txn_func, &baton, scratch_pool));
> + SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, txn_func, &baton,
> + scratch_pool));
>
> *local_relpaths = baton.local_relpaths;
>
> @@ -4551,8 +4496,8 @@ svn_wc__db_temp_op_delete(svn_wc__db_t *
> b.db = db;
> b.local_abspath = local_abspath;
>
> - SVN_ERR(with_db_txn(wcroot, local_relpath, temp_op_delete_txn, &b,
> - scratch_pool));
> + SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, temp_op_delete_txn, &b,
> + scratch_pool));
>
> SVN_ERR(flush_entries(db, wcroot, local_abspath, scratch_pool));
>
> @@ -5298,8 +5243,8 @@ read_url(const char **url,
> apr_pool_t *scratch_pool)
> {
> struct read_url_baton rub = { url, result_pool };
> - SVN_ERR(with_db_txn(wcroot, local_relpath, read_url_txn, &rub,
> - scratch_pool));
> + SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, read_url_txn, &rub,
> + scratch_pool));
>
> return SVN_NO_ERROR;
> }
> @@ -6220,7 +6165,8 @@ svn_wc__db_global_commit(svn_wc__db_t *d
> cb.no_unlock = no_unlock;
> cb.work_items = work_items;
>
> - SVN_ERR(with_db_txn(wcroot, local_relpath, commit_node, &cb, scratch_pool));
> + SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, commit_node, &cb,
> + scratch_pool));
>
> /* We *totally* monkeyed the entries. Toss 'em. */
> SVN_ERR(flush_entries(db, wcroot, local_abspath, scratch_pool));
> @@ -6303,7 +6249,8 @@ svn_wc__db_global_update(svn_wc__db_t *d
> NOT_IMPLEMENTED();
>
> #if 0
> - SVN_ERR(with_db_txn(wcroot, local_relpath, update_node, &ub, scratch_pool));
> + SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, update_node, &ub,
> + scratch_pool));
> #endif
>
> /* We *totally* monkeyed the entries. Toss 'em. */
> @@ -6363,8 +6310,8 @@ svn_wc__db_global_record_fileinfo(svn_wc
> rb.translated_size = translated_size;
> rb.last_mod_time = last_mod_time;
>
> - SVN_ERR(with_db_txn(wcroot, local_relpath, record_fileinfo, &rb,
> - scratch_pool));
> + SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, record_fileinfo, &rb,
> + scratch_pool));
>
> /* We *totally* monkeyed the entries. Toss 'em. */
> SVN_ERR(flush_entries(db, wcroot, local_abspath, scratch_pool));
> @@ -6424,8 +6371,8 @@ svn_wc__db_lock_add(svn_wc__db_t *db,
> scratch_pool, scratch_pool));
> VERIFY_USABLE_WCROOT(wcroot);
>
> - SVN_ERR(with_db_txn(wcroot, local_relpath, lock_add_txn, (void *) lock,
> - scratch_pool));
> + SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, lock_add_txn,
> + (void *) lock, scratch_pool));
>
> /* There may be some entries, and the lock info is now out of date. */
> SVN_ERR(flush_entries(db, wcroot, local_abspath, scratch_pool));
> @@ -6473,8 +6420,8 @@ svn_wc__db_lock_remove(svn_wc__db_t *db,
> scratch_pool, scratch_pool));
> VERIFY_USABLE_WCROOT(wcroot);
>
> - SVN_ERR(with_db_txn(wcroot, local_relpath, lock_remove_txn, NULL,
> - scratch_pool));
> + SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, lock_remove_txn, NULL,
> + scratch_pool));
>
> /* There may be some entries, and the lock info is now out of date. */
> SVN_ERR(flush_entries(db, wcroot, local_abspath, scratch_pool));
> @@ -6792,8 +6739,9 @@ scan_addition(svn_wc__db_status_t *statu
> sab.original_revision = original_revision;
> sab.result_pool = result_pool;
>
> - return svn_error_return(with_db_txn(wcroot, local_relpath, scan_addition_txn,
> - &sab, scratch_pool));
> + return svn_error_return(svn_wc__db_with_txn(wcroot, local_relpath,
> + scan_addition_txn,
> + &sab, scratch_pool));
> }
>
>
> @@ -7073,8 +7021,9 @@ scan_deletion(const char **base_del_relp
> sd_baton.work_del_relpath = work_del_relpath;
> sd_baton.result_pool = result_pool;
>
> - return svn_error_return(with_db_txn(wcroot, local_relpath, scan_deletion_txn,
> - &sd_baton, scratch_pool));
> + return svn_error_return(svn_wc__db_with_txn(wcroot, local_relpath,
> + scan_deletion_txn, &sd_baton,
> + scratch_pool));
> }
>
>
> @@ -8249,8 +8198,9 @@ svn_wc__db_wclock_obtain(svn_wc__db_t *d
> baton.steal_lock = steal_lock;
> baton.levels_to_lock = levels_to_lock;
>
> - return svn_error_return(with_db_txn(wcroot, local_relpath, wclock_obtain_cb,
> - &baton, scratch_pool));
> + return svn_error_return(svn_wc__db_with_txn(wcroot, local_relpath,
> + wclock_obtain_cb, &baton,
> + scratch_pool));
> }
>
>
> @@ -8552,8 +8502,8 @@ svn_wc__db_temp_op_start_directory_updat
> du.new_rev = new_rev;
> du.new_repos_relpath = new_repos_relpath;
>
> - SVN_ERR(with_db_txn(wcroot, local_relpath, start_directory_update_txn, &du,
> - scratch_pool));
> + SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath,
> + start_directory_update_txn, &du, scratch_pool));
>
> SVN_ERR(flush_entries(db, wcroot, local_abspath, scratch_pool));
>
> @@ -8750,8 +8700,8 @@ svn_wc__db_temp_op_make_copy(svn_wc__db_
> mcb.local_abspath = local_abspath;
> mcb.op_depth = relpath_depth(local_relpath);
>
> - SVN_ERR(with_db_txn(wcroot, local_relpath, make_copy_txn, &mcb,
> - scratch_pool));
> + SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, make_copy_txn, &mcb,
> + scratch_pool));
>
> return SVN_NO_ERROR;
> }
> @@ -8902,8 +8852,8 @@ svn_wc__db_temp_op_set_file_external(svn
> sfeb.peg_rev = peg_rev;
> sfeb.rev = rev;
>
> - SVN_ERR(with_db_txn(wcroot, local_relpath, set_file_external_txn,
> - &sfeb, scratch_pool));
> + SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, set_file_external_txn,
> + &sfeb, scratch_pool));
>
> SVN_ERR(flush_entries(db, wcroot, local_abspath, scratch_pool));
>
> @@ -9114,8 +9064,8 @@ svn_wc__db_temp_op_set_rev_and_repos_rel
>
> SVN_ERR(flush_entries(db, wcroot, local_abspath, scratch_pool));
>
> - SVN_ERR(with_db_txn(wcroot, local_relpath, set_rev_relpath_txn,
> - &baton, scratch_pool));
> + SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, set_rev_relpath_txn,
> + &baton, scratch_pool));
>
> return SVN_NO_ERROR;
> }
> @@ -9209,8 +9159,9 @@ svn_wc__db_temp_op_set_new_dir_to_incomp
>
> SVN_ERR(flush_entries(db, wcroot, local_abspath, scratch_pool));
>
> - SVN_ERR(with_db_txn(wcroot, local_relpath, set_new_dir_to_incomplete_txn,
> - &baton, scratch_pool));
> + SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath,
> + set_new_dir_to_incomplete_txn,
> + &baton, scratch_pool));
>
> return SVN_NO_ERROR;
> }
> @@ -9647,7 +9598,7 @@ svn_wc__db_revision_status(svn_revnum_t
> scratch_pool, scratch_pool));
> VERIFY_USABLE_WCROOT(wcroot);
>
> - return svn_error_return(with_db_txn(wcroot, local_relpath,
> - revision_status_txn, &rsb,
> - scratch_pool));
> + return svn_error_return(svn_wc__db_with_txn(wcroot, local_relpath,
> + revision_status_txn, &rsb,
> + scratch_pool));
> }
>
> Modified: subversion/trunk/subversion/libsvn_wc/wc_db_pristine.c
> URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db_pristine.c?rev=1081528&r1=1081527&r2=1081528&view=diff
> ==============================================================================
> --- subversion/trunk/subversion/libsvn_wc/wc_db_pristine.c (original)
> +++ subversion/trunk/subversion/libsvn_wc/wc_db_pristine.c Mon Mar 14 19:32:04 2011
> @@ -193,7 +193,8 @@ typedef struct pristine_read_baton_t
> * Implements svn_sqlite__transaction_callback_t. */
> static svn_error_t *
> pristine_read_txn(void *baton,
> - svn_sqlite__db_t *sdb,
> + svn_wc__db_wcroot_t *wcroot,
> + const char *local_relpath,
> apr_pool_t *scratch_pool)
> {
> pristine_read_baton_t *b = baton;
> @@ -202,7 +203,7 @@ pristine_read_txn(void *baton,
>
> /* Check that this pristine text is present in the store. (The presence
> * of the file is not sufficient.) */
> - SVN_ERR(svn_sqlite__get_statement(&stmt, sdb, STMT_SELECT_PRISTINE));
> + SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb, STMT_SELECT_PRISTINE));
> SVN_ERR(svn_sqlite__bind_checksum(stmt, 1, b->sha1_checksum, scratch_pool));
> SVN_ERR(svn_sqlite__step(&have_row, stmt));
> SVN_ERR(svn_sqlite__reset(stmt));
> @@ -256,8 +257,8 @@ svn_wc__db_pristine_read(svn_stream_t **
> sha1_checksum,
> FALSE /* create_subdir */,
> scratch_pool, scratch_pool));
> - SVN_ERR(svn_sqlite__with_transaction(wcroot->sdb, pristine_read_txn, &b,
> - scratch_pool));
> + SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, pristine_read_txn, &b,
> + scratch_pool));
>
> return SVN_NO_ERROR;
> }
>
> Modified: subversion/trunk/subversion/libsvn_wc/wc_db_private.h
> URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db_private.h?rev=1081528&r1=1081527&r2=1081528&view=diff
> ==============================================================================
> --- subversion/trunk/subversion/libsvn_wc/wc_db_private.h (original)
> +++ subversion/trunk/subversion/libsvn_wc/wc_db_private.h Mon Mar 14 19:32:04 2011
> @@ -169,5 +169,25 @@ svn_wc__db_util_open_db(svn_sqlite__db_t
> apr_pool_t *result_pool,
> apr_pool_t *scratch_pool);
>
> +
> +/* Transaction handling */
> +
> +/* A callback which supplies WCROOTs and LOCAL_RELPATHs. */
> +typedef svn_error_t *(*svn_wc__db_txn_callback_t)(void *baton,
> + svn_wc__db_wcroot_t *wcroot,
> + const char *local_relpath,
> + apr_pool_t *scratch_pool);
> +
> +
> +/* Run CB_FUNC in a SQLite transaction with CB_BATON, using WCROOT and
> + LOCAL_RELPATH. If callbacks require additional information, they may
> + provide it using CB_BATON. */
> +svn_error_t *
> +svn_wc__db_with_txn(svn_wc__db_wcroot_t *wcroot,
> + const char *local_relpath,
> + svn_wc__db_txn_callback_t cb_func,
> + void *cb_baton,
> + apr_pool_t *scratch_pool);
> +
>
> #endif /* WC_DB_PDH_H */
>
>
Received on 2011-03-26 08:32:29 CET