[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

[PATCH] Re: Regarding issue 3690 - Work in progress

From: Noorul Islam K M <noorul_at_collab.net>
Date: Mon, 31 Jan 2011 22:23:48 +0530

Daniel Becroft <djcbecroft_at_gmail.com> writes:

> On 27/01/2011, at 17:04, Noorul Islam K M <noorul_at_collab.net> wrote:
>
>> Hi,
>>
>> I am planning to work on issue 3690. Before starting with this I have
>> few questions.
>>
>> 1. Hyrum updated the issue with his comment stating that already there
>> is work going on in the branch ignore-mergeinfo which addresses
>> subset of issue 3690, i.e ignoring changes to svn:mergeinfo. Is
>> svn:mergeinfo an svn property set using svn pset command? I think Zvi
>> Rackover is talking about a new option passing which a user can
>> ignore revisions with just the following property changes alone.
>>
>> author eol-style externals keywords mime-type
>> date executable ignore log needs-lock
>
> Fyi, svn:author, svn:date and svn:log are revision properties - changes to these don't appear in the log.
>
> Cheers,
> Daniel
> Sent from my phone.
>

I started working on this and I think I completed the changes for
svn_ra_local. Attached is the patch. This is a work in progress. I would
like to get some initial comments/suggestions on the patch and would
like to know whether I am proceeding on right direction.

This patch adds new option '--ignore-properties' to 'log' sub
command. If this option is provided then command ignore revisions that
has only property changes from output.

Thanks and Regards
Noorul

Index: subversion/libsvn_ra/deprecated.c
===================================================================
--- subversion/libsvn_ra/deprecated.c (revision 1065683)
+++ subversion/libsvn_ra/deprecated.c (working copy)
@@ -293,6 +293,25 @@
                          versus_url, diff_editor, diff_baton, pool);
 }
 
+svn_error_t *svn_ra_get_log2(svn_ra_session_t *session,
+ const apr_array_header_t *paths,
+ svn_revnum_t start,
+ svn_revnum_t end,
+ int limit,
+ svn_boolean_t discover_changed_paths,
+ svn_boolean_t strict_node_history,
+ svn_boolean_t include_merged_revisions,
+ const apr_array_header_t *revprops,
+ svn_log_entry_receiver_t receiver,
+ void *receiver_baton,
+ apr_pool_t *pool)
+{
+ return svn_ra_get_log3(session, paths, start, end, limit,
+ discover_changed_paths, strict_node_history,
+ FALSE, FALSE, revprops,
+ receiver, receiver_baton, pool);
+}
+
 svn_error_t *svn_ra_get_log(svn_ra_session_t *session,
                             const apr_array_header_t *paths,
                             svn_revnum_t start,
Index: subversion/libsvn_ra/wrapper_template.h
===================================================================
--- subversion/libsvn_ra/wrapper_template.h (revision 1065683)
+++ subversion/libsvn_ra/wrapper_template.h (working copy)
@@ -389,6 +389,7 @@
   return VTBL.get_log(session_baton, paths, start, end, 0, /* limit */
                       discover_changed_paths, strict_node_history,
                       FALSE, /* include_merged_revisions */
+ FALSE, /* ignore_properties */
                       svn_compat_log_revprops_in(pool), /* revprops */
                       receiver2, receiver2_baton, pool);
 }
Index: subversion/libsvn_ra/ra_loader.c
===================================================================
--- subversion/libsvn_ra/ra_loader.c (revision 1065683)
+++ subversion/libsvn_ra/ra_loader.c (working copy)
@@ -879,7 +879,7 @@
                                   diff_baton, pool);
 }
 
