Author: stefan2
Date: Thu Feb 19 23:59:36 2015
New Revision: 1661035

URL: http://svn.apache.org/r1661035
Log:
On the fsx-1.10 branch:
Switch a second batch of DAG functions from returning an error code
to returning the requested information.

* subversion/libsvn_fs_x/dag.h
  (svn_fs_x__dag_get_predecessor_id,
   svn_fs_x__dag_get_predecessor_count,
   svn_fs_x__dag_get_mergeinfo_count,
   svn_fs_x__dag_has_descendants_with_mergeinfo,
   svn_fs_x__dag_has_mergeinfo): Replace the error return with the
                                 former output value.

* subversion/libsvn_fs_x/dag.c
  (svn_fs_x__dag_get_predecessor_id,
   svn_fs_x__dag_get_predecessor_count,
   svn_fs_x__dag_get_mergeinfo_count,
   svn_fs_x__dag_has_descendants_with_mergeinfo,
   svn_fs_x__dag_has_mergeinfo): Update implementation.

* subversion/libsvn_fs_x/tree.c
  (x_change_node_prop,
   merge,
   x_delete_node,
   copy_helper,
   x_closest_copy,
   history_prev,
   crawl_directory_dag_for_mergeinfo,
   get_mergeinfo_for_path_internal,
   add_descendant_mergeinfo,
   verify_node,
   svn_fs_x__verify_root): Update / simplify callers.

Modified:
    subversion/branches/fsx-1.10/subversion/libsvn_fs_x/dag.c
    subversion/branches/fsx-1.10/subversion/libsvn_fs_x/dag.h
    subversion/branches/fsx-1.10/subversion/libsvn_fs_x/tree.c

Modified: subversion/branches/fsx-1.10/subversion/libsvn_fs_x/dag.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/libsvn_fs_x/dag.c?rev=1661035&r1=1661034&r2=1661035&view=diff
==============================================================================
--- subversion/branches/fsx-1.10/subversion/libsvn_fs_x/dag.c (original)
+++ subversion/branches/fsx-1.10/subversion/libsvn_fs_x/dag.c Thu Feb 19 
23:59:36 2015
@@ -196,60 +196,44 @@ svn_fs_x__dag_get_revision(const dag_nod
           : svn_fs_x__get_revnum(noderev->noderev_id.change_set));
 }
 
-
-svn_error_t *
-svn_fs_x__dag_get_predecessor_id(svn_fs_x__id_t *id_p,
-                                 dag_node_t *node)
+const svn_fs_x__id_t *
+svn_fs_x__dag_get_predecessor_id(dag_node_t *node)
 {
-  *id_p = node->node_revision->predecessor_id;
-
-  return SVN_NO_ERROR;
+  return &node->node_revision->predecessor_id;
 }
 
-
-svn_error_t *
-svn_fs_x__dag_get_predecessor_count(int *count,
-                                    dag_node_t *node)
+int
+svn_fs_x__dag_get_predecessor_count(dag_node_t *node)
 {
-  *count = node->node_revision->predecessor_count;
-  return SVN_NO_ERROR;
+  return node->node_revision->predecessor_count;
 }
 
-svn_error_t *
-svn_fs_x__dag_get_mergeinfo_count(apr_int64_t *count,
-                                  dag_node_t *node)
+apr_int64_t
+svn_fs_x__dag_get_mergeinfo_count(dag_node_t *node)
 {
-  *count = node->node_revision->mergeinfo_count;
-  return SVN_NO_ERROR;
+  return node->node_revision->mergeinfo_count;
 }
 
-svn_error_t *
-svn_fs_x__dag_has_mergeinfo(svn_boolean_t *has_mergeinfo,
-                            dag_node_t *node)
+svn_boolean_t
+svn_fs_x__dag_has_mergeinfo(dag_node_t *node)
 {
-  *has_mergeinfo = node->node_revision->has_mergeinfo;
-  return SVN_NO_ERROR;
+  return node->node_revision->has_mergeinfo;
 }
 
