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)
     {


Reply via email to