You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by cm...@apache.org on 2012/06/22 17:47:44 UTC

svn commit: r1352935 - in /subversion/trunk/subversion: include/svn_client.h libsvn_client/deprecated.c libsvn_client/mergeinfo.c svn/main.c svn/mergeinfo-cmd.c

Author: cmpilato
Date: Fri Jun 22 15:47:43 2012
New Revision: 1352935

URL: http://svn.apache.org/viewvc?rev=1352935&view=rev
Log:
Finish issue #4199 ("Add real support for the --revision (-r) option
to the 'svn mergeinfo' command").  Prior to this change, 'svn
mergeinfo' accepted the --revision (-r) option, but did nothing with
it.  Oops!

* subversion/include/svn_client.h
  (svn_client_mergeinfo_log2): New iteration (adding an operative
    revision range) of ...
  (svn_client_mergeinfo_log): ... this now-deprecated function.

* subversion/libsvn_client/deprecated.c
  (svn_client_mergeinfo_log): Move this here, and make it a mere
    wrapper around svn_client_mergeinfo_log2().

* subversion/libsvn_client/mergeinfo.c
  (svn_client_mergeinfo_log2): Replaces svn_client_mergeinfo_log(),
    adding 'source_start_revision' and 'source_end_revision'
    parameters and handling.  The core of this change was really
    straightforward -- we just needed to provide the resolved
    start/end revisions to the existing invocation of
    svn_client__get_history_as_mergeinfo().

* subversion/svn/main.c
  (main): Add svn_cl__mergeinfo to the set of functions which may
    accept a revision range.

* subversion/svn/mergeinfo-cmd.c
  (svn_cl__mergeinfo): Upgrade to svn_client_mergeinfo_log2(), passing
    the revision range provided by the user.

Modified:
    subversion/trunk/subversion/include/svn_client.h
    subversion/trunk/subversion/libsvn_client/deprecated.c
    subversion/trunk/subversion/libsvn_client/mergeinfo.c
    subversion/trunk/subversion/svn/main.c
    subversion/trunk/subversion/svn/mergeinfo-cmd.c