-svn_error_t *
-svn_fs_x__dag_has_descendants_with_mergeinfo(svn_boolean_t *do_they,
-                                             dag_node_t *node)
+svn_boolean_t
+svn_fs_x__dag_has_descendants_with_mergeinfo(dag_node_t *node)
 {
   svn_fs_x__noderev_t *noderev = node->node_revision;
 
   if (noderev->kind != svn_node_dir)
-    {
-      *do_they = FALSE;
-      return SVN_NO_ERROR;
-    }
+      return FALSE;
 
   if (noderev->mergeinfo_count > 1)
-    *do_they = TRUE;
+    return TRUE;
   else if (noderev->mergeinfo_count == 1 && !noderev->has_mergeinfo)
-    *do_they = TRUE;
-  else
-    *do_they = FALSE;
-  return SVN_NO_ERROR;
+    return TRUE;
+
+  return FALSE;
 }
 
 

Modified: subversion/branches/fsx-1.10/subversion/libsvn_fs_x/dag.h
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/libsvn_fs_x/dag.h?rev=1661035&r1=1661034&r2=1661035&view=diff
==============================================================================
--- subversion/branches/fsx-1.10/subversion/libsvn_fs_x/dag.h (original)
+++ subversion/branches/fsx-1.10/subversion/libsvn_fs_x/dag.h Thu Feb 19 
23:59:36 2015
@@ -137,41 +137,31 @@ const char *
 svn_fs_x__dag_get_created_path(dag_node_t *node);
 
 
-/* Set *ID_P to the node revision ID of NODE's immediate predecessor.
+/* Return the node revision ID of NODE's immediate predecessor.
  */
-svn_error_t *
-svn_fs_x__dag_get_predecessor_id(svn_fs_x__id_t *id_p,
-                                 dag_node_t *node);
+const svn_fs_x__id_t *
+svn_fs_x__dag_get_predecessor_id(dag_node_t *node);
 
-
-/* Set *COUNT to the number of predecessors NODE has (recursively).
+/* Return the number of predecessors NODE has (recursively).
  */
-/* ### This function is currently only used by 'verify'. */
-svn_error_t *
-svn_fs_x__dag_get_predecessor_count(int *count,
-                                    dag_node_t *node);
+int
+svn_fs_x__dag_get_predecessor_count(dag_node_t *node);
 
-/* Set *COUNT to the number of node under NODE (inclusive) with
-   svn:mergeinfo properties.
- */
-svn_error_t *
-svn_fs_x__dag_get_mergeinfo_count(apr_int64_t *count,
-                                  dag_node_t *node);
-
-/* Set *DO_THEY to a flag indicating whether or not NODE is a
-   directory with at least one descendant (not including itself) with
-   svn:mergeinfo.
+/* Return the number of node under NODE (inclusive) with svn:mergeinfo
+   properties.
  */
-svn_error_t *
-svn_fs_x__dag_has_descendants_with_mergeinfo(svn_boolean_t *do_they,
-                                             dag_node_t *node);
+apr_int64_t
+svn_fs_x__dag_get_mergeinfo_count(dag_node_t *node);
 
-/* Set *HAS_MERGEINFO to a flag indicating whether or not NODE itself
-   has svn:mergeinfo set on it.
+/* Return TRUE, iff NODE is a directory with at least one descendant (not
+   including itself) with svn:mergeinfo.
  */
-svn_error_t *
-svn_fs_x__dag_has_mergeinfo(svn_boolean_t *has_mergeinfo,
-                            dag_node_t *node);
+svn_boolean_t
+svn_fs_x__dag_has_descendants_with_mergeinfo(dag_node_t *node);
+
+/* Return TRUE, iff NODE itself has svn:mergeinfo set on it.  */
+svn_boolean_t
+svn_fs_x__dag_has_mergeinfo(dag_node_t *node);
 
 /* Return non-zero IFF NODE is currently mutable. */
 svn_boolean_t

