#include <apr_pools.h>
#include "svn_types.h"
#include "svn_pools.h"
#include "svn_dirent_uri.h"
#include "svn_path.h"
#include "wc.h"
#include "wc_db.h"
#include "svn_private_config.h"
static apr_status_t
close_ctx_apr(void *data)
{
svn_wc_context_t *ctx = data;
if (ctx->close_db_on_destroy)
{
svn_error_t *err = svn_wc__db_close(ctx->db);
if (err)
{
int result = err->apr_err;
svn_error_clear(err);
return result;
}
}
return APR_SUCCESS;
}
svn_error_t *
svn_wc_context_create(svn_wc_context_t **wc_ctx,
const svn_config_t *config,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
svn_wc_context_t *ctx = apr_pcalloc(result_pool, sizeof(*ctx));
ctx->state_pool = result_pool;
SVN_ERR(svn_wc__db_open(&ctx->db, config,
TRUE, TRUE, ctx->state_pool, scratch_pool));
ctx->close_db_on_destroy = TRUE;
apr_pool_cleanup_register(result_pool, ctx, close_ctx_apr,
apr_pool_cleanup_null);
*wc_ctx = ctx;
return SVN_NO_ERROR;
}
svn_error_t *
svn_wc__context_create_with_db(svn_wc_context_t **wc_ctx,
svn_config_t *config,
svn_wc__db_t *db,
apr_pool_t *result_pool)
{
svn_wc_context_t *ctx = apr_pcalloc(result_pool, sizeof(*ctx));
ctx->state_pool = result_pool;
ctx->db = db;
ctx->close_db_on_destroy = FALSE;
apr_pool_cleanup_register(result_pool, ctx, close_ctx_apr,
apr_pool_cleanup_null);
*wc_ctx = ctx;
return SVN_NO_ERROR;
}
svn_error_t *
svn_wc_context_destroy(svn_wc_context_t *wc_ctx)
{
apr_pool_cleanup_run(wc_ctx->state_pool, wc_ctx, close_ctx_apr);
return SVN_NO_ERROR;
}