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,