Modified: subversion/branches/fsx-1.10/subversion/libsvn_fs_x/tree.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/libsvn_fs_x/tree.c?rev=1661035&r1=1661034&r2=1661035&view=diff
==============================================================================
--- subversion/branches/fsx-1.10/subversion/libsvn_fs_x/tree.c (original)
+++ subversion/branches/fsx-1.10/subversion/libsvn_fs_x/tree.c Thu Feb 19 
23:59:36 2015
@@ -555,8 +555,8 @@ x_change_node_prop(svn_fs_root_t *root,
   if (strcmp(name, SVN_PROP_MERGEINFO) == 0)
     {
       apr_int64_t increment = 0;
-      svn_boolean_t had_mergeinfo;
-      SVN_ERR(svn_fs_x__dag_has_mergeinfo(&had_mergeinfo, dag_path->node));
+      svn_boolean_t had_mergeinfo
+        = svn_fs_x__dag_has_mergeinfo(dag_path->node);
 
       if (value && !had_mergeinfo)
         increment = 1;
@@ -935,15 +935,11 @@ merge(svn_stringbuf_t *conflict_p,
          process, but the transaction did not touch this entry. */
       else if (t_entry && svn_fs_x__id_eq(&a_entry->id, &t_entry->id))
         {
-          apr_int64_t mergeinfo_start;
-          apr_int64_t mergeinfo_end;
-
           dag_node_t *t_ent_node;
           SVN_ERR(svn_fs_x__dag_get_node(&t_ent_node, fs, &t_entry->id,
                                          iterpool, iterpool));
-          SVN_ERR(svn_fs_x__dag_get_mergeinfo_count(&mergeinfo_start,
-                                                    t_ent_node));
-          mergeinfo_increment -= mergeinfo_start;
+          mergeinfo_increment
+            -= svn_fs_x__dag_get_mergeinfo_count(t_ent_node);
 
           if (s_entry)
             {
@@ -951,9 +947,8 @@ merge(svn_stringbuf_t *conflict_p,
               SVN_ERR(svn_fs_x__dag_get_node(&s_ent_node, fs, &s_entry->id,
                                              iterpool, iterpool));
 
-              SVN_ERR(svn_fs_x__dag_get_mergeinfo_count(&mergeinfo_end,
-                                                        s_ent_node));
-              mergeinfo_increment += mergeinfo_end;
+              mergeinfo_increment
+                += svn_fs_x__dag_get_mergeinfo_count(s_ent_node);
 
               SVN_ERR(svn_fs_x__dag_set_entry(target, a_entry->name,
                                               &s_entry->id,
@@ -1030,7 +1025,6 @@ merge(svn_stringbuf_t *conflict_p,
     {
       svn_fs_x__dirent_t *a_entry, *s_entry, *t_entry;
       dag_node_t *s_ent_node;
-      apr_int64_t mergeinfo_s;
 
       svn_pool_clear(iterpool);
 
@@ -1051,8 +1045,7 @@ merge(svn_stringbuf_t *conflict_p,
 
       SVN_ERR(svn_fs_x__dag_get_node(&s_ent_node, fs, &s_entry->id,
                                      iterpool, iterpool));
-      SVN_ERR(svn_fs_x__dag_get_mergeinfo_count(&mergeinfo_s, s_ent_node));
-      mergeinfo_increment += mergeinfo_s;
+      mergeinfo_increment += svn_fs_x__dag_get_mergeinfo_count(s_ent_node);
 
       SVN_ERR(svn_fs_x__dag_set_entry
               (target, s_entry->name, &s_entry->id, s_entry->kind,
@@ -1488,8 +1481,7 @@ x_delete_node(svn_fs_root_t *root,
   /* Make the parent directory mutable, and do the deletion.  */
   SVN_ERR(svn_fs_x__make_path_mutable(root, dag_path->parent, path, subpool,
                                       subpool));
-  SVN_ERR(svn_fs_x__dag_get_mergeinfo_count(&mergeinfo_count,
-                                            dag_path->node));
+  mergeinfo_count = svn_fs_x__dag_get_mergeinfo_count(dag_path->node);
   SVN_ERR(svn_fs_x__dag_delete(dag_path->parent->node,
                                dag_path->entry,
                                txn_id, subpool));
@@ -1602,8 +1594,8 @@ copy_helper(svn_fs_root_t *from_root,
       if (to_dag_path->node)
         {
           kind = svn_fs_path_change_replace;
-          SVN_ERR(svn_fs_x__dag_get_mergeinfo_count(&mergeinfo_start,
-                                                    to_dag_path->node));
+          mergeinfo_start
+            = svn_fs_x__dag_get_mergeinfo_count(to_dag_path->node);
         }
       else
         {
@@ -1611,7 +1603,7 @@ copy_helper(svn_fs_root_t *from_root,
           mergeinfo_start = 0;
         }
 
-      SVN_ERR(svn_fs_x__dag_get_mergeinfo_count(&mergeinfo_end, from_node));
+      mergeinfo_end = svn_fs_x__dag_get_mergeinfo_count(from_node);
 
       /* Make sure the target node's parents are mutable.  */
       SVN_ERR(svn_fs_x__make_path_mutable(to_root, to_dag_path->parent,
@@ -2502,15 +2494,11 @@ x_closest_copy(svn_fs_root_t **root_p,
   */
   created_rev = svn_fs_x__dag_get_revision(copy_dst_node);
   if (created_rev == copy_dst_rev)
-    {
-      svn_fs_x__id_t pred;
-      SVN_ERR(svn_fs_x__dag_get_predecessor_id(&pred, copy_dst_node));
-      if (!svn_fs_x__id_used(&pred))
-        {
-          svn_pool_destroy(scratch_pool);
-          return SVN_NO_ERROR;
-        }
-    }
+    if (!svn_fs_x__id_used(svn_fs_x__dag_get_predecessor_id(copy_dst_node)))
+      {
+        svn_pool_destroy(scratch_pool);
+        return SVN_NO_ERROR;
+      }
 
   /* The copy destination checks out.  Return it. */
   *root_p = copy_dst_root;
@@ -2612,7 +2600,7 @@ history_prev(svn_fs_history_t **prev_his
              no predecessor, in which case we're all done!). */
           svn_fs_x__id_t pred_id;
 
-          SVN_ERR(svn_fs_x__dag_get_predecessor_id(&pred_id, node));
+          pred_id = *svn_fs_x__dag_get_predecessor_id(node);
           if (!svn_fs_x__id_used(&pred_id))
             return SVN_NO_ERROR;
 
@@ -2835,17 +2823,13 @@ crawl_directory_dag_for_mergeinfo(svn_fs
       svn_fs_x__dirent_t *dirent = APR_ARRAY_IDX(entries, i, 
svn_fs_x__dirent_t *);
       const char *kid_path;
       dag_node_t *kid_dag;
-      svn_boolean_t has_mergeinfo, go_down;
 
       svn_pool_clear(iterpool);
 
       kid_path = svn_fspath__join(this_path, dirent->name, iterpool);
       SVN_ERR(svn_fs_x__get_dag_node(&kid_dag, root, kid_path, iterpool));
 
-      SVN_ERR(svn_fs_x__dag_has_mergeinfo(&has_mergeinfo, kid_dag));
-      SVN_ERR(svn_fs_x__dag_has_descendants_with_mergeinfo(&go_down, kid_dag));
-
-      if (has_mergeinfo)
+      if (svn_fs_x__dag_has_mergeinfo(kid_dag))
         {
           /* Save this particular node's mergeinfo. */
           apr_hash_t *proplist;
@@ -2886,7 +2870,7 @@ crawl_directory_dag_for_mergeinfo(svn_fs
             }
         }
 
-      if (go_down)
+      if (svn_fs_x__dag_has_descendants_with_mergeinfo(kid_dag))
         SVN_ERR(crawl_directory_dag_for_mergeinfo(root,
                                                   kid_path,
                                                   kid_dag,
@@ -2951,11 +2935,7 @@ get_mergeinfo_for_path_internal(svn_merg
 
   while (TRUE)
     {
-      svn_boolean_t has_mergeinfo;
-
-      SVN_ERR(svn_fs_x__dag_has_mergeinfo(&has_mergeinfo,
-                                          nearest_ancestor->node));
-      if (has_mergeinfo)
+      if (svn_fs_x__dag_has_mergeinfo(nearest_ancestor->node))
         break;
 
       /* No need to loop if we're looking for explicit mergeinfo. */
@@ -3087,12 +3067,9 @@ add_descendant_mergeinfo(svn_mergeinfo_c
                          apr_pool_t *scratch_pool)
 {
   dag_node_t *this_dag;
-  svn_boolean_t go_down;
 
   SVN_ERR(svn_fs_x__get_dag_node(&this_dag, root, path, scratch_pool));
-  SVN_ERR(svn_fs_x__dag_has_descendants_with_mergeinfo(&go_down,
-                                                       this_dag));
-  if (go_down)
+  if (svn_fs_x__dag_has_descendants_with_mergeinfo(this_dag))
     SVN_ERR(crawl_directory_dag_for_mergeinfo(root,
                                               path,
                                               this_dag,
@@ -3315,10 +3292,10 @@ verify_node(dag_node_t *node,
     }
 
   /* Fetch some data. */
-  SVN_ERR(svn_fs_x__dag_has_mergeinfo(&has_mergeinfo, node));
-  SVN_ERR(svn_fs_x__dag_get_mergeinfo_count(&mergeinfo_count, node));
-  SVN_ERR(svn_fs_x__dag_get_predecessor_id(&pred_id, node));
-  SVN_ERR(svn_fs_x__dag_get_predecessor_count(&pred_count, node));
+  has_mergeinfo = svn_fs_x__dag_has_mergeinfo(node);
+  mergeinfo_count = svn_fs_x__dag_get_mergeinfo_count(node);
+  pred_id = *svn_fs_x__dag_get_predecessor_id(node);
+  pred_count = svn_fs_x__dag_get_predecessor_count(node);
   kind = svn_fs_x__dag_node_kind(node);
 
   /* Sanity check. */
@@ -3335,7 +3312,7 @@ verify_node(dag_node_t *node,
       int pred_pred_count;
       SVN_ERR(svn_fs_x__dag_get_node(&pred, fs, &pred_id, iterpool,
                                      iterpool));
-      SVN_ERR(svn_fs_x__dag_get_predecessor_count(&pred_pred_count, pred));
+      pred_pred_count = svn_fs_x__dag_get_predecessor_count(pred);
       if (pred_pred_count+1 != pred_count)
         return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
                                  "Predecessor count mismatch: "
@@ -3387,8 +3364,7 @@ verify_node(dag_node_t *node,
               SVN_ERR(svn_fs_x__dag_get_node(&child, fs, &dirent->id,
                                              iterpool, iterpool));
               SVN_ERR(verify_node(child, rev, parent_nodes, iterpool));
-              SVN_ERR(svn_fs_x__dag_get_mergeinfo_count(&child_mergeinfo,
-                                                        child));
+              child_mergeinfo = svn_fs_x__dag_get_mergeinfo_count(child);
             }
           else
             {
@@ -3447,7 +3423,7 @@ svn_fs_x__verify_root(svn_fs_root_t *roo
     svn_boolean_t has_predecessor;
 
     /* Only r0 should have no predecessor. */
-    SVN_ERR(svn_fs_x__dag_get_predecessor_id(&pred_id, root_dir));
+    pred_id = *svn_fs_x__dag_get_predecessor_id(root_dir);
     has_predecessor = svn_fs_x__id_used(&pred_id);
     if (!root->is_txn_root && has_predecessor != !!root->rev)
       return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,


Reply via email to