You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ju...@apache.org on 2015/07/30 13:02:08 UTC

svn commit: r1693408 - in /subversion/branches/move-tracking-2/subversion: include/private/svn_editor3e.h include/private/svn_element.h libsvn_delta/editor3e.c libsvn_delta/element.c

Author: julianfoad
Date: Thu Jul 30 11:02:08 2015
New Revision: 1693408

URL: http://svn.apache.org/r1693408
Log:
On the 'move-tracking-2' branch: Change the payload resolver API to populate
the content of the existing payload structure instead of just returning the
content.

* subversion/include/private/svn_editor3e.h
  (svn_editor3_payload_resolve,
   svn_editor3_cb_payload_resolve_t): Remove the output and pool parameters
    and update the doc string.

* subversion/libsvn_delta/editor3e.c
  (svn_editor3_payload_resolve,
   wrap_payload_resolve,
   change_detection_payload_resolve): Remove the output and pool parameters.
  (svn_branch_subtree_differences): Simplify calls accordingly.

* subversion/include/private/svn_element.h
  (svn_element_payload_t): Add a 'pool' field.

* subversion/libsvn_delta/element.c
  (svn_element_payload_create_ref,
   svn_element_payload_create_dir,
   svn_element_payload_create_file,
   svn_element_payload_create_symlink): Initialize the 'pool' field.

Modified:
    subversion/branches/move-tracking-2/subversion/include/private/svn_editor3e.h
    subversion/branches/move-tracking-2/subversion/include/private/svn_element.h
    subversion/branches/move-tracking-2/subversion/libsvn_delta/editor3e.c
    subversion/branches/move-tracking-2/subversion/libsvn_delta/element.c

Modified: subversion/branches/move-tracking-2/subversion/include/private/svn_editor3e.h
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/include/private/svn_editor3e.h?rev=1693408&r1=1693407&r2=1693408&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/include/private/svn_editor3e.h (original)
+++ subversion/branches/move-tracking-2/subversion/include/private/svn_editor3e.h Thu Jul 30 11:02:08 2015
@@ -773,15 +773,10 @@ svn_editor3_alter(svn_editor3_t *editor,
  * path@rev location in the repository), fetch the full payload.
  * That is, leave the 'ref' field as it is and also fill in the
  * 'kind', 'props', and other fields as appropriate.
- *
- * In all cases, return a copy of the full payload in @a *payload_p,
- * allocated in @a result_pool.
  */
 svn_error_t *
 svn_editor3_payload_resolve(svn_editor3_t *editor,
-                            svn_element_payload_t **payload_p,
-                            const svn_branch_el_rev_content_t *element,
-                            apr_pool_t *result_pool);
+                            svn_branch_el_rev_content_t *element);
 
 /** Register a sequence point.
  *
@@ -920,9 +915,7 @@ typedef svn_error_t *(*svn_editor3_cb_al
  */
 typedef svn_error_t *(*svn_editor3_cb_payload_resolve_t)(
   void *baton,
-  svn_element_payload_t **payload_p,
-  const svn_branch_el_rev_content_t *element,
-  apr_pool_t *result_pool,
+  svn_branch_el_rev_content_t *element,
   apr_pool_t *scratch_pool);
 
 /** @see svn_editor3_sequence_point(), #svn_editor3_t

Modified: subversion/branches/move-tracking-2/subversion/include/private/svn_element.h
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/include/private/svn_element.h?rev=1693408&r1=1693407&r2=1693408&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/include/private/svn_element.h (original)
+++ subversion/branches/move-tracking-2/subversion/include/private/svn_element.h Thu Jul 30 11:02:08 2015
@@ -105,6 +105,11 @@ struct svn_element_payload_t
    * The 'null' value is (SVN_INVALID_REVNUM, NULL). */
   svn_pathrev_t ref;
 