Modified: subversion/trunk/subversion/include/svn_client.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_client.h?rev=1352935&r1=1352934&r2=1352935&view=diff
==============================================================================
--- subversion/trunk/subversion/include/svn_client.h (original)
+++ subversion/trunk/subversion/include/svn_client.h Fri Jun 22 15:47:43 2012
@@ -3730,8 +3730,32 @@ svn_client_mergeinfo_get_merged(apr_hash
  * If the server doesn't support retrieval of mergeinfo, return an
  * #SVN_ERR_UNSUPPORTED_FEATURE error.
  *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_client_mergeinfo_log2(svn_boolean_t finding_merged,
+                          const char *target_path_or_url,
+                          const svn_opt_revision_t *target_peg_revision,
+                          const char *source_path_or_url,
+                          const svn_opt_revision_t *source_peg_revision,
+                          const svn_opt_revision_t *source_start_revision,
+                          const svn_opt_revision_t *source_end_revision,
+                          svn_log_entry_receiver_t receiver,
+                          void *receiver_baton,
+                          svn_boolean_t discover_changed_paths,
+                          svn_depth_t depth,
+                          const apr_array_header_t *revprops,
+                          svn_client_ctx_t *ctx,
+                          apr_pool_t *scratch_pool);
+
+/**
+ * Similar to svn_client_mergeinfo_log2(), but with @a source_start_revision
+ * and @a source_end_revision always of kind @c svn_opt_revision_unspecified;
+ *
+ * @deprecated Provided for backwards compatibility with the 1.7 API.
  * @since New in 1.7.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_client_mergeinfo_log(svn_boolean_t finding_merged,
                          const char *target_path_or_url,

Modified: subversion/trunk/subversion/libsvn_client/deprecated.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/deprecated.c?rev=1352935&r1=1352934&r2=1352935&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/deprecated.c (original)
+++ subversion/trunk/subversion/libsvn_client/deprecated.c Fri Jun 22 15:47:43 2012
@@ -2565,6 +2565,34 @@ svn_client_url_from_path(const char **ur
 
 /*** From mergeinfo.c ***/
 svn_error_t *
+svn_client_mergeinfo_log(svn_boolean_t finding_merged,
+                         const char *target_path_or_url,
+                         const svn_opt_revision_t *target_peg_revision,
+                         const char *source_path_or_url,
+                         const svn_opt_revision_t *source_peg_revision,
+                         svn_log_entry_receiver_t receiver,
+                         void *receiver_baton,
+                         svn_boolean_t discover_changed_paths,
+                         svn_depth_t depth,
+                         const apr_array_header_t *revprops,
+                         svn_client_ctx_t *ctx,
+                         apr_pool_t *scratch_pool)
+{
+  svn_opt_revision_t start_revision, end_revision;
+
+  start_revision.kind = svn_opt_revision_unspecified;
+  end_revision.kind = svn_opt_revision_unspecified;
+
+  return svn_client_mergeinfo_log2(finding_merged,
+                                   target_path_or_url, target_peg_revision,
+                                   source_path_or_url, source_peg_revision,
+                                   &start_revision, &end_revision,
+                                   receiver, receiver_baton,
+                                   discover_changed_paths, depth, revprops,
+                                   ctx, scratch_pool);
+}
+
+svn_error_t *
 svn_client_mergeinfo_log_merged(const char *path_or_url,
                                 const svn_opt_revision_t *peg_revision,
                                 const char *merge_source_path_or_url,

Modified: subversion/trunk/subversion/libsvn_client/mergeinfo.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/mergeinfo.c?rev=1352935&r1=1352934&r2=1352935&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/mergeinfo.c (original)
+++ subversion/trunk/subversion/libsvn_client/mergeinfo.c Fri Jun 22 15:47:43 2012
@@ -1622,20 +1622,21 @@ svn_client_mergeinfo_get_merged(apr_hash
 
 
 svn_error_t *
-svn_client_mergeinfo_log(svn_boolean_t finding_merged,
-                         const char *target_path_or_url,
-                         const svn_opt_revision_t *target_peg_revision,
-                         const char *source_path_or_url,
-                         const svn_opt_revision_t *source_peg_revision,
-                         svn_log_entry_receiver_t log_receiver,
-                         void *log_receiver_baton,
-                         svn_boolean_t discover_changed_paths,
-                         svn_depth_t depth,
-                         const apr_array_header_t *revprops,
-                         svn_client_ctx_t *ctx,
-                         apr_pool_t *scratch_pool)
+svn_client_mergeinfo_log2(svn_boolean_t finding_merged,
+                          const char *target_path_or_url,
+                          const svn_opt_revision_t *target_peg_revision,
+                          const char *source_path_or_url,
+                          const svn_opt_revision_t *source_peg_revision,
+                          const svn_opt_revision_t *source_start_revision,
+                          const svn_opt_revision_t *source_end_revision,
+                          svn_log_entry_receiver_t log_receiver,
+                          void *log_receiver_baton,
+                          svn_boolean_t discover_changed_paths,
+                          svn_depth_t depth,
+                          const apr_array_header_t *revprops,
+                          svn_client_ctx_t *ctx,
+                          apr_pool_t *scratch_pool)
 {
-  apr_pool_t *sesspool = svn_pool_create(scratch_pool);
   const char *log_target = NULL;
   const char *repos_root;
   const char *target_repos_rel;
@@ -1662,6 +1663,23 @@ svn_client_mergeinfo_log(svn_boolean_t f
       SVN_ERR_UNSUPPORTED_FEATURE, NULL,
       _("Only depths 'infinity' and 'empty' are currently supported"));
 
+  /* Validate and sanitize the incoming source operative revision range. */
+  if (!((source_start_revision->kind == svn_opt_revision_unspecified) ||
+        (source_start_revision->kind == svn_opt_revision_number) ||
+        (source_start_revision->kind == svn_opt_revision_date) ||
+        (source_start_revision->kind == svn_opt_revision_head)))
+    return svn_error_create
+      (SVN_ERR_CLIENT_BAD_REVISION, NULL, NULL);
+  if (!((source_end_revision->kind == svn_opt_revision_unspecified) ||
+        (source_end_revision->kind == svn_opt_revision_number) ||
+        (source_end_revision->kind == svn_opt_revision_date) ||
+        (source_end_revision->kind == svn_opt_revision_head)))
+    return svn_error_create
+      (SVN_ERR_CLIENT_BAD_REVISION, NULL, NULL);
+  if ((source_end_revision->kind == svn_opt_revision_unspecified)
+      && (source_start_revision->kind != svn_opt_revision_unspecified))
+    source_end_revision = source_start_revision;
+
   /* We need the union of TARGET_PATH_OR_URL@TARGET_PEG_REVISION's mergeinfo
      and MERGE_SOURCE_URL's history.  It's not enough to do path
      matching, because renames in the history of MERGE_SOURCE_URL
@@ -1717,43 +1735,56 @@ svn_client_mergeinfo_log(svn_boolean_t f
   /* Open RA sessions to the repository for the source and target.
    * ### TODO: As the source and target must be in the same repository, we
    * should share a single session, tracking the two URLs separately. */
-  if (!finding_merged)
-    {
-      svn_ra_session_t *target_session;
-      svn_client__pathrev_t *pathrev;
-
-      SVN_ERR(svn_client__ra_session_from_path2(
-                &target_session, &pathrev,
-                target_path_or_url, NULL,
-                target_peg_revision, target_peg_revision,
-                ctx, sesspool));
-      SVN_ERR(svn_client__get_history_as_mergeinfo(
-                &target_history, NULL,
-                pathrev, SVN_INVALID_REVNUM, SVN_INVALID_REVNUM,
-                target_session, ctx, scratch_pool));
-    }
   {
-    svn_ra_session_t *source_session;
+    apr_pool_t *sesspool = svn_pool_create(scratch_pool);
+    svn_ra_session_t *source_session, *target_session;
     svn_client__pathrev_t *pathrev;
+    svn_revnum_t start_rev, end_rev, youngest_rev = SVN_INVALID_REVNUM;
+    
+    if (! finding_merged)
+      {
+        SVN_ERR(svn_client__ra_session_from_path2(&target_session, &pathrev,
+                                                  target_path_or_url, NULL,
+                                                  target_peg_revision,
+                                                  target_peg_revision,
+                                                  ctx, sesspool));
+        SVN_ERR(svn_client__get_history_as_mergeinfo(&target_history, NULL,
+                                                     pathrev,
+                                                     SVN_INVALID_REVNUM,
+                                                     SVN_INVALID_REVNUM,
+                                                     target_session, ctx,
+                                                     scratch_pool));
+      }
+    
+    SVN_ERR(svn_client__ra_session_from_path2(&source_session, &pathrev,
+                                              source_path_or_url, NULL,
+                                              source_peg_revision,
+                                              source_peg_revision,
+                                              ctx, sesspool));
+    SVN_ERR(svn_client__get_revision_number(&start_rev, &youngest_rev,
+                                            ctx->wc_ctx, source_path_or_url,
+                                            source_session,
+                                            source_start_revision,
+                                            sesspool));
+    SVN_ERR(svn_client__get_revision_number(&end_rev, &youngest_rev,
+                                            ctx->wc_ctx, source_path_or_url,
+                                            source_session,
+                                            source_end_revision,
+                                            sesspool));
+    SVN_ERR(svn_client__get_history_as_mergeinfo(&source_history, NULL,
+                                                 pathrev, end_rev, start_rev,
+                                                 source_session, ctx,
+                                                 scratch_pool));
 
-    SVN_ERR(svn_client__ra_session_from_path2(
-              &source_session, &pathrev,
-              source_path_or_url, NULL,
-              source_peg_revision, source_peg_revision,
-              ctx, sesspool));
-    SVN_ERR(svn_client__get_history_as_mergeinfo(
-              &source_history, NULL,
-              pathrev, SVN_INVALID_REVNUM, SVN_INVALID_REVNUM,
-              source_session, ctx, scratch_pool));
+    /* Close the source and target sessions. */
+    svn_pool_destroy(sesspool);
   }
-  /* Close the source and target sessions. */
-  svn_pool_destroy(sesspool);
 
   /* Separate the explicit or inherited mergeinfo on TARGET_PATH_OR_URL,
      and possibly its explicit subtree mergeinfo, into their
      inheritable and non-inheritable parts. */
-  master_noninheritable_rangelist =
-    apr_array_make(scratch_pool, 64, sizeof(svn_merge_range_t *));
+  master_noninheritable_rangelist = apr_array_make(scratch_pool, 64,
+                                                   sizeof(svn_merge_range_t *));
   master_inheritable_rangelist = apr_array_make(scratch_pool, 64,
                                                 sizeof(svn_merge_range_t *));
   inheritable_subtree_merges = apr_hash_make(scratch_pool);

Modified: subversion/trunk/subversion/svn/main.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/main.c?rev=1352935&r1=1352934&r2=1352935&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/main.c (original)
+++ subversion/trunk/subversion/svn/main.c Fri Jun 22 15:47:43 2012
@@ -1049,6 +1049,11 @@ const svn_opt_subcommand_desc2_t svn_cl_
      "  specified by the --show-revs option.  If --show-revs isn't passed,\n"
      "  it defaults to --show-revs='merged'.\n"
      "\n"
+     "  If --revision (-r) is provided, filter the displayed information to\n"
+     "  show only that which is associated with the revisions within the\n"
+     "  specified range.  Revision numbers, dates, and the 'HEAD' keyword are\n"
+     "  valid range values.\n"
+     "\n"
      "  The depth can be 'empty' or 'infinity'; the default is 'empty'.\n"),
     {'r', 'R', opt_depth, opt_show_revs} },
 
@@ -2463,6 +2468,7 @@ main(int argc, const char *argv[])
   if (subcommand->cmd_func != svn_cl__blame
       && subcommand->cmd_func != svn_cl__diff
       && subcommand->cmd_func != svn_cl__log
+      && subcommand->cmd_func != svn_cl__mergeinfo
       && subcommand->cmd_func != svn_cl__merge)
     {
       if (opt_state.end_revision.kind != svn_opt_revision_unspecified)

Modified: subversion/trunk/subversion/svn/mergeinfo-cmd.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/mergeinfo-cmd.c?rev=1352935&r1=1352934&r2=1352935&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/mergeinfo-cmd.c (original)
+++ subversion/trunk/subversion/svn/mergeinfo-cmd.c Fri Jun 22 15:47:43 2012
@@ -122,19 +122,23 @@ svn_cl__mergeinfo(apr_getopt_t *os,
   /* Do the real work, depending on the requested data flavor. */
   if (opt_state->show_revs == svn_cl__show_revs_merged)
     {
-      SVN_ERR(svn_client_mergeinfo_log(TRUE, target, &tgt_peg_revision,
-                                       source, &src_peg_revision,
-                                       print_log_rev, NULL,
-                                       TRUE, depth, NULL, ctx,
-                                       pool));
+      SVN_ERR(svn_client_mergeinfo_log2(TRUE, target, &tgt_peg_revision,
+                                        source, &src_peg_revision,
+                                        &(opt_state->start_revision),
+                                        &(opt_state->end_revision),
+                                        print_log_rev, NULL,
+                                        TRUE, depth, NULL, ctx,
+                                        pool));
     }
   else if (opt_state->show_revs == svn_cl__show_revs_eligible)
     {
-      SVN_ERR(svn_client_mergeinfo_log(FALSE, target, &tgt_peg_revision,
-                                       source, &src_peg_revision,
-                                       print_log_rev, NULL,
-                                       TRUE, depth, NULL, ctx,
-                                       pool));
+      SVN_ERR(svn_client_mergeinfo_log2(FALSE, target, &tgt_peg_revision,
+                                        source, &src_peg_revision,
+                                        &(opt_state->start_revision),
+                                        &(opt_state->end_revision),
+                                        print_log_rev, NULL,
+                                        TRUE, depth, NULL, ctx,
+                                        pool));
     }
   return SVN_NO_ERROR;
 }



Re: svn commit: r1352935 - in /subversion/trunk/subversion: include/svn_client.h libsvn_client/deprecated.c libsvn_client/mergeinfo.c svn/main.c svn/mergeinfo-cmd.c

Posted by "C. Michael Pilato" <cm...@collab.net>.
On 06/24/2012 04:41 PM, C. Michael Pilato wrote:
> On 06/23/2012 12:44 AM, Greg Stein wrote:
>>> +    return svn_error_create
>>> +      (SVN_ERR_CLIENT_BAD_REVISION, NULL, NULL);
>>
>> Style: white space before paren, and it would be better to lead (not trail)
>> the lines with ||.
> 
> Agreed on the whitespace.  (Silly anyway ... the whole statement fits in 80
> columns.)

r1353326 for this bit.

-- 
C. Michael Pilato <cm...@collab.net>
CollabNet   <>   www.collab.net   <>   Enterprise Cloud Development


Re: svn commit: r1352935 - in /subversion/trunk/subversion: include/svn_client.h libsvn_client/deprecated.c libsvn_client/mergeinfo.c svn/main.c svn/mergeinfo-cmd.c

Posted by "C. Michael Pilato" <cm...@collab.net>.
On 06/23/2012 12:44 AM, Greg Stein wrote:
>> @@ -1662,6 +1663,23 @@ svn_client_mergeinfo_log(svn_boolean_t f
>>       SVN_ERR_UNSUPPORTED_FEATURE, NULL,
>>       _("Only depths 'infinity' and 'empty' are currently supported"));
>>
>> +  /* Validate and sanitize the incoming source operative revision range. */
>> +  if (!((source_start_revision->kind == svn_opt_revision_unspecified) ||
>> +        (source_start_revision->kind == svn_opt_revision_number) ||
>> +        (source_start_revision->kind == svn_opt_revision_date) ||
>> +        (source_start_revision->kind == svn_opt_revision_head)))
>> +    return svn_error_create
>> +      (SVN_ERR_CLIENT_BAD_REVISION, NULL, NULL);
>> +  if (!((source_end_revision->kind == svn_opt_revision_unspecified) ||
>> +        (source_end_revision->kind == svn_opt_revision_number) ||
>> +        (source_end_revision->kind == svn_opt_revision_date) ||
>> +        (source_end_revision->kind == svn_opt_revision_head)))
>> +    return svn_error_create
>> +      (SVN_ERR_CLIENT_BAD_REVISION, NULL, NULL);
> 
> Style: white space before paren, and it would be better to lead (not trail)
> the lines with ||.

Agreed on the whitespace.  (Silly anyway ... the whole statement fits in 80
columns.)

We're a bit less consistent on the operator placement in the codebase.  With
mixed-operator conditions, I agree with (and employ) the "trailing operator"
style.  But in this situation, I think readability is greatly enhanced by
having having conditions vertically align the way they appear above.

-- 
C. Michael Pilato <cm...@collab.net>
CollabNet   <>   www.collab.net   <>   Enterprise Cloud Development


Re: svn commit: r1352935 - in /subversion/trunk/subversion: include/svn_client.h libsvn_client/deprecated.c libsvn_client/mergeinfo.c svn/main.c svn/mergeinfo-cmd.c

Posted by Greg Stein <gs...@gmail.com>.
On Jun 22, 2012 11:48 AM, <cmpilato <cm...@apache.org>
apache.org <cm...@apache.org>> wrote:
>...
> +++ subversion/trunk/subversion/libsvn_client/mergeinfo.c Fri Jun 22
15:47:43 2012
> @@ -1622,20 +1622,21 @@ svn_client_mergeinfo_get_merged(apr_hash
>
>
>  svn_error_t *
> -svn_client_mergeinfo_log(svn_boolean_t finding_merged,
> -                         const char *target_path_or_url,
> -                         const svn_opt_revision_t *target_peg_revision,
> -                         const char *source_path_or_url,
> -                         const svn_opt_revision_t *source_peg_revision,
> -                         svn_log_entry_receiver_t log_receiver,
> -                         void *log_receiver_baton,
> -                         svn_boolean_t discover_changed_paths,
> -                         svn_depth_t depth,
> -                         const apr_array_header_t *revprops,
> -                         svn_client_ctx_t *ctx,
> -                         apr_pool_t *scratch_pool)
> +svn_client_mergeinfo_log2(svn_boolean_t finding_merged,
> +                          const char *target_path_or_url,
> +                          const svn_opt_revision_t *target_peg_revision,
> +                          const char *source_path_or_url,
> +                          const svn_opt_revision_t *source_peg_revision,
> +                          const svn_opt_revision_t
*source_start_revision,
> +                          const svn_opt_revision_t *source_end_revision,
> +                          svn_log_entry_receiver_t log_receiver,
> +                          void *log_receiver_baton,
> +                          svn_boolean_t discover_changed_paths,
> +                          svn_depth_t depth,
> +                          const apr_array_header_t *revprops,
> +                          svn_client_ctx_t *ctx,
> +                          apr_pool_t *scratch_pool)
>  {
> -  apr_pool_t *sesspool = svn_pool_create(scratch_pool);
>   const char *log_target = NULL;
>   const char *repos_root;
>   const char *target_repos_rel;
> @@ -1662,6 +1663,23 @@ svn_client_mergeinfo_log(svn_boolean_t f
>       SVN_ERR_UNSUPPORTED_FEATURE, NULL,
>       _("Only depths 'infinity' and 'empty' are currently supported"));
>
> +  /* Validate and sanitize the incoming source operative revision range.
*/
> +  if (!((source_start_revision->kind == svn_opt_revision_unspecified) ||
> +        (source_start_revision->kind == svn_opt_revision_number) ||
> +        (source_start_revision->kind == svn_opt_revision_date) ||
> +        (source_start_revision->kind == svn_opt_revision_head)))
> +    return svn_error_create
> +      (SVN_ERR_CLIENT_BAD_REVISION, NULL, NULL);
> +  if (!((source_end_revision->kind == svn_opt_revision_unspecified) ||
> +        (source_end_revision->kind == svn_opt_revision_number) ||
> +        (source_end_revision->kind == svn_opt_revision_date) ||
> +        (source_end_revision->kind == svn_opt_revision_head)))
> +    return svn_error_create
> +      (SVN_ERR_CLIENT_BAD_REVISION, NULL, NULL);

Style: white space before paren, and it would be better to lead (not trail)
the lines with ||.

> ...

Cheers,
-g

Re: r1352935 - supporting "svn mergeinfo --revision" option

Posted by Julian Foad <ju...@btopenworld.com>.
C. Michael Pilato wrote:

> On 09/18/2012 12:07 PM, Julian Foad wrote:
>>  Please can you document the new parameters here?
> 
> r1387875 takes a crack at it.

Thanks, Mike.

- Julian

Re: r1352935 - supporting "svn mergeinfo --revision" option

Posted by "C. Michael Pilato" <cm...@collab.net>.
On 09/18/2012 12:07 PM, Julian Foad wrote:
> Hi Mike. ...
> 
>> Author: cmpilato
> 
>> Date: Fri Jun 22 15:47:43 2012
>> New Revision: 1352935

[...]

>> * subversion/include/svn_client.h
>>   (svn_client_mergeinfo_log2): New iteration (adding an operative
>>     revision range) of ...
>>   (svn_client_mergeinfo_log): ... this now-deprecated function.

[...]

>> Modified: subversion/trunk/subversion/include/svn_client.h
>> URL: 
>> http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_client.h?rev=1352935&r1=1352934&r2=1352935&view=diff
>> ==============================================================================
>> --- subversion/trunk/subversion/include/svn_client.h (original)
>> +++ subversion/trunk/subversion/include/svn_client.h Fri Jun 22 15:47:43 2012
>> @@ -3730,8 +3730,32 @@ svn_client_mergeinfo_get_merged(apr_hash
>>   * If the server doesn't support retrieval of mergeinfo, return an
>>   * #SVN_ERR_UNSUPPORTED_FEATURE error.
>>   *
> 
> Please can you document the new parameters here?

r1387875 takes a crack at it.


-- 
C. Michael Pilato <cm...@collab.net>
CollabNet   <>   www.collab.net   <>   Enterprise Cloud Development


Re: r1352935 - supporting "svn mergeinfo --revision" option

Posted by Julian Foad <ju...@btopenworld.com>.
Hi Mike. ...

> Author: cmpilato

> Date: Fri Jun 22 15:47:43 2012
> New Revision: 1352935
> 
> URL: http://svn.apache.org/viewvc?rev=1352935&view=rev
> Log:
> Finish issue #4199 ("Add real support for the --revision (-r) option
> to the 'svn mergeinfo' command").  Prior to this change, 'svn
> mergeinfo' accepted the --revision (-r) option, but did nothing with
> it.  Oops!
> 
> * subversion/include/svn_client.h
>   (svn_client_mergeinfo_log2): New iteration (adding an operative
>     revision range) of ...
>   (svn_client_mergeinfo_log): ... this now-deprecated function.
> 
> * subversion/libsvn_client/deprecated.c
>   (svn_client_mergeinfo_log): Move this here, and make it a mere
>     wrapper around svn_client_mergeinfo_log2().
> 
> * subversion/libsvn_client/mergeinfo.c
>   (svn_client_mergeinfo_log2): Replaces svn_client_mergeinfo_log(),
>     adding 'source_start_revision' and 'source_end_revision'
>     parameters and handling.  The core of this change was really
>     straightforward -- we just needed to provide the resolved
>     start/end revisions to the existing invocation of
>     svn_client__get_history_as_mergeinfo().
> 
> * subversion/svn/main.c
>   (main): Add svn_cl__mergeinfo to the set of functions which may
>     accept a revision range.
> 
> * subversion/svn/mergeinfo-cmd.c
>   (svn_cl__mergeinfo): Upgrade to svn_client_mergeinfo_log2(), passing
>     the revision range provided by the user.
> 
> Modified:
>     subversion/trunk/subversion/include/svn_client.h
>     subversion/trunk/subversion/libsvn_client/deprecated.c
>     subversion/trunk/subversion/libsvn_client/mergeinfo.c
>     subversion/trunk/subversion/svn/main.c
>     subversion/trunk/subversion/svn/mergeinfo-cmd.c
> 
> Modified: subversion/trunk/subversion/include/svn_client.h
> URL: 
> http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_client.h?rev=1352935&r1=1352934&r2=1352935&view=diff
> ==============================================================================
> --- subversion/trunk/subversion/include/svn_client.h (original)
> +++ subversion/trunk/subversion/include/svn_client.h Fri Jun 22 15:47:43 2012
> @@ -3730,8 +3730,32 @@ svn_client_mergeinfo_get_merged(apr_hash
>   * If the server doesn't support retrieval of mergeinfo, return an
>   * #SVN_ERR_UNSUPPORTED_FEATURE error.
>   *

Please can you document the new parameters here?

- Julian


> + * @since New in 1.8.
> + */
> +svn_error_t *
> +svn_client_mergeinfo_log2(svn_boolean_t finding_merged,
> +                          const char *target_path_or_url,
> +                          const svn_opt_revision_t *target_peg_revision,
> +                          const char *source_path_or_url,
> +                          const svn_opt_revision_t *source_peg_revision,
> +                          const svn_opt_revision_t *source_start_revision,
> +                          const svn_opt_revision_t *source_end_revision,
> +                          svn_log_entry_receiver_t receiver,
> +                          void *receiver_baton,
> +                          svn_boolean_t discover_changed_paths,
> +                          svn_depth_t depth,
> +                          const apr_array_header_t *revprops,
> +                          svn_client_ctx_t *ctx,
> +                          apr_pool_t *scratch_pool);
> +
> +/**
> + * Similar to svn_client_mergeinfo_log2(), but with @a source_start_revision
> + * and @a source_end_revision always of kind @c svn_opt_revision_unspecified;
> + *
> + * @deprecated Provided for backwards compatibility with the 1.7 API.
>   * @since New in 1.7.
>   */
> +SVN_DEPRECATED
> svn_error_t *
> svn_client_mergeinfo_log(svn_boolean_t finding_merged,
>                           const char *target_path_or_url,