-svn_error_t *svn_ra_get_log2(svn_ra_session_t *session,
+svn_error_t *svn_ra_get_log3(svn_ra_session_t *session,
                              const apr_array_header_t *paths,
                              svn_revnum_t start,
                              svn_revnum_t end,
@@ -887,6 +887,7 @@
                              svn_boolean_t discover_changed_paths,
                              svn_boolean_t strict_node_history,
                              svn_boolean_t include_merged_revisions,
+ svn_boolean_t ignore_properties,
                              const apr_array_header_t *revprops,
                              svn_log_entry_receiver_t receiver,
                              void *receiver_baton,
@@ -907,8 +908,8 @@
 
   return session->vtable->get_log(session, paths, start, end, limit,
                                   discover_changed_paths, strict_node_history,
- include_merged_revisions, revprops,
- receiver, receiver_baton, pool);
+ include_merged_revisions, ignore_properties,
+ revprops, receiver, receiver_baton, pool);
 }
 
 svn_error_t *svn_ra_check_path(svn_ra_session_t *session,
Index: subversion/libsvn_ra/ra_loader.h
===================================================================
--- subversion/libsvn_ra/ra_loader.h (revision 1065683)
+++ subversion/libsvn_ra/ra_loader.h (working copy)
@@ -171,6 +171,7 @@
                           svn_boolean_t discover_changed_paths,
                           svn_boolean_t strict_node_history,
                           svn_boolean_t include_merged_revisions,
+ svn_boolean_t ignore_properties,
                           const apr_array_header_t *revprops,
                           svn_log_entry_receiver_t receiver,
                           void *receiver_baton,
Index: subversion/libsvn_ra_local/ra_plugin.c
===================================================================
--- subversion/libsvn_ra_local/ra_plugin.c (revision 1065683)
+++ subversion/libsvn_ra_local/ra_plugin.c (working copy)
@@ -873,6 +873,7 @@
                       svn_boolean_t discover_changed_paths,
                       svn_boolean_t strict_node_history,
                       svn_boolean_t include_merged_revisions,
+ svn_boolean_t ignore_properties,
                       const apr_array_header_t *revprops,
                       svn_log_entry_receiver_t receiver,
                       void *receiver_baton,
@@ -906,7 +907,7 @@
       receiver_baton = &lb;
     }
 
- return svn_repos_get_logs4(sess->repos,
+ return svn_repos_get_logs5(sess->repos,
                              abs_paths,
                              start,
                              end,
@@ -914,6 +915,7 @@
                              discover_changed_paths,
                              strict_node_history,
                              include_merged_revisions,
+ ignore_properties,
                              revprops,
                              NULL, NULL,
                              receiver,
Index: subversion/tests/cmdline/log_tests.py
===================================================================
--- subversion/tests/cmdline/log_tests.py (revision 1065683)
+++ subversion/tests/cmdline/log_tests.py (working copy)
@@ -1750,6 +1750,27 @@
                           "differs from that on move source '%s'"
                           % (psi_moved_path, psi_path))
 
+def log_ignore_properties(sbox):
+ "svn log --ignore-properties"
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ iota_file = os.path.join(wc_dir, 'iota')
+ svntest.main.run_svn(None, 'propset', 'foo', 'bar', iota_file)
+ svntest.main.run_svn(None, 'ci', '-m',
+ 'Set property "foo" to "bar" on A/iota', wc_dir)
+
+ svntest.main.run_svn(None, 'propset', 'bar', 'foo', iota_file)
+ svntest.main.run_svn(None, 'ci', '-m',
+ 'Set property "bar" to "foo" on A/iota', wc_dir)
+
+ exit_code, output, error = svntest.main.run_svn(0, 'log',
+ '--ignore-properties',
+ wc_dir)
+
+ expected_output_re = re.compile(".*Set property.*")
+ if expected_output_re.match("".join(output)):
+ raise svntest.Failure('Log failed with --ignore-properties failed')
+
 ########################################################################
 # Run the tests
 
@@ -1792,6 +1813,7 @@
               SkipUnless(merge_sensitive_log_propmod_merge_inheriting_path,
                          server_has_mergeinfo),
               log_of_local_copy,
+ log_ignore_properties,
              ]
 
 if __name__ == '__main__':
Index: subversion/tests/cmdline/getopt_tests_data/svn_help_log_switch_stdout
===================================================================
--- subversion/tests/cmdline/getopt_tests_data/svn_help_log_switch_stdout (revision 1065683)
+++ subversion/tests/cmdline/getopt_tests_data/svn_help_log_switch_stdout (working copy)
@@ -76,6 +76,7 @@
                                    Ignore changes in EOL style.
                                 -p (--show-c-function):
                                    Show C function name in diff output.
+ --ignore-properties : ignore revisions with only property changes
 
 Global options:
   --username ARG : specify a username ARG