+  /* The pool in which the payload's content is allocated. Used when
+   * resolving (populating the props/text/target in) a payload that was
+   * originally defined by reference. */
+  apr_pool_t *pool;
+
   /* Properties (for kind != unknown).
    * Maps (const char *) name -> (svn_string_t) value.
    * An empty hash means no properties. (SHOULD NOT be NULL.)

Modified: subversion/branches/move-tracking-2/subversion/libsvn_delta/editor3e.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_delta/editor3e.c?rev=1693408&r1=1693407&r2=1693408&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_delta/editor3e.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_delta/editor3e.c Thu Jul 30 11:02:08 2015
@@ -317,17 +317,13 @@ svn_editor3_alter(svn_editor3_t *editor,
 
 svn_error_t *
 svn_editor3_payload_resolve(svn_editor3_t *editor,
-                            svn_element_payload_t **payload_p,
-                            const svn_branch_el_rev_content_t *element,
-                            apr_pool_t *result_pool)
+                            svn_branch_el_rev_content_t *element)
 {
   SVN_ERR_ASSERT(!element->payload
                  || svn_element_payload_invariants(element->payload));
 
   DO_CALLBACK(editor, cb_payload_resolve,
-              3(payload_p,
-                element,
-                result_pool));
+              1(element));
 
   SVN_ERR_ASSERT(!element->payload
                  || svn_element_payload_invariants(element->payload));
@@ -542,17 +538,13 @@ wrap_alter(void *baton,
 
 static svn_error_t *
 wrap_payload_resolve(void *baton,
-                     svn_element_payload_t **payload_p,
-                     const svn_branch_el_rev_content_t *element,
-                     apr_pool_t *result_pool,
+                     svn_branch_el_rev_content_t *element,
                      apr_pool_t *scratch_pool)
 {
   wrapper_baton_t *eb = baton;
 
   SVN_ERR(svn_editor3_payload_resolve(eb->wrapped_editor,
-                                  payload_p,
-                                  element,
-                                  result_pool));
+                                      element));
   return SVN_NO_ERROR;
 }
 
@@ -745,17 +737,13 @@ change_detection_alter(void *baton,
 
 static svn_error_t *
 change_detection_payload_resolve(void *baton,
-                     svn_element_payload_t **payload_p,
-                     const svn_branch_el_rev_content_t *element,
-                     apr_pool_t *result_pool,
+                     svn_branch_el_rev_content_t *element,
                      apr_pool_t *scratch_pool)
 {
   change_detection_baton_t *eb = baton;
 
   SVN_ERR(svn_editor3_payload_resolve(eb->wrapped_editor,
-                                      payload_p,
-                                      element,
-                                      result_pool));
+                                      element));
   return SVN_NO_ERROR;
 }
 
@@ -854,25 +842,11 @@ svn_branch_subtree_differences(apr_hash_
       /* If node payload is given by reference, resolve it to full payload */
       if (element_left)
         {
-          svn_element_payload_t *payload;
-
-          SVN_ERR(svn_editor3_payload_resolve(editor, &payload, element_left,
-                                          result_pool));
-          element_left
-            = svn_branch_el_rev_content_create(element_left->parent_eid,
-                                               element_left->name,
-                                               payload, result_pool);
+          SVN_ERR(svn_editor3_payload_resolve(editor, element_left));
         }
       if (element_right)
         {
-          svn_element_payload_t *payload;
-
-          SVN_ERR(svn_editor3_payload_resolve(editor, &payload, element_right,
-                                          result_pool));
-          element_right
-            = svn_branch_el_rev_content_create(element_right->parent_eid,
-                                               element_right->name,
-                                               payload, result_pool);
+          SVN_ERR(svn_editor3_payload_resolve(editor, element_right));
         }
 
       if (! svn_branch_el_rev_content_equal(element_left, element_right,

Modified: subversion/branches/move-tracking-2/subversion/libsvn_delta/element.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_delta/element.c?rev=1693408&r1=1693407&r2=1693408&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_delta/element.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_delta/element.c Thu Jul 30 11:02:08 2015
@@ -177,6 +177,7 @@ svn_element_payload_create_ref(svn_pathr
   svn_element_payload_t *new_payload
     = apr_pcalloc(result_pool, sizeof(*new_payload));
 
+  new_payload->pool = result_pool;
   new_payload->kind = svn_node_unknown;
   new_payload->ref = svn_pathrev_dup(ref, result_pool);
   assert(svn_element_payload_invariants(new_payload));
@@ -190,6 +191,7 @@ svn_element_payload_create_dir(apr_hash_
   svn_element_payload_t *new_payload
     = apr_pcalloc(result_pool, sizeof(*new_payload));
 
+  new_payload->pool = result_pool;
   new_payload->kind = svn_node_dir;
   new_payload->props = props ? svn_prop_hash_dup(props, result_pool) : NULL;
   assert(svn_element_payload_invariants(new_payload));
@@ -206,6 +208,7 @@ svn_element_payload_create_file(apr_hash
 
   SVN_ERR_ASSERT_NO_RETURN(text);
 
+  new_payload->pool = result_pool;
   new_payload->kind = svn_node_file;
   new_payload->props = props ? svn_prop_hash_dup(props, result_pool) : NULL;
   new_payload->text = svn_stringbuf_dup(text, result_pool);
@@ -223,6 +226,7 @@ svn_element_payload_create_symlink(apr_h
 
   SVN_ERR_ASSERT_NO_RETURN(target);
 
+  new_payload->pool = result_pool;
   new_payload->kind = svn_node_symlink;
   new_payload->props = props ? svn_prop_hash_dup(props, result_pool) : NULL;
   new_payload->target = apr_pstrdup(result_pool, target);