Author: ivan
Date: Thu Feb 5 17:48:10 2015
New Revision: 1657642
URL: http://svn.apache.org/r1657642
Log:
On the reuse-ra-session branch: Avoid opening another extra RA session
for reintegrate like automatic merges.
* subversion/libsvn_client/merge.c
(do_merge): Use directly svn_client_open_ra_session2() to open RA session
instead of ensure_ra_session_url() since provide NULL as existing RA
session. Release target RA session before opening base RA session and
most likely our RA cache framework will reuse target RA session. Release
all RA sessions once we done.
Modified:
subversion/branches/reuse-ra-session/subversion/libsvn_client/merge.c
Modified: subversion/branches/reuse-ra-session/subversion/libsvn_client/merge.c
URL:
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/libsvn_client/merge.c?rev=1657642&r1=1657641&r2=1657642&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/libsvn_client/merge.c
(original)
+++ subversion/branches/reuse-ra-session/subversion/libsvn_client/merge.c Thu
Feb 5 17:48:10 2015
@@ -12650,9 +12650,8 @@ do_automatic_merge_locked(conflict_repor
if (reintegrate_like)
{
merge_source_t source;
- svn_ra_session_t *base_ra_session = NULL;
- svn_ra_session_t *right_ra_session = NULL;
- svn_ra_session_t *target_ra_session = NULL;
+ svn_ra_session_t *base_ra_session;
+ svn_ra_session_t *right_ra_session;
if (record_only)
return svn_error_create(SVN_ERR_INCORRECT_PARAMS, NULL,
@@ -12672,29 +12671,38 @@ do_automatic_merge_locked(conflict_repor
"and the force_delete option "
"cannot be used with this kind of merge"));
- SVN_ERR(ensure_ra_session_url(&base_ra_session, merge->base->url,
- target->abspath, ctx, scratch_pool));
- SVN_ERR(ensure_ra_session_url(&right_ra_session, merge->right->url,
- target->abspath, ctx, scratch_pool));
- SVN_ERR(ensure_ra_session_url(&target_ra_session, target->loc.url,
- target->abspath, ctx, scratch_pool));
+ SVN_ERR(svn_client_open_ra_session2(&right_ra_session, merge->right->url,
+ target->abspath, ctx, scratch_pool,
+ scratch_pool));
/* Check for and reject any abnormalities -- such as revisions that
* have not yet been merged in the opposite direction -- that a
* 'reintegrate' merge would have rejected. */
{
merge_source_t *source2;
+ svn_ra_session_t *target_ra_session;
+
+ SVN_ERR(svn_client_open_ra_session2(&target_ra_session,
+ target->loc.url, target->abspath,
+ ctx, scratch_pool, scratch_pool));
SVN_ERR(find_reintegrate_merge(&source2, NULL,
right_ra_session, merge->right,
target_ra_session, target,
ctx, scratch_pool, scratch_pool));
+
+ SVN_ERR(svn_client__ra_session_release(ctx, target_ra_session));
}
source.loc1 = merge->base;
source.loc2 = merge->right;
source.ancestral = ! merge->is_reintegrate_like;
+ SVN_ERR(svn_client_open_ra_session2(&base_ra_session,
+ merge->base->url,
+ target->abspath, ctx, scratch_pool,
+ scratch_pool));
+
err = merge_cousins_and_supplement_mergeinfo(conflict_report,
&use_sleep,
target,
@@ -12709,6 +12717,11 @@ do_automatic_merge_locked(conflict_repor
merge_options,
ctx,
result_pool, scratch_pool);
+ if (!err)
+ {
+ SVN_ERR(svn_client__ra_session_release(ctx, base_ra_session));
+ SVN_ERR(svn_client__ra_session_release(ctx, right_ra_session));
+ }
}
else /* ! merge->is_reintegrate_like */
{