svn commit: r1922129 - in /subversion/branches/apply-processor/subversion/libsvn_client: client.h merge.c merge_processor.c

[email protected]
Newsgroups gmane.comp.version-control.subversion.svn
Message-ID <[email protected]>
Author: rinrab
Date: Tue Nov 26 18:29:02 2024
New Revision: 1922129

URL: http://svn.apache.org/viewvc?rev=1922129&view=rev
Log:
On the 'apply-processor' branch: Allow merge.c to adjust mergeinfo properties
by adding adjust_mergeinfo callback to cb_table.

This will apply several mergeinfo adjustments onto the properties.

### Can we make this function to return and work with only the mergeinfo
### property instead of interacting with the entire list of properties?

* subversion/libsvn_client/client.h
  (svn_client__apply_processor_callbacks_t): Add adjust_mergeinfo method.
* subversion/libsvn_client/merge.c
  (apply_processor_adjust_mergeinfo): Implement function, find the previous
   code near merge_processor.c@1922128:321.
  (do_merge): Setup cb_table.adjust_mergeinfo with pointer to the
   apply_processor_adjust_mergeinfo function.
* subversion/libsvn_client/merge_processor.c
  (prepare_merge_props_changed): Invoke cb_table->adjust_mergeinfo() to let
   them do the work.

Modified:
    subversion/branches/apply-processor/subversion/libsvn_client/client.h
    subversion/branches/apply-processor/subversion/libsvn_client/merge.c
    subversion/branches/apply-processor/subversion/libsvn_client/merge_processor.c

Modified: subversion/branches/apply-processor/subversion/libsvn_client/client.h
URL: http://svn.apache.org/viewvc/subversion/branches/apply-processor/subversion/libsvn_client/client.h?rev=1922129&r1=1922128&r2=1922129&view=diff
==============================================================================
--- subversion/branches/apply-processor/subversion/libsvn_client/client.h (original)
+++ subversion/branches/apply-processor/subversion/libsvn_client/client.h Tue Nov 26 18:29:02 2024
@@ -1301,6 +1301,12 @@ typedef struct svn_client__apply_process
                                     const svn_string_t *old_mergeinfo,
                                     const svn_string_t *new_mergeinfo,
                                     apr_pool_t *pool);
+
+  svn_error_t* (*adjust_mergeinfo)(void *baton,
+                                   apr_array_header_t **props_changes_p,
+                                   const char *local_abspath,
+                                   apr_pool_t *scratch_pool,
+                                   apr_pool_t *result_pool);
 } svn_client__apply_processor_callbacks_t;
 
 /* Return a diff processor that will apply the merge to the WC.

Modified: subversion/branches/apply-processor/subversion/libsvn_client/merge.c
URL: http://svn.apache.org/viewvc/subversion/branches/apply-processor/subversion/libsvn_client/merge.c?rev=1922129&r1=1922128&r2=1922129&view=diff
==============================================================================
--- subversion/branches/apply-processor/subversion/libsvn_client/merge.c (original)
+++ subversion/branches/apply-processor/subversion/libsvn_client/merge.c Tue Nov 26 18:29:02 2024
@@ -7353,6 +7353,36 @@ apply_processor_mergeinfo_changed(void *
   return SVN_NO_ERROR;
 }
 
+/* Implements svn_client__apply_processor_callbacks_t::adjust_mergeinfo */
+static svn_error_t *
+apply_processor_adjust_mergeinfo(void *baton,
+                                 apr_array_header_t **props_changes_p,
+                                 const char *local_abspath,
+                                 apr_pool_t *scratch_pool,
+                                 apr_pool_t *result_pool)
+
+{
+  merge_cmd_baton_t *merge_b = baton;
+
+  /* If this is a forward merge then don't add new mergeinfo to
+     PATH that is already part of PATH's own history, see
+     http://svn.haxx.se/dev/archive-2008-09/0006.shtml.  If the
+     merge sources are not ancestral then there is no concept of a
+     'forward' or 'reverse' merge and we filter unconditionally. */
+  if (merge_b->merge_source.loc1->rev < merge_b->merge_source.loc2->rev
+      || !merge_b->merge_source.ancestral)
+    {
+      if (HONOR_MERGEINFO(merge_b) || merge_b->reintegrate_merge)
+        SVN_ERR(filter_self_referential_mergeinfo(props_changes_p,
+                                                  local_abspath,
+                                                  merge_b->ra_session2,
+                                                  merge_b->ctx,
+                                                  result_pool));
+    }
+
+  return SVN_NO_ERROR;
+}
+
 /* Drive a merge of MERGE_SOURCES into working copy node TARGET
    and possibly record mergeinfo describing the merge -- see
    RECORD_MERGEINFO().
@@ -7573,6 +7603,7 @@ do_merge(apr_hash_t **modified_subtrees,
       cb_table.skipped_path = apply_processor_skipped_path;
       cb_table.updated_path = apply_processor_updated_path;
       cb_table.mergeinfo_changed = apply_processor_mergeinfo_changed;
+      cb_table.adjust_mergeinfo = apply_processor_adjust_mergeinfo;
 
       svn_pool_clear(iterpool);
 

Modified: subversion/branches/apply-processor/subversion/libsvn_client/merge_processor.c
URL: http://svn.apache.org/viewvc/subversion/branches/apply-processor/subversion/libsvn_client/merge_processor.c?rev=1922129&r1=1922128&r2=1922129&view=diff
==============================================================================
--- subversion/branches/apply-processor/subversion/libsvn_client/merge_processor.c (original)
+++ subversion/branches/apply-processor/subversion/libsvn_client/merge_processor.c Tue Nov 26 18:29:02 2024
@@ -321,22 +321,13 @@ prepare_merge_props_changed(const apr_ar
       if (! merge_b->same_repos)
         SVN_ERR(omit_mergeinfo_changes(&props, props, result_pool));
 
-      /* If this is a forward merge then don't add new mergeinfo to
-         PATH that is already part of PATH's own history, see
-         http://svn.haxx.se/dev/archive-2008-09/0006.shtml.  If the
-         merge sources are not ancestral then there is no concept of a
-         'forward' or 'reverse' merge and we filter unconditionally. */
-      if (merge_b->merge_source.loc1->rev < merge_b->merge_source.loc2->rev
-          || !merge_b->merge_source.ancestral)
+      if (merge_b->cb_table && merge_b->cb_table->adjust_mergeinfo)
         {
-#if TODO_FILTER_MERGEINFO
-          if (HONOR_MERGEINFO(merge_b) || merge_b->reintegrate_merge)
-            SVN_ERR(filter_self_referential_mergeinfo(&props,
+          SVN_ERR(merge_b->cb_table->adjust_mergeinfo(merge_b->cb_baton,
+                                                      &props,
                                                       local_abspath,
-                                                      merge_b->ra_session2,
-                                                      merge_b->ctx,
+                                                      scratch_pool,
                                                       result_pool));
-#endif
         }
     }
   *prop_updates = props;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.