log msg += wc_db_pristine.c

hwri...@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 */
> 
> 

Reply via email to