I'm not familiar with this part of the code - can I have a second pair
of eyes over this, please?

[[[
* subversion/libsvn_client/blame.c
  (svn_client_blame5): When opening the RA session, treat START and END
    symmetrically: do not always open to END, since START may be younger.
]]]

[[[
Index: subversion/libsvn_client/blame.c
===================================================================
--- subversion/libsvn_client/blame.c    (revision 1498532)
+++ subversion/libsvn_client/blame.c    (working copy)
@@ -585,7 +585,6 @@ svn_client_blame5(const char *target,
   struct file_rev_baton frb;
   svn_ra_session_t *ra_session;
   svn_revnum_t start_revnum, end_revnum;
-  svn_client__pathrev_t *end_loc;
   struct blame *walk, *walk_merged = NULL;
   apr_pool_t *iterpool;
   svn_stream_t *last_stream;
@@ -604,33 +603,34 @@ svn_client_blame5(const char *target,
     SVN_ERR(svn_dirent_get_absolute(&target_abspath_or_url, target, pool));
 
   /* Get an RA plugin for this filesystem object. */
-  SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &end_loc,
-                                            target, NULL, peg_revision, end,
+  SVN_ERR(svn_client__ra_session_from_path2(&ra_session, NULL,
+                                            target, NULL, peg_revision,
+                                            peg_revision,
                                             ctx, pool));
-  end_revnum = end_loc->rev;
 
   SVN_ERR(svn_client__get_revision_number(&start_revnum, NULL, ctx->wc_ctx,
                                           target_abspath_or_url, ra_session,
                                           start, pool));
 
-  if (start_revnum > end_revnum)
-    {
-      /* Repeat the last bit of svn_client__ra_session_from_path2(), to end
-         up where we would have ended up if we had passed 'start' rather than
-         'end' to it.
-         ### Should we try calling 
-         ###   svn_client__open_ra_session_internal(peg_revision, start)
-         ### if calling it with (peg_revision, end) fails?
-       */
-      svn_client__pathrev_t *start_loc;
-      SVN_ERR(svn_client__resolve_rev_and_url(&start_loc, ra_session,
-                                              target, peg_revision, start,
-                                              ctx, pool));
-    
-      /* Make the session point to the real URL. */
-      SVN_ERR(svn_ra_reparent(ra_session, start_loc->url, pool));
-    }
+  SVN_ERR(svn_client__get_revision_number(&end_revnum, NULL, ctx->wc_ctx,
+                                          target_abspath_or_url, ra_session,
+                                          end, pool));
 
+  {
+    svn_client__pathrev_t *loc;
+    svn_opt_revision_t younger_end;
+    younger_end.kind = svn_opt_revision_number;
+    younger_end.value.number = MAX(start_revnum, end_revnum);
+
+    SVN_ERR(svn_client__resolve_rev_and_url(&loc, ra_session,
+                                            target, peg_revision,
+                                            &younger_end,
+                                            ctx, pool));
+  
+    /* Make the session point to the real URL. */
+    SVN_ERR(svn_ra_reparent(ra_session, loc->url, pool));
+  }
+
   /* We check the mime-type of the yougest revision before getting all
      the older revisions. */
   if (!ignore_mime_type)
]]]

Reply via email to