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.