You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by pb...@apache.org on 2010/02/24 21:39:45 UTC
svn commit: r915971 - in /subversion/trunk/subversion:
include/private/svn_mergeinfo_private.h libsvn_client/merge.c
libsvn_client/mergeinfo.c libsvn_subr/mergeinfo.c
Author: pburba
Date: Wed Feb 24 20:39:45 2010
New Revision: 915971
URL: http://svn.apache.org/viewvc?rev=915971&view=rev
Log:
Make subversion/libsvn_client/merge.c:init_rangelist() a Subversion private
function.
* subversion/include/private/svn_mergeinfo_private.h
(svn_rangelist__initialize): New.
* subversion/libsvn_client/merge.c
(init_rangelist): Remove.
(adjust_deleted_subtree_ranges,
filter_merged_revisions,
find_gaps_in_merge_source_history,
populate_remaining_ranges,
filter_natural_history_from_mergeinfo,
do_mergeinfo_unaware_dir_merge,
log_noop_revs,
remove_noop_subtree_ranges): Replace init_rangelist() with
svn_rangelist__initialize() or use the latter in the few places we
were still manually constructing one element rangelists.
* subversion/libsvn_client/mergeinfo.c
(filter_log_entry_with_rangelist,
svn_client_mergeinfo_log): Use svn_rangelist__initialize() rather than
manually building one element rangelists.
* subversion/libsvn_subr/mergeinfo.c
(svn_rangelist_inheritable2,
svn_mergeinfo__filter_mergeinfo_by_ranges): Use
svn_rangelist__initialize() rather than manually building one element
rangelists.
(svn_rangelist__initialize): New.
Modified:
subversion/trunk/subversion/include/private/svn_mergeinfo_private.h
subversion/trunk/subversion/libsvn_client/merge.c
subversion/trunk/subversion/libsvn_client/mergeinfo.c
subversion/trunk/subversion/libsvn_subr/mergeinfo.c
Modified: subversion/trunk/subversion/include/private/svn_mergeinfo_private.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/private/svn_mergeinfo_private.h?rev=915971&r1=915970&r2=915971&view=diff
==============================================================================
--- subversion/trunk/subversion/include/private/svn_mergeinfo_private.h (original)
+++ subversion/trunk/subversion/include/private/svn_mergeinfo_private.h Wed Feb 24 20:39:45 2010
@@ -191,6 +191,15 @@
const char *mergeinfo_str,
apr_pool_t *scratch_pool);
+/* Return a rangelist with one svn_merge_range_t * element defined by START,
+ END, and INHERITABLE. The rangelist and its contents are allocated in
+ RESULT_POOL. */
+apr_array_header_t *
+svn_rangelist__initialize(svn_revnum_t start,
+ svn_revnum_t end,
+ svn_boolean_t inheritable,
+ apr_pool_t *result_pool);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
Modified: subversion/trunk/subversion/libsvn_client/merge.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/merge.c?rev=915971&r1=915970&r2=915971&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/merge.c (original)
+++ subversion/trunk/subversion/libsvn_client/merge.c Wed Feb 24 20:39:45 2010
@@ -2757,29 +2757,6 @@
(*notify_b->wrapped_func)(notify_b->wrapped_baton, notify, pool);
}
-/* Helper for the numerous times we need to allocate and initialize
- a rangelist with one element.
-
- Return a rangelist allocated in POOL with one svn_merge_range_t *
- element, also allocated in POOL and defined by START, END, and
- INHERITABLE. */
-static apr_array_header_t *
-init_rangelist(svn_revnum_t start,
- svn_revnum_t end,
- svn_boolean_t inheritable,
- apr_pool_t *pool)
-{
- apr_array_header_t *rangelist =
- apr_array_make(pool, 1, sizeof(svn_merge_range_t *));
- svn_merge_range_t *range = apr_pcalloc(pool, sizeof(*range));
-
- range->start = start;
- range->end = end;
- range->inheritable = inheritable;
- APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) = range;
- return rangelist;
-}
-
/* Helper for fix_deleted_subtree_ranges(). Like fix_deleted_subtree_ranges()
this function should only be called when honoring mergeinfo.
@@ -2964,8 +2941,9 @@
exists and find the intersection of that and
CHILD->REMAINING_RANGES. */
exists_rangelist =
- init_rangelist(older_rev, revision_primary_url_deleted - 1,
- TRUE, subpool);
+ svn_rangelist__initialize(older_rev,
+ revision_primary_url_deleted - 1,
+ TRUE, subpool);
SVN_ERR(svn_rangelist_intersect(&(child->remaining_ranges),
exists_rangelist,
child->remaining_ranges,
@@ -2977,8 +2955,8 @@
Finally merge this rangelist with the rangelist above and
store the result in CHILD->REMANING_RANGES. */
deleted_rangelist =
- init_rangelist(revision_primary_url_deleted - 1, peg_rev,
- TRUE, subpool);
+ svn_rangelist__initialize(revision_primary_url_deleted - 1,
+ peg_rev, TRUE, subpool);
SVN_ERR(svn_rangelist_intersect(&deleted_rangelist,
deleted_rangelist,
parent->remaining_ranges,
@@ -3036,8 +3014,8 @@
segment->range_start + 1. Create a rangelist describing
range where PRIMARY_URL exists and find the intersection of that
range and CHILD->REMAINING_RANGELIST. */
- exists_rangelist = init_rangelist(segment->range_start, peg_rev,
- TRUE, subpool);
+ exists_rangelist = svn_rangelist__initialize(segment->range_start,
+ peg_rev, TRUE, subpool);
SVN_ERR(svn_rangelist_intersect(&(child->remaining_ranges),
exists_rangelist,
child->remaining_ranges,
@@ -3048,8 +3026,9 @@
that range and PARENT->REMAINING_RANGES. Then merge that rangelist
with exists_rangelist and store the result in
CHILD->REMANING_RANGES. */
- non_existent_rangelist = init_rangelist(older_rev, segment->range_start,
- TRUE, subpool);
+ non_existent_rangelist = svn_rangelist__initialize(older_rev,
+ segment->range_start,
+ TRUE, subpool);
SVN_ERR(svn_rangelist_intersect(&non_existent_rangelist,
non_existent_rangelist,
parent->remaining_ranges,
@@ -3498,7 +3477,8 @@
inheritance by default or we are requesting that they don't (i.e.
svn_rangelist_remove and svn_rangelist_intersect) then we could
set the inheritability as FALSE, it won't matter either way. */
- requested_rangelist = init_rangelist(revision1, revision2, TRUE, subpool);
+ requested_rangelist = svn_rangelist__initialize(revision1, revision2,
+ TRUE, subpool);
/* Now filter out revisions that have already been merged to CHILD. */
@@ -3958,9 +3938,9 @@
else if (apr_hash_count(implicit_src_mergeinfo) > 1) /* Rename */
{
apr_array_header_t *requested_rangelist =
- init_rangelist(MIN(revision1, revision2),
- MAX(revision1, revision2),
- TRUE, scratch_pool);
+ svn_rangelist__initialize(MIN(revision1, revision2),
+ MAX(revision1, revision2),
+ TRUE, scratch_pool);
apr_array_header_t *implicit_rangelist =
apr_array_make(scratch_pool, 2, sizeof(svn_merge_range_t *));
apr_array_header_t *gap_rangelist;
@@ -4042,15 +4022,9 @@
svn_client__merge_path_t *child =
APR_ARRAY_IDX(children_with_mergeinfo, i,
svn_client__merge_path_t *);
- svn_merge_range_t *range = apr_pcalloc(pool, sizeof(*range));
-
- range->start = revision1;
- range->end = revision2;
- range->inheritable = TRUE;
-
- child->remaining_ranges =
- apr_array_make(pool, 1, sizeof(svn_merge_range_t *));
- APR_ARRAY_PUSH(child->remaining_ranges, svn_merge_range_t *) = range;
+ child->remaining_ranges = svn_rangelist__initialize(revision1,
+ revision2,
+ TRUE, pool);
}
return SVN_NO_ERROR;
}
@@ -4077,8 +4051,8 @@
/* Stash any gap in the merge command baton, we'll need it later when
recording mergeinfo describing this merge. */
if (SVN_IS_VALID_REVNUM(gap_start) && SVN_IS_VALID_REVNUM(gap_end))
- merge_b->implicit_src_gap = init_rangelist(gap_start, gap_end, TRUE,
- pool);
+ merge_b->implicit_src_gap = svn_rangelist__initialize(gap_start, gap_end,
+ TRUE, pool);
for (i = 0; i < children_with_mergeinfo->nelts; i++)
{
@@ -6207,9 +6181,8 @@
{
/* Make the REQUESTED_RANGE into a rangelist. */
apr_array_header_t *requested_rangelist =
- apr_array_make(pool, 0, sizeof(svn_merge_range_t *));
- APR_ARRAY_PUSH(requested_rangelist, svn_merge_range_t *) =
- svn_merge_range_dup(requested_range, pool);
+ svn_rangelist__initialize(requested_range->start, requested_range->end,
+ requested_range->inheritable, pool);
*filtered_rangelist = NULL;
@@ -6817,18 +6790,10 @@
one element describing the merge of REVISION1:REVISION2 to
TARGET_DIR_WCPATH. */
svn_client__merge_path_t *item = apr_pcalloc(pool, sizeof(*item));
- svn_merge_range_t *itemrange = apr_pcalloc(pool, sizeof(*itemrange));
- apr_array_header_t *remaining_ranges = apr_array_make(
- pool, 1, sizeof(svn_merge_range_t *));
-
- itemrange->start = revision1;
- itemrange->end = revision2;
- itemrange->inheritable = TRUE;
-
- APR_ARRAY_PUSH(remaining_ranges, svn_merge_range_t *) = itemrange;
item->abspath = apr_pstrdup(pool, target_dir_wcpath);
- item->remaining_ranges = remaining_ranges;
+ item->remaining_ranges = svn_rangelist__initialize(revision1, revision2,
+ TRUE, pool);
APR_ARRAY_PUSH(notify_b->children_with_mergeinfo,
svn_client__merge_path_t *) = item;
return drive_merge_report_editor(target_dir_wcpath,
@@ -7250,8 +7215,9 @@
/* Unconditionally add LOG_ENTRY->REVISION to BATON->OPERATIVE_MERGES. */
SVN_ERR(svn_rangelist_merge(&(log_gap_baton->operative_ranges),
- init_rangelist(revision - 1 , revision,
- TRUE, log_gap_baton->pool),
+ svn_rangelist__initialize(revision - 1,
+ revision, TRUE,
+ log_gap_baton->pool),
log_gap_baton->pool));
/* Examine each path affected by LOG_ENTRY->REVISION. If the explicit or
@@ -7322,9 +7288,10 @@
event the inherited mergeinfo is actually non-inheritable. */
SVN_ERR(svn_rangelist_intersect(&intersecting_range,
paths_explicit_rangelist,
- init_rangelist(revision - 1 ,
- revision, TRUE,
- pool),
+ svn_rangelist__initialize(
+ revision - 1,
+ revision, TRUE,
+ pool),
mergeinfo_inherited, pool));
if (intersecting_range->nelts == 0)
@@ -7338,8 +7305,10 @@
if (!log_entry_rev_required)
SVN_ERR(svn_rangelist_merge(&(log_gap_baton->merged_ranges),
- init_rangelist(revision - 1 , revision,
- TRUE, log_gap_baton->pool),
+ svn_rangelist__initialize(revision - 1,
+ revision,
+ TRUE,
+ log_gap_baton->pool),
log_gap_baton->pool));
return SVN_NO_ERROR;
@@ -7410,9 +7379,9 @@
/* Given the requested merge of REVISION1:REVISION2 might there be any
part of this range required for subtrees but not for the target? */
- requested_ranges = init_rangelist(MIN(revision1, revision2),
- MAX(revision1, revision2),
- TRUE, scratch_pool);
+ requested_ranges = svn_rangelist__initialize(MIN(revision1, revision2),
+ MAX(revision1, revision2),
+ TRUE, scratch_pool);
SVN_ERR(svn_rangelist_remove(&subtree_gap_ranges,
root_child->remaining_ranges,
requested_ranges, FALSE, scratch_pool));
@@ -7486,9 +7455,9 @@
sizeof(const char *)),
log_noop_revs, &log_gap_baton, scratch_pool));
- inoperative_ranges = init_rangelist(oldest_gap_rev->start,
- youngest_gap_rev->end,
- TRUE, scratch_pool);
+ inoperative_ranges = svn_rangelist__initialize(oldest_gap_rev->start,
+ youngest_gap_rev->end,
+ TRUE, scratch_pool);
SVN_ERR(svn_rangelist_remove(&(inoperative_ranges),
log_gap_baton.operative_ranges,
inoperative_ranges, FALSE, scratch_pool));
Modified: subversion/trunk/subversion/libsvn_client/mergeinfo.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/mergeinfo.c?rev=915971&r1=915970&r2=915971&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/mergeinfo.c (original)
+++ subversion/trunk/subversion/libsvn_client/mergeinfo.c Wed Feb 24 20:39:45 2010
@@ -1303,19 +1303,15 @@
apr_pool_t *pool)
{
struct filter_log_entry_baton_t *fleb = baton;
- svn_merge_range_t *range;
apr_array_header_t *intersection, *this_rangelist;
if (fleb->ctx->cancel_func)
SVN_ERR(fleb->ctx->cancel_func(fleb->ctx->cancel_baton));
- this_rangelist = apr_array_make(pool, 1, sizeof(svn_merge_range_t *));
- range = apr_pcalloc(pool, sizeof(*range));
- range->start = log_entry->revision - 1;
- range->end = log_entry->revision;
- range->inheritable = TRUE;
- APR_ARRAY_PUSH(this_rangelist, svn_merge_range_t *) = range;
-
+ this_rangelist = svn_rangelist__initialize(log_entry->revision - 1,
+ log_entry->revision,
+ TRUE, pool);
+
/* Don't consider inheritance yet, see if LOG_ENTRY->REVISION is
fully or partially represented in BATON->RANGELIST. */
SVN_ERR(svn_rangelist_intersect(&intersection, fleb->rangelist,
@@ -1344,15 +1340,10 @@
apr_hash_index_t *hi;
svn_boolean_t all_subtrees_have_this_rev = TRUE;
apr_array_header_t *this_rev_rangelist =
- apr_array_make(pool, 1, sizeof(svn_merge_range_t *));
+ svn_rangelist__initialize(log_entry->revision - 1,
+ log_entry->revision, TRUE, pool);
apr_pool_t *iterpool = svn_pool_create(pool);
- range = apr_pcalloc(pool, sizeof(*range));
- range->start = log_entry->revision - 1;
- range->end = log_entry->revision;
- range->inheritable = TRUE;
- APR_ARRAY_PUSH(this_rev_rangelist, svn_merge_range_t *) = range;
-
for (hi = apr_hash_first(pool, log_entry->changed_paths2);
hi;
hi = apr_hash_next(hi))
@@ -2016,13 +2007,11 @@
APR_ARRAY_IDX(master_inheritable_rangelist,
master_inheritable_rangelist->nelts - 1,
svn_merge_range_t *), scratch_pool);
- apr_array_header_t *youngest_rangelist;
-
- youngest_range->start = youngest_range->end - 1;
- youngest_rangelist = apr_array_make(scratch_pool, 1,
- sizeof(svn_merge_range_t *));
- APR_ARRAY_PUSH(youngest_rangelist, svn_merge_range_t *) =
- youngest_range;
+ apr_array_header_t *youngest_rangelist =
+ svn_rangelist__initialize(youngest_range->end - 1,
+ youngest_range->end,
+ youngest_range->inheritable,
+ scratch_pool);;
for (hi = apr_hash_first(scratch_pool, source_history);
hi;
Modified: subversion/trunk/subversion/libsvn_subr/mergeinfo.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/mergeinfo.c?rev=915971&r1=915970&r2=915971&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/mergeinfo.c (original)
+++ subversion/trunk/subversion/libsvn_subr/mergeinfo.c Wed Feb 24 20:39:45 2010
@@ -1622,13 +1622,7 @@
/* We want only the non-inheritable ranges bound by START
and END removed. */
apr_array_header_t *ranges_inheritable =
- apr_array_make(scratch_pool, 0, sizeof(svn_merge_range_t *));
- svn_merge_range_t *range = apr_palloc(scratch_pool, sizeof(*range));
-
- range->start = start;
- range->end = end;
- range->inheritable = inheritable;
- APR_ARRAY_PUSH(ranges_inheritable, svn_merge_range_t *) = range;
+ svn_rangelist__initialize(start, end, inheritable, scratch_pool);
if (rangelist->nelts)
SVN_ERR(svn_rangelist_remove(inheritable_rangelist,
@@ -1967,14 +1961,8 @@
if (mergeinfo)
{
apr_hash_index_t *hi;
- svn_merge_range_t *range = apr_palloc(pool, sizeof(*range));
apr_array_header_t *filter_rangelist =
- apr_array_make(pool, 1, sizeof(svn_merge_range_t *));
-
- range->start = oldest_rev;
- range->end = youngest_rev;
- range->inheritable = TRUE;
- APR_ARRAY_PUSH(filter_rangelist, svn_merge_range_t *) = range;
+ svn_rangelist__initialize(oldest_rev, youngest_rev, TRUE, pool);
for (hi = apr_hash_first(pool, mergeinfo); hi; hi = apr_hash_next(hi))
{
@@ -2050,3 +2038,21 @@
return SVN_NO_ERROR;
}
+
+apr_array_header_t *
+svn_rangelist__initialize(svn_revnum_t start,
+ svn_revnum_t end,
+ svn_boolean_t inheritable,
+ apr_pool_t *result_pool)
+{
+ apr_array_header_t *rangelist =
+ apr_array_make(result_pool, 1, sizeof(svn_merge_range_t *));
+ svn_merge_range_t *range = apr_pcalloc(result_pool, sizeof(*range));
+
+ range->start = start;
+ range->end = end;
+ range->inheritable = inheritable;
+ APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) = range;
+ return rangelist;
+}
+