Index: subversion/svn/cl.h
===================================================================
--- subversion/svn/cl.h (revision 1065683)
+++ subversion/svn/cl.h (working copy)
@@ -230,6 +230,8 @@
   svn_boolean_t internal_diff; /* override diff_cmd in config file */
   svn_boolean_t use_git_diff_format; /* Use git's extended diff format */
   svn_boolean_t allow_mixed_rev; /* Allow operation on mixed-revision WC */
+ svn_boolean_t ignore_properties; /* Ignore revisions with only property
+ changes from log command output */
 } svn_cl__opt_state_t;
 
 
Index: subversion/svn/log-cmd.c
===================================================================
--- subversion/svn/log-cmd.c (revision 1065683)
+++ subversion/svn/log-cmd.c (working copy)
@@ -706,13 +706,14 @@
           if (!opt_state->quiet)
             APR_ARRAY_PUSH(revprops, const char *) = SVN_PROP_REVISION_LOG;
         }
- SVN_ERR(svn_client_log5(targets,
+ SVN_ERR(svn_client_log6(targets,
                               &peg_revision,
                               opt_state->revision_ranges,
                               opt_state->limit,
                               opt_state->verbose,
                               opt_state->stop_on_copy,
                               opt_state->use_merge_history,
+ opt_state->ignore_properties,
                               revprops,
                               log_entry_receiver_xml,
                               &lb,
@@ -729,13 +730,14 @@
       APR_ARRAY_PUSH(revprops, const char *) = SVN_PROP_REVISION_DATE;
       if (!opt_state->quiet)
         APR_ARRAY_PUSH(revprops, const char *) = SVN_PROP_REVISION_LOG;
- SVN_ERR(svn_client_log5(targets,
+ SVN_ERR(svn_client_log6(targets,
                               &peg_revision,
                               opt_state->revision_ranges,
                               opt_state->limit,
                               opt_state->verbose,
                               opt_state->stop_on_copy,
                               opt_state->use_merge_history,
+ opt_state->ignore_properties,
                               revprops,
                               log_entry_receiver,
                               &lb,
Index: subversion/svn/main.c
===================================================================
--- subversion/svn/main.c (revision 1065683)
+++ subversion/svn/main.c (working copy)
@@ -123,6 +123,7 @@
   opt_internal_diff,
   opt_use_git_diff_format,
   opt_allow_mixed_revisions,
+ opt_ignore_properties,
 } svn_cl__longopt_t;
 
 
@@ -338,6 +339,8 @@
                        "Use of this option is not recommended!\n"
                        " "
                        "Please run 'svn update' instead.")},
+ {"ignore-properties", opt_ignore_properties, 0,
+ N_("ignore revisions with only property changes")},
 
   /* Long-opt Aliases
    *
@@ -668,7 +671,7 @@
      " svn log http://www.example.com/repo/project@50 foo.c bar.c\n"),
     {'r', 'q', 'v', 'g', 'c', opt_targets, opt_stop_on_copy, opt_incremental,
      opt_xml, 'l', opt_with_all_revprops, opt_with_no_revprops, opt_with_revprop,
- opt_diff, opt_diff_cmd, opt_internal_diff, 'x'},
+ opt_diff, opt_diff_cmd, opt_internal_diff, 'x', opt_ignore_properties},
     {{opt_with_revprop, N_("retrieve revision property ARG")},
      {'c', N_("the change made in revision ARG")}} },
 
@@ -1816,6 +1819,9 @@
       case opt_allow_mixed_revisions:
         opt_state.allow_mixed_rev = TRUE;
         break;
+ case opt_ignore_properties:
+ opt_state.ignore_properties = TRUE;
+ break;
       default:
         /* Hmmm. Perhaps this would be a good place to squirrel away
            opts that commands like svn diff might need. Hmmm indeed. */
Index: subversion/include/svn_repos.h
===================================================================
--- subversion/include/svn_repos.h (revision 1065683)
+++ subversion/include/svn_repos.h (working copy)
@@ -1579,6 +1579,9 @@
  * If @a include_merged_revisions is set, log information for revisions
  * which have been merged to @a targets will also be returned.
  *
+ * If @a include_properties is set, log information for revisions
+ * which only have property change will not be returned.
+ *
  * If @a revprops is NULL, retrieve all revprops; else, retrieve only the
  * revprops named in the array (i.e. retrieve none if the array is empty).
  *
@@ -1602,6 +1605,29 @@
  *
  * Use @a pool for temporary allocations.
  *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_repos_get_logs5(svn_repos_t *repos,
+ const apr_array_header_t *paths,
+ svn_revnum_t start,
+ svn_revnum_t end,
+ int limit,
+ svn_boolean_t discover_changed_paths,
+ svn_boolean_t strict_node_history,
+ svn_boolean_t include_merged_revisions,
+ svn_boolean_t ignore_properties,
+ const apr_array_header_t *revprops,
+ svn_repos_authz_func_t authz_read_func,
+ void *authz_read_baton,
+ svn_log_entry_receiver_t receiver,
+ void *receiver_baton,
+ apr_pool_t *pool);
+
+/**
+ * Same as svn_repos_get_logs5(), but with @a ignore_properties
+ * always @c FALSE.
+ *
  * @since New in 1.5.
  */
 svn_error_t *
Index: subversion/include/svn_client.h
===================================================================
--- subversion/include/svn_client.h (revision 1065683)
+++ subversion/include/svn_client.h (working copy)
@@ -2341,6 +2341,9 @@
  * If @a include_merged_revisions is set, log information for revisions
  * which have been merged to @a targets will also be returned.
  *
+ * If @a ignore_properties is set, log will ignore any revision with
+ * svn property changes alone when determinig which revisions to return.
+ *
  * If @a revprops is NULL, retrieve all revprops; else, retrieve only the
  * revprops named in the array (i.e. retrieve none if the array is empty).
  *
@@ -2356,8 +2359,31 @@
  * If @a ctx->notify_func2 is non-NULL, then call @a ctx->notify_func2/baton2
  * with a 'skip' signal on any unversioned targets.
  *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_client_log6(const apr_array_header_t *targets,
+ const svn_opt_revision_t *peg_revision,
+ const apr_array_header_t *revision_ranges,
+ int limit,
+ svn_boolean_t discover_changed_paths,
+ svn_boolean_t strict_node_history,
+ svn_boolean_t include_merged_revisions,
+ svn_boolean_t ignore_properties,
+ const apr_array_header_t *revprops,
+ svn_log_entry_receiver_t receiver,
+ void *receiver_baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool);
+
+/**
+ * Similar to svn_client_log6(), but with @a ignore_properties
+ * always @c FALSE.
+ *
+ * @deprecated Provided for compatibility with the 1.6 API.
  * @since New in 1.6.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_client_log5(const apr_array_header_t *targets,
                 const svn_opt_revision_t *peg_revision,
Index: subversion/include/svn_ra.h
===================================================================
--- subversion/include/svn_ra.h (revision 1065683)
+++ subversion/include/svn_ra.h (working copy)
@@ -1433,6 +1433,9 @@
  * If @a include_merged_revisions is set, log information for revisions
  * which have been merged to @a targets will also be returned.
  *
+ * If @a ignore_properties is set, do not log information for revisions
+ * which have only property changes.
+ *
  * If @a revprops is NULL, retrieve all revprops; else, retrieve only the
  * revprops named in the array (i.e. retrieve none if the array is empty).
  *
@@ -1459,9 +1462,27 @@
  * revprops is NULL or contains a revprop other than svn:author, svn:date,
  * or svn:log, an @c SVN_ERR_RA_NOT_IMPLEMENTED error is returned.
  *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_ra_get_log3(svn_ra_session_t *session,
+ const apr_array_header_t *paths,
+ svn_revnum_t start,
+ svn_revnum_t end,
+ int limit,
+ svn_boolean_t discover_changed_paths,
+ svn_boolean_t strict_node_history,
+ svn_boolean_t include_merged_revisions,
+ svn_boolean_t ignore_properties,
+ const apr_array_header_t *revprops,
+ svn_log_entry_receiver_t receiver,
+ void *receiver_baton,
+ apr_pool_t *pool);
+
+/**
+ * Similar to svn_ra_get_log3(), but with ignore_properties set to @c FALSE.
  * @since New in 1.5.
  */
-
 svn_error_t *
 svn_ra_get_log2(svn_ra_session_t *session,
                 const apr_array_header_t *paths,
Index: subversion/libsvn_client/deprecated.c
===================================================================
--- subversion/libsvn_client/deprecated.c (revision 1065683)
+++ subversion/libsvn_client/deprecated.c (working copy)
@@ -1201,6 +1201,26 @@
 
 /*** From log.c ***/
 svn_error_t *
+svn_client_log5(const apr_array_header_t *targets,
+ const svn_opt_revision_t *peg_revision,
+ const apr_array_header_t *revision_ranges,
+ int limit,
+ svn_boolean_t discover_changed_paths,
+ svn_boolean_t strict_node_history,
+ svn_boolean_t include_merged_revisions,
+ const apr_array_header_t *revprops,
+ svn_log_entry_receiver_t receiver,
+ void *receiver_baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
+{
+ return svn_client_log6(targets, peg_revision, revision_ranges, limit,
+ discover_changed_paths, strict_node_history,
+ include_merged_revisions, FALSE, revprops,
+ receiver, receiver_baton, ctx, pool);
+}
+
+svn_error_t *
 svn_client_log4(const apr_array_header_t *targets,
                 const svn_opt_revision_t *peg_revision,
                 const svn_opt_revision_t *start,
Index: subversion/libsvn_client/log.c
===================================================================
--- subversion/libsvn_client/log.c (revision 1065683)
+++ subversion/libsvn_client/log.c (working copy)
@@ -266,13 +266,14 @@
 
 
 svn_error_t *
-svn_client_log5(const apr_array_header_t *targets,
+svn_client_log6(const apr_array_header_t *targets,
                 const svn_opt_revision_t *peg_revision,
                 const apr_array_header_t *revision_ranges,
                 int limit,
                 svn_boolean_t discover_changed_paths,
                 svn_boolean_t strict_node_history,
                 svn_boolean_t include_merged_revisions,
+ svn_boolean_t ignore_properties,
                 const apr_array_header_t *revprops,
                 svn_log_entry_receiver_t real_receiver,
                 void *real_receiver_baton,
@@ -603,7 +604,7 @@
           passed_receiver_baton = &lb;
         }
 
- SVN_ERR(svn_ra_get_log2(ra_session,
+ SVN_ERR(svn_ra_get_log3(ra_session,
                               condensed_targets,
                               start_revnum,
                               end_revnum,
@@ -611,6 +612,7 @@
                               discover_changed_paths,
                               strict_node_history,
                               include_merged_revisions,
+ ignore_properties,
                               passed_receiver_revprops,
                               passed_receiver,
                               passed_receiver_baton,
Index: subversion/libsvn_repos/deprecated.c
===================================================================
--- subversion/libsvn_repos/deprecated.c (revision 1065683)
+++ subversion/libsvn_repos/deprecated.c (working copy)
@@ -428,6 +428,29 @@
 
 /*** From logs.c ***/
 svn_error_t *
+svn_repos_get_logs4(svn_repos_t *repos,
+ const apr_array_header_t *paths,
+ svn_revnum_t start,
+ svn_revnum_t end,
+ int limit,
+ svn_boolean_t discover_changed_paths,
+ svn_boolean_t strict_node_history,
+ svn_boolean_t include_merged_revisions,
+ const apr_array_header_t *revprops,
+ svn_repos_authz_func_t authz_read_func,
+ void *authz_read_baton,
+ svn_log_entry_receiver_t receiver,
+ void *receiver_baton,
+ apr_pool_t *pool)
+{
+ return svn_repos_get_logs5(repos, paths, start, end, limit,
+ discover_changed_paths, strict_node_history,
+ FALSE, FALSE, revprops,
+ authz_read_func, authz_read_baton,
+ receiver, receiver_baton, pool);
+}
+
+svn_error_t *
 svn_repos_get_logs3(svn_repos_t *repos,
                     const apr_array_header_t *paths,
                     svn_revnum_t start,
Index: subversion/libsvn_repos/log.c
===================================================================
--- subversion/libsvn_repos/log.c (revision 1065683)
+++ subversion/libsvn_repos/log.c (working copy)
@@ -170,11 +170,15 @@
  * SVN_ERR_AUTHZ_UNREADABLE. (This is to distinguish a revision
  * which truly has no changed paths from a revision in which all
  * paths are unreadable.)
+ *
+ * If the revision contains only property changes then set ONLY_PROP_CHANGE
+ * to TRUE.
  */
 static svn_error_t *
 detect_changed(apr_hash_t **changed,
                svn_fs_root_t *root,
                svn_fs_t *fs,
+ svn_boolean_t *only_prop_change,
                svn_repos_authz_func_t authz_read_func,
                void *authz_read_baton,
                apr_pool_t *pool)
@@ -185,6 +189,7 @@
   svn_boolean_t found_readable = FALSE;
   svn_boolean_t found_unreadable = FALSE;
 
+ *only_prop_change = TRUE;
   *changed = apr_hash_make(pool);
   SVN_ERR(svn_fs_paths_changed2(&changes, root, pool));
 
@@ -226,6 +231,10 @@
             }
         }
 
+ /* Detect whether there is at least one non-property change. */
+ if (! change->prop_mod)
+ *only_prop_change = FALSE;
+
       /* At least one changed-path was readable. */
       found_readable = TRUE;
 
@@ -890,25 +899,27 @@
                svn_revnum_t rev,
                svn_fs_t *fs,
                svn_boolean_t discover_changed_paths,
+ svn_boolean_t ignore_properties,
+ svn_boolean_t *only_prop_change,
                const apr_array_header_t *revprops,
                svn_repos_authz_func_t authz_read_func,
                void *authz_read_baton,
                apr_pool_t *pool)
 {
- apr_hash_t *r_props, *changed_paths = NULL;
+ apr_hash_t *r_props, *changed_paths;
   svn_boolean_t get_revprops = TRUE, censor_revprops = FALSE;
 
   /* Discover changed paths if the user requested them
      or if we need to check that they are readable. */
   if ((rev > 0)
- && (authz_read_func || discover_changed_paths))
+ && (authz_read_func || discover_changed_paths || ignore_properties))
     {
       svn_fs_root_t *newroot;
       svn_error_t *patherr;
 
       SVN_ERR(svn_fs_revision_root(&newroot, fs, rev, pool));
       patherr = detect_changed(&changed_paths,
- newroot, fs,
+ newroot, fs, only_prop_change,
                                authz_read_func, authz_read_baton,
                                pool);
 
@@ -996,8 +1007,9 @@
  * FS is used with REV to fetch the interesting history information,
  * such as changed paths, revprops, etc.
  *
- * The detect_changed function is used if either AUTHZ_READ_FUNC is
- * not NULL, or if DISCOVER_CHANGED_PATHS is TRUE. See it for details.
+ * The detect_changed function is used if AUTHZ_READ_FUNC is not NULL,
+ * if DISCOVER_CHANGED_PATHS is TRUE or if IGNORE_PROPERTIES is TRUE.
+ * See it for details.
  *
  * If DESCENDING_ORDER is true, send child messages in descending order.
  *
@@ -1008,6 +1020,7 @@
 send_log(svn_revnum_t rev,
          svn_fs_t *fs,
          svn_boolean_t discover_changed_paths,
+ svn_boolean_t ignore_properties,
          const apr_array_header_t *revprops,
          svn_boolean_t has_children,
          svn_log_entry_receiver_t receiver,
@@ -1017,14 +1030,19 @@
          apr_pool_t *pool)
 {
   svn_log_entry_t *log_entry;
+ svn_boolean_t only_prop_change;
 
   log_entry = svn_log_entry_create(pool);
   SVN_ERR(fill_log_entry(log_entry, rev, fs, discover_changed_paths,
- revprops, authz_read_func, authz_read_baton,
- pool));
+ ignore_properties, &only_prop_change, revprops,
+ authz_read_func, authz_read_baton, pool));
   log_entry->has_children = has_children;
 
- /* Send the entry to the receiver. */
+ /* Skip property only revisions if IGNORE_PROPERTIES is TRUE */
+ if (ignore_properties && only_prop_change)
+ return NULL;
+
+ /* Send entry to the receiver. */
   return (*receiver)(receiver_baton, log_entry, pool);
 }
 
@@ -1362,6 +1380,7 @@
         svn_boolean_t strict_node_history,
         svn_boolean_t include_merged_revisions,
         svn_boolean_t ignore_missing_locations,
+ svn_boolean_t ignore_properties,
         const apr_array_header_t *revprops,
         svn_boolean_t descending_order,
         svn_log_entry_receiver_t receiver,
@@ -1387,6 +1406,7 @@
                         svn_mergeinfo_t mergeinfo,
                         svn_boolean_t discover_changed_paths,
                         svn_boolean_t strict_node_history,
+ svn_boolean_t ignore_properties,
                         const apr_array_header_t *revprops,
                         svn_log_entry_receiver_t receiver,
                         void *receiver_baton,
@@ -1415,9 +1435,9 @@
       svn_pool_clear(iterpool);
       SVN_ERR(do_logs(fs, pl_range->paths, pl_range->range.start,
                       pl_range->range.end, 0, discover_changed_paths,
- strict_node_history, TRUE, TRUE, revprops, TRUE,
- receiver, receiver_baton, authz_read_func,
- authz_read_baton, iterpool));
+ strict_node_history, TRUE, TRUE, ignore_properties,
+ revprops, TRUE, receiver, receiver_baton,
+ authz_read_func, authz_read_baton, iterpool));
     }
   svn_pool_destroy(iterpool);
 
@@ -1447,6 +1467,7 @@
         svn_boolean_t strict_node_history,
         svn_boolean_t include_merged_revisions,
         svn_boolean_t ignore_missing_locations,
+ svn_boolean_t ignore_properties,
         const apr_array_header_t *revprops,
         svn_boolean_t descending_order,
         svn_log_entry_receiver_t receiver,
@@ -1530,14 +1551,16 @@
              in anyway). */
           if (descending_order)
             {
- SVN_ERR(send_log(current, fs, discover_changed_paths,
+ SVN_ERR(send_log(current, fs, discover_changed_paths,
+ ignore_properties,
                                revprops, has_children, receiver, receiver_baton,
                                authz_read_func, authz_read_baton, iterpool));
               if (has_children)
                 {
                   SVN_ERR(handle_merged_revisions(current, fs, mergeinfo,
- discover_changed_paths,
- strict_node_history, revprops,
+ discover_changed_paths,
+ strict_node_history,
+ ignore_properties, revprops,
                                                   receiver, receiver_baton,
                                                   authz_read_func,
                                                   authz_read_baton,
@@ -1595,14 +1618,16 @@
             }
 
           SVN_ERR(send_log(current, fs,
- discover_changed_paths, revprops, has_children,
+ discover_changed_paths, ignore_properties,
+ revprops, has_children,
                            receiver, receiver_baton, authz_read_func,
                            authz_read_baton, iterpool));
           if (has_children)
             {
               SVN_ERR(handle_merged_revisions(current, fs, mergeinfo,
                                               discover_changed_paths,
- strict_node_history, revprops,
+ strict_node_history,
+ ignore_properties, revprops,
                                               receiver, receiver_baton,
                                               authz_read_func,
                                               authz_read_baton,
@@ -1619,7 +1644,7 @@
 
 
 svn_error_t *
-svn_repos_get_logs4(svn_repos_t *repos,
+svn_repos_get_logs5(svn_repos_t *repos,
                     const apr_array_header_t *paths,
                     svn_revnum_t start,
                     svn_revnum_t end,
@@ -1627,6 +1652,7 @@
                     svn_boolean_t discover_changed_paths,
                     svn_boolean_t strict_node_history,
                     svn_boolean_t include_merged_revisions,
+ svn_boolean_t ignore_properties,
                     const apr_array_header_t *revprops,
                     svn_repos_authz_func_t authz_read_func,
                     void *authz_read_baton,
@@ -1696,18 +1722,17 @@
 
           if (descending_order)
             rev = end - i;
- SVN_ERR(send_log(rev, fs, discover_changed_paths, revprops, FALSE,
- receiver, receiver_baton, authz_read_func,
- authz_read_baton, iterpool));
+ SVN_ERR(send_log(rev, fs, discover_changed_paths, ignore_properties,
+ revprops, FALSE, receiver, receiver_baton,
+ authz_read_func, authz_read_baton, iterpool));
         }
       svn_pool_destroy(iterpool);
 
       return SVN_NO_ERROR;
     }
 
- return do_logs(repos->fs, paths, start, end, limit,
- discover_changed_paths, strict_node_history,
- include_merged_revisions, FALSE, revprops,
- descending_order, receiver, receiver_baton,
- authz_read_func, authz_read_baton, pool);
+ return do_logs(repos->fs, paths, start, end, limit, discover_changed_paths,
+ strict_node_history, include_merged_revisions, FALSE,
+ ignore_properties, revprops, descending_order, receiver,
+ receiver_baton, authz_read_func, authz_read_baton, pool);
 }
Received on 2011-01-31 17:55:29 CET

This is an archived mail posted to the Subversion Dev mailing list.