subversion-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From julianf...@apache.org
Subject svn commit: r1693451 - in /subversion/branches/move-tracking-2/subversion: include/private/svn_element.h libsvn_delta/branch.c libsvn_delta/compat3e.c libsvn_delta/element.c
Date Thu, 30 Jul 2015 16:04:54 GMT
Author: julianfoad
Date: Thu Jul 30 16:04:53 2015
New Revision: 1693451

URL: http://svn.apache.org/r1693451
Log:
On the 'move-tracking-2' branch: Continue preparation for top-level
branching.

In the element payload structure, don't store the repository-relative path
where we store the payload, as doing that embodied an assumption that only
one branch can occupy any one path. Make this storage-path information
private to the 'compat' module.

* subversion/include/private/svn_element.h
  (svn_element_branch_ref_t): New type.
  (svn_element_payload_t,
   svn_element_payload_create_ref): Replace the pathrev reference with a
    branch reference.

* subversion/libsvn_delta/element.c
  (svn_element_payload_invariants,
   svn_element_payload_dup,
   svn_element_payload_create_ref): Update accordingly.

* subversion/libsvn_delta/branch.c
  (svn_branch_state_parse): Initialize each payload with a branch reference
    rather than with a pathrev reference.

* subversion/libsvn_delta/compat3e.c
  (branch_get_storage_root_rrpath,
   branch_get_storage_rrpath_by_eid,
   storage_pathrev_from_branch_ref): New.
  (payload_fetch): No longer set the payload's pathrev reference. Add a doc
    string.
  (payload_get_storage_pathrev,
   payload_resolve): New.
  (editor3_payload_resolve): Simplify by using 'payload_resolve'.
  (convert_branch_to_paths): Return 'storage' paths rather than branch-
    nesting paths.
  (get_copy_from): Adjust to use the new way of getting a storage path.
  (drive_changes_r): Adjust accordingly.

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

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=1693451&r1=1693450&r2=1693451&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
16:04:53 2015
@@ -48,6 +48,15 @@ typedef struct svn_pathrev_t
   const char *relpath;
 } svn_pathrev_t;
 
