Author: julianfoad
Date: Tue Apr 3 15:10:43 2012
New Revision: 1308972
URL: http://svn.apache.org/viewvc?rev=1308972&view=rev
Log:
Introduce and use a pathrev-returning svn_client__ra_session_from_path()
variant. I'm naming it ...2() for now, but not deprecating the old version
yet. Eventually I anticipate all callers using this version and then we
can lose the '2' off the name as it's a private name.
* subversion/libsvn_client/client.h,
(svn_client__ra_session_from_path2): New function.
* subversion/libsvn_client/ra.c
(svn_client__ra_session_from_path2): New function.
(svn_client__ra_session_from_path): Re-write as a wrapper.
(svn_client__youngest_common_ancestor): Simplify by using
svn_client__ra_session_from_path2.
* subversion/libsvn_client/merge.c
(open_source_session): Simplify by using svn_client__ra_session_from_path2.
Modified:
subversion/trunk/subversion/libsvn_client/client.h
subversion/trunk/subversion/libsvn_client/merge.c
subversion/trunk/subversion/libsvn_client/ra.c
Modified: subversion/trunk/subversion/libsvn_client/client.h
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/client.h?rev=1308972&r1=1308971&r2=1308972&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/client.h (original)
+++ subversion/trunk/subversion/libsvn_client/client.h Tue Apr 3 15:10:43 2012
@@ -246,6 +246,19 @@ svn_client__ra_session_from_path(svn_ra_
svn_client_ctx_t *ctx,
apr_pool_t *pool);
+/* Like svn_client__ra_session_from_path() but returning a path-rev
+ * instead of separate URL and rev outputs. RESOLVED_LOC_P may be NULL
+ * if not wanted. */
+svn_error_t *
+svn_client__ra_session_from_path2(svn_ra_session_t **ra_session_p,
+ svn_client__pathrev_t **resolved_loc_p,
+ const char *path_or_url,
+ const char *base_dir_abspath,
+ const svn_opt_revision_t *peg_revision,
+ const svn_opt_revision_t *revision,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool);
+
/* Ensure that RA_SESSION's session URL matches SESSION_URL,
reparenting that session if necessary.
Store the previous session URL in *OLD_SESSION_URL (so that if the
Modified: subversion/trunk/subversion/libsvn_client/merge.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/merge.c?rev=1308972&r1=1308971&r2=1308972&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/merge.c (original)
+++ subversion/trunk/subversion/libsvn_client/merge.c Tue Apr 3 15:10:43 2012
@@ -9327,19 +9327,10 @@ open_source_session(svn_client__pathrev_
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- svn_client__pathrev_t *location = apr_palloc(result_pool, sizeof(*location));
- svn_ra_session_t *ra_session;
-
- SVN_ERR(svn_client__ra_session_from_path(
- &ra_session, &location->rev, &location->url,
+ SVN_ERR(svn_client__ra_session_from_path2(
+ ra_session_p, location_p,
path_or_url, NULL, peg_revision, peg_revision,
ctx, result_pool));
- SVN_ERR(svn_ra_get_repos_root2(ra_session, &location->repos_root_url,
- result_pool));
- SVN_ERR(svn_ra_get_uuid2(ra_session, &location->repos_uuid, result_pool));
-
- *location_p = location;
- *ra_session_p = ra_session;
return SVN_NO_ERROR;
}
Modified: subversion/trunk/subversion/libsvn_client/ra.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/ra.c?rev=1308972&r1=1308971&r2=1308972&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/ra.c (original)
+++ subversion/trunk/subversion/libsvn_client/ra.c Tue Apr 3 15:10:43 2012
@@ -433,15 +433,14 @@ resolve_rev_and_url(svn_client__pathrev_
}
svn_error_t *
-svn_client__ra_session_from_path(svn_ra_session_t **ra_session_p,
- svn_revnum_t *rev_p,
- const char **url_p,
- const char *path_or_url,
- const char *base_dir_abspath,
- const svn_opt_revision_t *peg_revision,
- const svn_opt_revision_t *revision,
- svn_client_ctx_t *ctx,
- apr_pool_t *pool)
+svn_client__ra_session_from_path2(svn_ra_session_t **ra_session_p,
+ svn_client__pathrev_t **resolved_loc_p,
+ const char *path_or_url,
+ const char *base_dir_abspath,
+ const svn_opt_revision_t *peg_revision,
+ const svn_opt_revision_t *revision,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
{
svn_ra_session_t *ra_session;
const char *initial_url;
@@ -473,6 +472,29 @@ svn_client__ra_session_from_path(svn_ra_
SVN_ERR(svn_ra_reparent(ra_session, resolved_loc->url, pool));
*ra_session_p = ra_session;
+ if (resolved_loc_p)
+ *resolved_loc_p = resolved_loc;
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_client__ra_session_from_path(svn_ra_session_t **ra_session_p,
+ svn_revnum_t *rev_p,
+ const char **url_p,
+ const char *path_or_url,
+ const char *base_dir_abspath,
+ const svn_opt_revision_t *peg_revision,
+ const svn_opt_revision_t *revision,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
+{
+ svn_client__pathrev_t *resolved_loc;
+
+ SVN_ERR(svn_client__ra_session_from_path2(ra_session_p, &resolved_loc,
+ path_or_url, base_dir_abspath,
+ peg_revision, revision,
+ ctx, pool));
if (rev_p)
*rev_p = resolved_loc->rev;
if (url_p)
@@ -918,21 +940,19 @@ svn_client__youngest_common_ancestor(con
{
apr_pool_t *sesspool = svn_pool_create(scratch_pool);
svn_ra_session_t *session;
- svn_client__pathrev_t loc1, *loc2, *ancestor;
+ svn_client__pathrev_t *loc1, *loc2, *ancestor;
/* Resolve the two locations */
- SVN_ERR(svn_client__ra_session_from_path(&session, &loc1.rev, &loc1.url,
- path_or_url1, NULL,
- revision1, revision1,
- ctx, sesspool));
- SVN_ERR(svn_ra_get_repos_root2(session, &loc1.repos_root_url, sesspool));
- SVN_ERR(svn_ra_get_uuid2(session, &loc1.repos_uuid, sesspool));
+ SVN_ERR(svn_client__ra_session_from_path2(&session, &loc1,
+ path_or_url1, NULL,
+ revision1, revision1,
+ ctx, sesspool));
SVN_ERR(resolve_rev_and_url(&loc2, session,
path_or_url2, revision2, revision2,
ctx, scratch_pool));
SVN_ERR(svn_client__get_youngest_common_ancestor(
- &ancestor, &loc1, loc2, ctx, result_pool, scratch_pool));
+ &ancestor, loc1, loc2, ctx, result_pool, scratch_pool));
if (ancestor)
{