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;
+}
+