+/**
+ */
+typedef struct svn_element_branch_ref_t
+{
+  svn_revnum_t rev;
+  const char *branch_id;
+  int eid;
+} svn_element_branch_ref_t;
+
 /* Return a duplicate of OLD, allocated in RESULT_POOL. */
 svn_pathrev_t
 svn_pathrev_dup(svn_pathrev_t old,
@@ -101,9 +110,10 @@ struct svn_element_payload_t
   /* The node kind for this payload: dir, file, symlink, or unknown. */
   svn_node_kind_t kind;
 
-  /* Reference existing, committed payload at REF (for kind=unknown).
-   * The 'null' value is (SVN_INVALID_REVNUM, NULL). */
-  svn_pathrev_t ref;
+  /* Reference an existing, committed payload. (Use with kind=unknown if
+   * there is no content in props/text/targe fields.)
+   * The 'null' value is (SVN_INVALID_REVNUM, NULL, *). */
+  svn_element_branch_ref_t branch_ref;
 
   /* The pool in which the payload's content is allocated. Used when
    * resolving (populating the props/text/target in) a payload that was
@@ -143,14 +153,16 @@ svn_element_payload_equal(const svn_elem
                           const svn_element_payload_t *right,
                           apr_pool_t *scratch_pool);
 
-/** Create a new node-payload object by reference to an existing node.
+/** Create a new node-payload object by reference to an existing payload.
  *
  * Set the node kind to 'unknown'.
  *
  * Allocate the result in @a result_pool.
  */
 svn_element_payload_t *
-svn_element_payload_create_ref(svn_pathrev_t ref,
+svn_element_payload_create_ref(svn_revnum_t rev,
+                               const char *branch_id,
+                               int eid,
                                apr_pool_t *result_pool);
 
 /** Create a new node-payload object for a directory node.

Modified: subversion/branches/move-tracking-2/subversion/libsvn_delta/branch.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_delta/branch.c?rev=1693451&r1=1693450&r2=1693451&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_delta/branch.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_delta/branch.c Thu Jul 30 16:04:53
2015
@@ -1019,7 +1019,6 @@ svn_branch_state_parse(svn_branch_state_
   svn_branch_state_t *outer_branch;
   int outer_eid;
   int eid;
-  svn_branch_subtree_t *tree;
 
   SVN_ERR(parse_branch_line(bid, &root_eid,
                             stream, scratch_pool));
@@ -1042,8 +1041,8 @@ svn_branch_state_parse(svn_branch_state_
                                          outer_branch, outer_eid,
                                          result_pool);
 
-  /* Read in the structure, leaving the payload of each element as null */
-  tree = svn_branch_subtree_create(NULL, root_eid, scratch_pool);
+  /* Read in the structure. Set the payload of each normal element to a
+     (branch-relative) reference. */
   for (eid = rev_root->first_eid; eid < rev_root->next_eid; eid++)
     {
       int this_eid, this_parent_eid;
@@ -1056,49 +1055,18 @@ svn_branch_state_parse(svn_branch_state_
 
       if (this_name)
         {
-          svn_branch_el_rev_content_t *element
-            = svn_branch_el_rev_content_create(this_parent_eid, this_name,
-                                               NULL /*payload*/, scratch_pool);
           if (! is_subbranch)
-            element->payload = (void *)1;
-
-          svn_int_hash_set(tree->e_map, this_eid, element);
-        }
-    }
-
-  /* Populate the payload reference for each element, now that we have
-     enough info to calculate full paths */
-  /* Subbranch root elements should have payload=null */
-  for (eid = rev_root->first_eid; eid < rev_root->next_eid; eid++)
-    {
-      svn_branch_el_rev_content_t *element = svn_int_hash_get(tree->e_map, eid);
-
-      if (element)
-        {
-          if (element->payload == (void *)1)
             {
-              /* ### need to get path within temp hash tree */
-              const char *relpath
-                = svn_branch_subtree_get_path_by_eid(tree, eid, scratch_pool);
-              const char *rrpath
-                = svn_relpath_join(svn_branch_get_root_rrpath(branch_state,
-                                                              result_pool),
-                                   relpath, scratch_pool);
-              svn_pathrev_t peg;
-              svn_element_payload_t *payload;
-
-              /* Specify the payload by reference */
-              peg.rev = rev_root->rev;
-              peg.relpath = rrpath;
-              payload = svn_element_payload_create_ref(peg, scratch_pool);
-
+              svn_element_payload_t *payload
+                = svn_element_payload_create_ref(rev_root->rev, bid, eid,
+                                                 result_pool);
               svn_branch_update_element(
-                branch_state, eid, element->parent_eid, element->name, payload);
+                branch_state, eid, this_parent_eid, this_name, payload);
             }
           else
             {
               svn_branch_update_subbranch_root_element(
-                branch_state, eid, element->parent_eid, element->name);
+                branch_state, eid, this_parent_eid, this_name);
             }
         }
     }

Modified: subversion/branches/move-tracking-2/subversion/libsvn_delta/compat3e.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_delta/compat3e.c?rev=1693451&r1=1693450&r2=1693451&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_delta/compat3e.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_delta/compat3e.c Thu Jul 30 16:04:53
2015
@@ -949,6 +949,89 @@ apply_change(void **dir_baton,
 
 /*
  * ========================================================================
+ * Old-repository storage paths for branch elements
+ * ========================================================================
+ *
+ *   B0    e0   =>  ^/
+ *   B0    e9   =>  ^/.../foo
+ *   B0.12 e12  =>  ^/.../trunk
+ *   B0.12 e13  =>  ^/.../trunk/.../bar
+ *
+ * TODO: To support top-level branches, this needs to return disjoint sets
+ * of paths for different top-level branches:
+ *
+ *   B0  =>  ^/top0/...
+ *           ^/top0/.../trunk/...  <= B0.12
+ *   B1  =>  ^/top1/...
+ *
+ * Ultimately it may be better to put each branch in a separate top-level dir:
+ *
+ *   B0     =>  ^/B0/...
+ *   B0.12  =>  ^/B0.12/...
+ *   B1     =>  ^/B1/...
+ */
+
+/* Get the old-repository path for the storage of the root element of BRANCH.
+ *
+ * Currently, this is the same as the nested-branching hierarchical path
+ * (and thus assumes there is only one top-level branch).
+ */
+static const char *
+branch_get_storage_root_rrpath(const svn_branch_state_t *branch,
+                               apr_pool_t *result_pool)
+{
+  return svn_branch_get_root_rrpath(branch, result_pool);
+}
+
+/* Get the old-repository path for the storage of element EID of BRANCH.
+ *
+ * If the element EID doesn't exist in BRANCH, return NULL.
+ */
+static const char *
+branch_get_storage_rrpath_by_eid(const svn_branch_state_t *branch,
+                                 int eid,
+                                 apr_pool_t *result_pool)
+{
+  const char *path = svn_branch_get_path_by_eid(branch, eid, result_pool);
+  const char *rrpath = NULL;
+
+  if (path)
+    {
+      rrpath = svn_relpath_join(branch_get_storage_root_rrpath(branch,
+                                                               result_pool),
+                                path, result_pool);
+    }
+  return rrpath;
+}
+
+/* Return, in *STORAGE_PATHREV_P, the storage-rrpath-rev for BRANCH_REF.
+ */
+static svn_error_t *
+storage_pathrev_from_branch_ref(svn_pathrev_t *storage_pathrev_p,
+                                svn_element_branch_ref_t branch_ref,
+                                svn_branch_repos_t *repos,
+                                apr_pool_t *result_pool,
+                                apr_pool_t *scratch_pool)
+{
+  svn_branch_el_rev_id_t *el_rev;
+
+  SVN_ERR(svn_branch_repos_find_el_rev_by_id(&el_rev,
+                                             repos,
+                                             branch_ref.rev,
+                                             branch_ref.branch_id,
+                                             branch_ref.eid,
+                                             scratch_pool, scratch_pool));
+
+  storage_pathrev_p->rev = el_rev->rev;
+  storage_pathrev_p->relpath
+    = branch_get_storage_rrpath_by_eid(el_rev->branch, el_rev->eid,
+                                       result_pool);
+
+  return SVN_NO_ERROR;
+}
+
+/*
+ * ========================================================================
  * Editor for Commit (independent per-element changes; element-id addressing)
  * ========================================================================
  */
@@ -957,7 +1040,10 @@ apply_change(void **dir_baton,
 #define PAYLOAD_IS_ONLY_BY_REFERENCE(payload) \
     ((payload)->kind == svn_node_unknown)
 
-/*  */
+/* Fetch a payload as *PAYLOAD_P from its storage-pathrev PATH_REV.
+ * Fetch names of immediate children of PATH_REV as *CHILDREN_NAMES.
+ * Either of the outputs may be null if not wanted.
+ */
 static svn_error_t *
 payload_fetch(svn_element_payload_t **payload_p,
               apr_hash_t **children_names,
@@ -969,7 +1055,6 @@ payload_fetch(svn_element_payload_t **pa
   svn_element_payload_t *payload
     = apr_pcalloc(result_pool, sizeof (*payload));
 
-  payload->ref = *path_rev;
   SVN_ERR(eb->fetch_func(&payload->kind,
                          &payload->props,
                          &payload->text,
@@ -986,6 +1071,55 @@ payload_fetch(svn_element_payload_t **pa
   return SVN_NO_ERROR;
 }
 
+/* Return the storage-pathrev of PAYLOAD as *STORAGE_PATHREV_P.
+ *
+ * Find the storage-pathrev from PAYLOAD->branch_ref.
+ */
+static svn_error_t *
+payload_get_storage_pathrev(svn_pathrev_t *storage_pathrev_p,
+                            svn_element_payload_t *payload,
+                            svn_branch_repos_t *repos,
+                            apr_pool_t *result_pool)
+{
+  SVN_ERR_ASSERT(payload->branch_ref.branch_id /* && ... */);
+
+  SVN_ERR(storage_pathrev_from_branch_ref(storage_pathrev_p,
+                                          payload->branch_ref, repos,
+                                          result_pool, result_pool));
+  return SVN_NO_ERROR;
+}
+
+/* Fill in the actual payload, from its reference, if not already done.
+ */
+static svn_error_t *
+payload_resolve(svn_element_payload_t *payload,
+                ev3_from_delta_baton_t *eb,
+                apr_pool_t *scratch_pool)
+{
+  svn_pathrev_t storage;
+
+  SVN_ERR_ASSERT(svn_element_payload_invariants(payload));
+
+  if (! PAYLOAD_IS_ONLY_BY_REFERENCE(payload))
+    return SVN_NO_ERROR;
+
+  SVN_ERR(payload_get_storage_pathrev(&storage, payload,
+                                      eb->edited_rev_root->repos,
+                                      scratch_pool));
+
+  SVN_ERR(eb->fetch_func(&payload->kind,
+                         &payload->props,
+                         &payload->text,
+                         NULL,
+                         eb->fetch_baton,
+                         storage.relpath, storage.rev,
+                         payload->pool, scratch_pool));
+
+  SVN_ERR_ASSERT(svn_element_payload_invariants(payload));
+  SVN_ERR_ASSERT(! PAYLOAD_IS_ONLY_BY_REFERENCE(payload));
+  return SVN_NO_ERROR;
+}
+
 static svn_error_t *
 editor3_payload_resolve(void *baton,
                         svn_branch_el_rev_content_t *element,
@@ -1000,15 +1134,7 @@ editor3_payload_resolve(void *baton,
   /* If payload is only by reference, fetch full payload. */
   if (element->payload && PAYLOAD_IS_ONLY_BY_REFERENCE(element->payload))
     {
-      svn_element_payload_t *new_payload;
-
-      SVN_ERR(payload_fetch(&new_payload, NULL,
-                            eb, &element->payload->ref,
-                            element->payload->pool, scratch_pool));
-      element->payload->kind = new_payload->kind;
-      element->payload->props = new_payload->props;
-      element->payload->text = new_payload->text;
-      element->payload->target = new_payload->target;
+      SVN_ERR(payload_resolve(element->payload, eb, scratch_pool));
     }
   return SVN_NO_ERROR;
 }
@@ -1138,7 +1264,7 @@ editor3_alter(void *baton,
   return SVN_NO_ERROR;
 }
 
-/* Update *PATHS, a hash of (rrpath -> svn_branch_el_rev_id_t),
+/* Update *PATHS, a hash of (storage_rrpath -> svn_branch_el_rev_id_t),
  * creating or filling in entries for all elements in BRANCH.
  */
 static void
@@ -1155,11 +1281,8 @@ convert_branch_to_paths(apr_hash_t *path
        hi; hi = apr_hash_next(hi))
     {
       int eid = *(const int *)apr_hash_this_key(hi);
-      const char *relpath = svn_branch_get_path_by_eid(branch, eid,
-                                                       result_pool);
       const char *rrpath
-        = svn_relpath_join(svn_branch_get_root_rrpath(branch, scratch_pool),
-                           relpath, result_pool);
+        = branch_get_storage_rrpath_by_eid(branch, eid, result_pool);
       svn_branch_el_rev_id_t *ba = svn_hash_gets(paths, rrpath);
 
       /* Fill in the details. If it's already been filled in, then let a
@@ -1187,7 +1310,7 @@ convert_branch_to_paths(apr_hash_t *path
 /* Produce a mapping from paths to element ids, covering all elements in
  * BRANCH and all its sub-branches, recursively.
  *
- * Update *PATHS_UNION, a hash of (rrpath -> svn_branch_el_rev_id_t),
+ * Update *PATHS_UNION, a hash of (storage_rrpath -> svn_branch_el_rev_id_t),
  * creating or filling in entries for all elements in all branches at and
  * under BRANCH, recursively.
  */
@@ -1257,14 +1380,25 @@ text_equal(svn_element_payload_t *initia
  * ### Currently this is indicated by payload-by-reference, which is
  *     an inadequate indication.
  */
-static svn_pathrev_t *
-get_copy_from(svn_element_payload_t *final_payload)
+static svn_error_t *
+get_copy_from(svn_pathrev_t *copyfrom_pathrev_p,
+              svn_element_payload_t *final_payload,
+              ev3_from_delta_baton_t *eb,
+              apr_pool_t *result_pool)
 {
-  if (final_payload->ref.relpath)
+  if (final_payload->branch_ref.branch_id)
     {
-      return &final_payload->ref;
+      SVN_ERR(payload_get_storage_pathrev(copyfrom_pathrev_p, final_payload,
+                                          eb->edited_rev_root->repos,
+                                          result_pool));
     }
-  return NULL;
+  else
+    {
+      copyfrom_pathrev_p->relpath = NULL;
+      copyfrom_pathrev_p->rev = SVN_INVALID_REVNUM;
+    }
+
+  return SVN_NO_ERROR;
 }
 
 /* Return a hash whose keys are the names of the immediate children of
@@ -1326,7 +1460,7 @@ drive_changes_r(const char *rrpath,
   /* The el-rev-id of the element that will finally exist at RRPATH. */
   svn_branch_el_rev_id_t *final_el_rev = svn_hash_gets(paths_final, rrpath);
   svn_element_payload_t *final_payload;
-  svn_pathrev_t *final_copy_from;
+  svn_pathrev_t final_copy_from;
   svn_boolean_t succession;
 
   SVN_DBG(("rrpath '%s' current=%s, final=e%d)",
@@ -1348,23 +1482,23 @@ drive_changes_r(const char *rrpath,
 
       /* Decide whether the state at this path should be a copy (incl. a
          copy-child) */
-      final_copy_from = get_copy_from(final_payload);
+      SVN_ERR(get_copy_from(&final_copy_from, final_payload, eb, scratch_pool));
       /* It doesn't make sense to have a non-copy inside a copy */
       /*SVN_ERR_ASSERT(!(parent_is_copy && !final_copy_from));*/
    }
   else
     {
       final_payload = NULL;
-      final_copy_from = NULL;
+      final_copy_from.relpath = NULL;
     }
 
   /* Succession means:
        for a copy (inc. child)  -- copy-from same place as natural predecessor
        otherwise                -- it's succession if it's the same element
                                    (which also implies the same kind) */
-  if (pred_loc && final_copy_from)
+  if (pred_loc && final_copy_from.relpath)
     {
-      succession = svn_pathrev_equal(pred_loc, final_copy_from);
+      succession = svn_pathrev_equal(pred_loc, &final_copy_from);
     }
   else if (pred_loc && final_el_rev)
     {
@@ -1414,13 +1548,7 @@ drive_changes_r(const char *rrpath,
       /* Get the full payload of the final node. If we have
          only a reference to the payload, fetch it in full. */
       SVN_ERR_ASSERT(final_payload);
-      if (PAYLOAD_IS_ONLY_BY_REFERENCE(final_payload))
-        {
-          /* Get payload by reference. */
-          SVN_ERR(payload_fetch(&final_payload, NULL,
-                                eb, &final_payload->ref,
-                                scratch_pool, scratch_pool));
-        }
+      SVN_ERR(payload_resolve(final_payload, eb, scratch_pool));
 
       /* If the final node was also the initial node, it's being
          modified, otherwise it's being added (perhaps a replacement). */
@@ -1452,14 +1580,14 @@ drive_changes_r(const char *rrpath,
                                 RESTRUCTURE_ADD));
 
           /* If the node is to be copied (and possibly modified) ... */
-          if (final_copy_from)
+          if (final_copy_from.relpath)
             {
-              change->copyfrom_rev = final_copy_from->rev;
-              change->copyfrom_path = final_copy_from->relpath;
+              change->copyfrom_rev = final_copy_from.rev;
+              change->copyfrom_path = final_copy_from.relpath;
 
               /* Get full payload of the copy source node */
               SVN_ERR(payload_fetch(&current_payload, &current_children,
-                                    eb, final_copy_from,
+                                    eb, &final_copy_from,
                                     scratch_pool, scratch_pool));
             }
         }
@@ -1513,11 +1641,11 @@ drive_changes_r(const char *rrpath,
                     copied along with it: predecessor is parent's copy-from
                     location extended by the child's name. */
                   child_pred = apr_palloc(scratch_pool, sizeof(*child_pred));
-                  if (final_copy_from)
+                  if (final_copy_from.relpath)
                     {
-                      child_pred->rev = final_copy_from->rev;
+                      child_pred->rev = final_copy_from.rev;
                       child_pred->relpath
-                        = svn_relpath_join(final_copy_from->relpath, name,
+                        = svn_relpath_join(final_copy_from.relpath, name,
                                            scratch_pool);
                     }
                   else
@@ -1531,10 +1659,10 @@ drive_changes_r(const char *rrpath,
                        child_pred ? peg_path_str(*child_pred, scratch_pool)
                                   : "<nil>",
                        (svn_hash_gets(final_children, name) != NULL),
-                       final_copy_from
+                       final_copy_from.relpath
                          ? apr_psprintf(scratch_pool, " parent-cp-from=%s@%ld",
-                                        final_copy_from->relpath,
-                                        final_copy_from->rev) : ""));
+                                        final_copy_from.relpath,
+                                        final_copy_from.rev) : ""));
 
               SVN_ERR(drive_changes_r(this_rrpath,
                                       child_pred,

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=1693451&r1=1693450&r2=1693451&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 16:04:53
2015
@@ -74,9 +74,9 @@ svn_element_payload_invariants(const svn
   /* If kind is unknown, it's a reference; otherwise it has content
      specified and may also have a reference. */
   if (payload->kind == svn_node_unknown)
-    if ((payload->ref.relpath
-         && svn_relpath_is_canonical(payload->ref.relpath)
-         && SVN_IS_VALID_REVNUM(payload->ref.rev)))
+    if (SVN_IS_VALID_REVNUM(payload->branch_ref.rev)
+        && payload->branch_ref.branch_id
+        && payload->branch_ref.eid >= 0)
       return TRUE;
   if ((payload->kind == svn_node_dir
        || payload->kind == svn_node_file
@@ -100,8 +100,9 @@ svn_element_payload_dup(const svn_elemen
     return NULL;
 
   new_payload = apr_pmemdup(result_pool, old, sizeof(*new_payload));
-  if (old->ref.relpath)
-    new_payload->ref = svn_pathrev_dup(old->ref, result_pool);
+  if (old->branch_ref.branch_id)
+    new_payload->branch_ref.branch_id
+      = apr_pstrdup(result_pool, old->branch_ref.branch_id);
   if (old->props)
     new_payload->props = svn_prop_hash_dup(old->props, result_pool);
   if (old->kind == svn_node_file && old->text)
@@ -171,7 +172,9 @@ svn_element_payload_equal(const svn_elem
 }
 
 svn_element_payload_t *
-svn_element_payload_create_ref(svn_pathrev_t ref,
+svn_element_payload_create_ref(svn_revnum_t rev,
+                               const char *branch_id,
+                               int eid,
                                apr_pool_t *result_pool)
 {
   svn_element_payload_t *new_payload
@@ -179,7 +182,9 @@ svn_element_payload_create_ref(svn_pathr
 
   new_payload->pool = result_pool;
   new_payload->kind = svn_node_unknown;
-  new_payload->ref = svn_pathrev_dup(ref, result_pool);
+  new_payload->branch_ref.rev = rev;
+  new_payload->branch_ref.branch_id = apr_pstrdup(result_pool, branch_id);
+  new_payload->branch_ref.eid = eid;
   assert(svn_element_payload_invariants(new_payload));
   return new_payload;
 }



Mime
View raw message