Author: cmpilato
Date: Wed Nov 17 15:26:33 2010
New Revision: 1036078
URL: http://svn.apache.org/viewvc?rev=1036078&view=rev
Log:
Fix a library dependency issue which was causing build failures. (As a
general rule, code inside the FS providers shouldn't call back into
the public FS API.) Sadly, the constraints of our system (namely the
BDB side of things) necessitate code duplication rather than sharing.
* subversion/include/svn_fs.h
(svn_fs_validate_mergeinfo): Switch order of the 'fs' and
'mergeinfo' parameters.
* subversion/libsvn_fs/fs-loader.h
(fs_vtable_t): Add 'validate_mergeinfo' vtable function.
* subversion/libsvn_fs/fs-loader.c
(svn_fs_validate_mergeinfo): Reimplement as a vtable wrapper.
* subversion/libsvn_fs_fs/fs.c
(fs_vtable): Add 'svn_fs_fs__validate_mergeinfo'.
* subversion/libsvn_fs_fs/tree.h
(svn_fs_fs__validate_mergeinfo): New.
* subversion/libsvn_fs_fs/tree.c
(get_mergeinfo_for_path): Call svn_fs_fs__validate_mergeinfo() instead of
svn_fs_validate_mergeinfo().
(svn_fs_fs__validate_mergeinfo): New, copied and tweaked from what was
fs-loader.c:svn_fs_validate_mergeinfo().
* subversion/libsvn_fs_base/fs.c
(fs_vtable): Add 'svn_fs_base__validate_mergeinfo'.
* subversion/libsvn_fs_base/tree.h
(svn_fs_base__validate_mergeinfo): New.
* subversion/libsvn_fs_base/tree.c
(get_mergeinfos_for_paths): Call base_validate_mergeinfo() instead
of svn_fs_validate_mergeinfo().
(base_validate_mergeinfo): New, copied and tweaked from what was
fs-loader.c:svn_fs_validate_mergeinfo().
Modified:
subversion/trunk/subversion/include/svn_fs.h
subversion/trunk/subversion/libsvn_fs/fs-loader.c
subversion/trunk/subversion/libsvn_fs/fs-loader.h
subversion/trunk/subversion/libsvn_fs_base/fs.c
subversion/trunk/subversion/libsvn_fs_base/tree.c
subversion/trunk/subversion/libsvn_fs_base/tree.h
subversion/trunk/subversion/libsvn_fs_fs/fs.c
subversion/trunk/subversion/libsvn_fs_fs/tree.c
subversion/trunk/subversion/libsvn_fs_fs/tree.h
Modified: subversion/trunk/subversion/include/svn_fs.h
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_fs.h?rev=1036078&r1=1036077&r2=1036078&view=diff
==============================================================================
--- subversion/trunk/subversion/include/svn_fs.h (original)
+++ subversion/trunk/subversion/include/svn_fs.h Wed Nov 17 15:26:33 2010
@@ -1530,8 +1530,8 @@ svn_fs_get_mergeinfo(svn_mergeinfo_catal
*/
svn_error_t *
svn_fs_validate_mergeinfo(svn_mergeinfo_t *validated_mergeinfo,
- svn_mergeinfo_t mergeinfo,
svn_fs_t *fs,
+ svn_mergeinfo_t mergeinfo,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
Modified: subversion/trunk/subversion/libsvn_fs/fs-loader.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs/fs-loader.c?rev=1036078&r1=1036077&r2=1036078&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs/fs-loader.c (original)
+++ subversion/trunk/subversion/libsvn_fs/fs-loader.c Wed Nov 17 15:26:33 2010
@@ -1023,124 +1023,15 @@ svn_fs_get_mergeinfo(svn_mergeinfo_catal
svn_error_t *
svn_fs_validate_mergeinfo(svn_mergeinfo_t *validated_mergeinfo,
- svn_mergeinfo_t mergeinfo,
svn_fs_t *fs,
+ svn_mergeinfo_t mergeinfo,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- svn_mergeinfo_t filtered_mergeinfo;
- apr_hash_t *rev_to_sources;
- apr_hash_index_t *hi;
- apr_pool_t *iterpool;
-
- /* A couple easy outs. */
- if (mergeinfo == NULL)
- {
- *validated_mergeinfo = NULL;
- return SVN_NO_ERROR;
- }
- else if (apr_hash_count(mergeinfo) == 0)
- {
- *validated_mergeinfo = apr_hash_make(result_pool);
- return SVN_NO_ERROR;
- }
-
- filtered_mergeinfo = apr_hash_make(scratch_pool);
- rev_to_sources = apr_hash_make(scratch_pool);
-
- /* Since svn_fs_check_path needs an svn_fs_root_t based on a revision,
- we convert MERGEINFO into a mapping of revisions to a hash of source
- paths for efficiency. */
- for (hi = apr_hash_first(scratch_pool, mergeinfo);
- hi;
- hi = apr_hash_next(hi))
- {
- const char *path = svn__apr_hash_index_key(hi);
- apr_array_header_t *rangelist = svn__apr_hash_index_val(hi);
- int i;
-
- for (i = 0; i < rangelist->nelts; i++)
- {
- svn_merge_range_t *range =
- APR_ARRAY_IDX(rangelist, i, svn_merge_range_t *);
- svn_revnum_t j;
-
- for (j = range->start + 1; j <= range->end; j++)
- {
- apr_hash_t *paths_for_rev = apr_hash_get(rev_to_sources,
- &j,
- sizeof(svn_revnum_t));
-
- /* No hash associated with this rev yet? */
- if (!paths_for_rev)
- {
- svn_revnum_t *rev = apr_palloc(scratch_pool, sizeof(*rev));
-
- *rev = j;
- paths_for_rev = apr_hash_make(scratch_pool);
- apr_hash_set(rev_to_sources, rev,
- sizeof(svn_revnum_t), paths_for_rev);
- }
-
- apr_hash_set(paths_for_rev, path, APR_HASH_KEY_STRING, path);
- }
- }
- }
-
- iterpool = svn_pool_create(scratch_pool);
-
- /* Validate the rev->source MERGEINFO equivalent hash, building the
- validated mergeinfo as we go. */
- for (hi = apr_hash_first(scratch_pool, rev_to_sources);
- hi;
- hi = apr_hash_next(hi))
- {
- apr_pool_t *inner_iterpool;
- apr_hash_index_t *hi2;
- svn_node_kind_t kind;
- const svn_revnum_t *rev = svn__apr_hash_index_key(hi);
- apr_hash_t *paths = svn__apr_hash_index_val(hi);
- svn_fs_root_t *mergeinfo_rev_root;
-
- svn_pool_clear(iterpool);
- inner_iterpool = svn_pool_create(iterpool);
-
- SVN_ERR(svn_fs_revision_root(&mergeinfo_rev_root, fs,
- *rev, iterpool));
-
- for (hi2 = apr_hash_first(iterpool, paths);
- hi2;
- hi2 = apr_hash_next(hi2))
- {
- const char *path = svn__apr_hash_index_key(hi2);
-
- svn_pool_clear(inner_iterpool);
- SVN_ERR(svn_fs_check_path(&kind, mergeinfo_rev_root,
- path, inner_iterpool));
- if (kind == svn_node_none)
- {
- apr_hash_set(paths, path, APR_HASH_KEY_STRING, NULL);
- }
- else
- {
- const char *mergeinfo_str = apr_psprintf(inner_iterpool,
- "%s:%ld",
- path, *rev);
- svn_mergeinfo_t good_mergeinfo_fragment;
-
- SVN_ERR(svn_mergeinfo_parse(&good_mergeinfo_fragment,
- mergeinfo_str, scratch_pool));
- SVN_ERR(svn_mergeinfo_merge(filtered_mergeinfo,
- good_mergeinfo_fragment,
- scratch_pool));
- }
- }
- svn_pool_destroy(inner_iterpool);
- }
-
- svn_pool_destroy(iterpool);
- *validated_mergeinfo = svn_mergeinfo_dup(filtered_mergeinfo, result_pool);
- return SVN_NO_ERROR;
+ return svn_error_return(fs->vtable->validate_mergeinfo(validated_mergeinfo,
+ mergeinfo,
+ result_pool,
+ scratch_pool));
}
svn_error_t *
Modified: subversion/trunk/subversion/libsvn_fs/fs-loader.h
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs/fs-loader.h?rev=1036078&r1=1036077&r2=1036078&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs/fs-loader.h (original)
+++ subversion/trunk/subversion/libsvn_fs/fs-loader.h Wed Nov 17 15:26:33 2010
@@ -197,6 +197,10 @@ typedef struct fs_vtable_t
svn_error_t *(*bdb_set_errcall)(svn_fs_t *fs,
void (*handler)(const char *errpfx,
char *msg));
+ svn_error_t *(*validate_mergeinfo)(svn_mergeinfo_t *validated_mergeinfo,
+ svn_mergeinfo_t mergeinfo,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
} fs_vtable_t;
Modified: subversion/trunk/subversion/libsvn_fs_base/fs.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_base/fs.c?rev=1036078&r1=1036077&r2=1036078&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_base/fs.c (original)
+++ subversion/trunk/subversion/libsvn_fs_base/fs.c Wed Nov 17 15:26:33 2010
@@ -497,6 +497,7 @@ static fs_vtable_t fs_vtable = {
svn_fs_base__get_lock,
svn_fs_base__get_locks,
base_bdb_set_errcall,
+ svn_fs_base__validate_mergeinfo,
};
/* Where the format number is stored. */
Modified: subversion/trunk/subversion/libsvn_fs_base/tree.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_base/tree.c?rev=1036078&r1=1036077&r2=1036078&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_base/tree.c (original)
+++ subversion/trunk/subversion/libsvn_fs_base/tree.c Wed Nov 17 15:26:33 2010
@@ -5090,6 +5090,129 @@ base_node_origin_rev(svn_revnum_t *revis
/* Mergeinfo Queries */
+
+/* Implements svn_fs_validate_mergeinfo. */
+svn_error_t *
+svn_fs_base__validate_mergeinfo(svn_mergeinfo_t *validated_mergeinfo,
+ svn_fs_t *fs,
+ svn_mergeinfo_t mergeinfo,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_mergeinfo_t filtered_mergeinfo;
+ apr_hash_t *rev_to_sources;
+ apr_hash_index_t *hi;
+ apr_pool_t *iterpool;
+
+ /* A couple easy outs. */
+ if (mergeinfo == NULL)
+ {
+ *validated_mergeinfo = NULL;
+ return SVN_NO_ERROR;
+ }
+ else if (apr_hash_count(mergeinfo) == 0)
+ {
+ *validated_mergeinfo = apr_hash_make(result_pool);
+ return SVN_NO_ERROR;
+ }
+
+ filtered_mergeinfo = apr_hash_make(scratch_pool);
+ rev_to_sources = apr_hash_make(scratch_pool);
+
+ /* Since svn_fs_check_path needs an svn_fs_root_t based on a revision,
+ we convert MERGEINFO into a mapping of revisions to a hash of source
+ paths for efficiency. */
+ for (hi = apr_hash_first(scratch_pool, mergeinfo);
+ hi;
+ hi = apr_hash_next(hi))
+ {
+ const char *path = svn__apr_hash_index_key(hi);
+ apr_array_header_t *rangelist = svn__apr_hash_index_val(hi);
+ int i;
+
+ for (i = 0; i < rangelist->nelts; i++)
+ {
+ svn_merge_range_t *range =
+ APR_ARRAY_IDX(rangelist, i, svn_merge_range_t *);
+ svn_revnum_t j;
+
+ for (j = range->start + 1; j <= range->end; j++)
+ {
+ apr_hash_t *paths_for_rev =
+ apr_hash_get(rev_to_sources, &j, sizeof(svn_revnum_t));
+
+ /* No hash associated with this rev yet? */
+ if (!paths_for_rev)
+ {
+ svn_revnum_t *rev = apr_palloc(scratch_pool, sizeof(*rev));
+
+ *rev = j;
+ paths_for_rev = apr_hash_make(scratch_pool);
+ apr_hash_set(rev_to_sources, rev,
+ sizeof(svn_revnum_t), paths_for_rev);
+ }
+
+ apr_hash_set(paths_for_rev, path, APR_HASH_KEY_STRING, path);
+ }
+ }
+ }
+
+ iterpool = svn_pool_create(scratch_pool);
+
+ /* Validate the rev->source MERGEINFO equivalent hash, building the
+ validated mergeinfo as we go. */
+ for (hi = apr_hash_first(scratch_pool, rev_to_sources);
+ hi;
+ hi = apr_hash_next(hi))
+ {
+ const svn_revnum_t *rev = svn__apr_hash_index_key(hi);
+ apr_hash_t *paths = svn__apr_hash_index_val(hi);
+ apr_pool_t *inner_iterpool;
+ apr_hash_index_t *hi2;
+ svn_node_kind_t kind;
+ svn_fs_root_t *mergeinfo_rev_root;
+
+ svn_pool_clear(iterpool);
+ inner_iterpool = svn_pool_create(iterpool);
+
+ SVN_ERR(svn_fs_base__revision_root(&mergeinfo_rev_root, fs,
+ *rev, iterpool));
+
+ for (hi2 = apr_hash_first(iterpool, paths);
+ hi2;
+ hi2 = apr_hash_next(hi2))
+ {
+ const char *path = svn__apr_hash_index_key(hi2);
+
+ svn_pool_clear(inner_iterpool);
+ SVN_ERR(base_check_path(&kind, mergeinfo_rev_root,
+ path, inner_iterpool));
+ if (kind == svn_node_none)
+ {
+ apr_hash_set(paths, path, APR_HASH_KEY_STRING, NULL);
+ }
+ else
+ {
+ svn_mergeinfo_t good_mergeinfo_fragment;
+ const char *mergeinfo_str =
+ apr_psprintf(inner_iterpool, "%s:%ld", path, *rev);
+
+ SVN_ERR(svn_mergeinfo_parse(&good_mergeinfo_fragment,
+ mergeinfo_str, scratch_pool));
+ SVN_ERR(svn_mergeinfo_merge(filtered_mergeinfo,
+ good_mergeinfo_fragment,
+ scratch_pool));
+ }
+ }
+ svn_pool_destroy(inner_iterpool);
+ }
+
+ svn_pool_destroy(iterpool);
+ *validated_mergeinfo = svn_mergeinfo_dup(filtered_mergeinfo, result_pool);
+ return SVN_NO_ERROR;
+}
+
+
/* Examine directory NODE's immediately children for mergeinfo.
For those which have explicit mergeinfo, add their mergeinfo to
@@ -5459,9 +5582,9 @@ get_mergeinfos_for_paths(svn_fs_root_t *
if (path_mergeinfo)
{
if (inherited && validate_inherited_mergeinfo)
- SVN_ERR(svn_fs_validate_mergeinfo(&path_mergeinfo,
- path_mergeinfo, root->fs,
- pool, iterpool));
+ SVN_ERR(svn_fs_base__validate_mergeinfo(&path_mergeinfo, root->fs,
+ path_mergeinfo, pool,
+ iterpool));
apr_hash_set(result_catalog, apr_pstrdup(pool, path),
APR_HASH_KEY_STRING,
@@ -5527,6 +5650,7 @@ base_get_mergeinfo(svn_mergeinfo_catalog
include_descendants, pool);
}
+
/* Creating root objects. */
Modified: subversion/trunk/subversion/libsvn_fs_base/tree.h
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_base/tree.h?rev=1036078&r1=1036077&r2=1036078&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_base/tree.h (original)
+++ subversion/trunk/subversion/libsvn_fs_base/tree.h Wed Nov 17 15:26:33 2010
@@ -95,6 +95,14 @@ svn_error_t *svn_fs_base__get_path_creat
trail_t *trail,
apr_pool_t *pool);
+/* Implements svn_fs_validate_mergeinfo. */
+svn_error_t *
+svn_fs_base__validate_mergeinfo(svn_mergeinfo_t *validated_mergeinfo,
+ svn_fs_t *fs,
+ svn_mergeinfo_t mergeinfo,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
/* ### Experimental obliterate-like-deltify - see implementation. */
svn_error_t *
svn_fs_base__obliterate_rep(svn_fs_t *fs,
Modified: subversion/trunk/subversion/libsvn_fs_fs/fs.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/fs.c?rev=1036078&r1=1036077&r2=1036078&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/fs.c (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/fs.c Wed Nov 17 15:26:33 2010
@@ -159,7 +159,8 @@ static fs_vtable_t fs_vtable = {
svn_fs_fs__unlock,
svn_fs_fs__get_lock,
svn_fs_fs__get_locks,
- fs_set_errcall
+ fs_set_errcall,
+ svn_fs_fs__validate_mergeinfo,
};
Modified: subversion/trunk/subversion/libsvn_fs_fs/tree.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/tree.c?rev=1036078&r1=1036077&r2=1036078&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/tree.c (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/tree.c Wed Nov 17 15:26:33 2010
@@ -3374,6 +3374,128 @@ assemble_history(svn_fs_t *fs,
/* mergeinfo queries */
+
+/* Implements svn_fs_validate_mergeinfo. */
+svn_error_t *
+svn_fs_fs__validate_mergeinfo(svn_mergeinfo_t *validated_mergeinfo,
+ svn_fs_t *fs,
+ svn_mergeinfo_t mergeinfo,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_mergeinfo_t filtered_mergeinfo;
+ apr_hash_t *rev_to_sources;
+ apr_hash_index_t *hi;
+ apr_pool_t *iterpool;
+
+ /* A couple easy outs. */
+ if (mergeinfo == NULL)
+ {
+ *validated_mergeinfo = NULL;
+ return SVN_NO_ERROR;
+ }
+ else if (apr_hash_count(mergeinfo) == 0)
+ {
+ *validated_mergeinfo = apr_hash_make(result_pool);
+ return SVN_NO_ERROR;
+ }
+
+ filtered_mergeinfo = apr_hash_make(scratch_pool);
+ rev_to_sources = apr_hash_make(scratch_pool);
+
+ /* Since svn_fs_check_path needs an svn_fs_root_t based on a revision,
+ we convert MERGEINFO into a mapping of revisions to a hash of source
+ paths for efficiency. */
+ for (hi = apr_hash_first(scratch_pool, mergeinfo);
+ hi;
+ hi = apr_hash_next(hi))
+ {
+ const char *path = svn__apr_hash_index_key(hi);
+ apr_array_header_t *rangelist = svn__apr_hash_index_val(hi);
+ int i;
+
+ for (i = 0; i < rangelist->nelts; i++)
+ {
+ svn_merge_range_t *range =
+ APR_ARRAY_IDX(rangelist, i, svn_merge_range_t *);
+ svn_revnum_t j;
+
+ for (j = range->start + 1; j <= range->end; j++)
+ {
+ apr_hash_t *paths_for_rev =
+ apr_hash_get(rev_to_sources, &j, sizeof(svn_revnum_t));
+
+ /* No hash associated with this rev yet? */
+ if (!paths_for_rev)
+ {
+ svn_revnum_t *rev = apr_palloc(scratch_pool, sizeof(*rev));
+
+ *rev = j;
+ paths_for_rev = apr_hash_make(scratch_pool);
+ apr_hash_set(rev_to_sources, rev,
+ sizeof(svn_revnum_t), paths_for_rev);
+ }
+
+ apr_hash_set(paths_for_rev, path, APR_HASH_KEY_STRING, path);
+ }
+ }
+ }
+
+ iterpool = svn_pool_create(scratch_pool);
+
+ /* Validate the rev->source MERGEINFO equivalent hash, building the
+ validated mergeinfo as we go. */
+ for (hi = apr_hash_first(scratch_pool, rev_to_sources);
+ hi;
+ hi = apr_hash_next(hi))
+ {
+ const svn_revnum_t *rev = svn__apr_hash_index_key(hi);
+ apr_hash_t *paths = svn__apr_hash_index_val(hi);
+ apr_pool_t *inner_iterpool;
+ apr_hash_index_t *hi2;
+ svn_node_kind_t kind;
+ svn_fs_root_t *mergeinfo_rev_root;
+
+ svn_pool_clear(iterpool);
+ inner_iterpool = svn_pool_create(iterpool);
+
+ SVN_ERR(svn_fs_fs__revision_root(&mergeinfo_rev_root, fs,
+ *rev, iterpool));
+
+ for (hi2 = apr_hash_first(iterpool, paths);
+ hi2;
+ hi2 = apr_hash_next(hi2))
+ {
+ const char *path = svn__apr_hash_index_key(hi2);
+
+ svn_pool_clear(inner_iterpool);
+ SVN_ERR(svn_fs_fs__check_path(&kind, mergeinfo_rev_root,
+ path, inner_iterpool));
+ if (kind == svn_node_none)
+ {
+ apr_hash_set(paths, path, APR_HASH_KEY_STRING, NULL);
+ }
+ else
+ {
+ svn_mergeinfo_t good_mergeinfo_fragment;
+ const char *mergeinfo_str =
+ apr_psprintf(inner_iterpool, "%s:%ld", path, *rev);
+
+ SVN_ERR(svn_mergeinfo_parse(&good_mergeinfo_fragment,
+ mergeinfo_str, scratch_pool));
+ SVN_ERR(svn_mergeinfo_merge(filtered_mergeinfo,
+ good_mergeinfo_fragment,
+ scratch_pool));
+ }
+ }
+ svn_pool_destroy(inner_iterpool);
+ }
+
+ svn_pool_destroy(iterpool);
+ *validated_mergeinfo = svn_mergeinfo_dup(filtered_mergeinfo, result_pool);
+ return SVN_NO_ERROR;
+}
+
/* DIR_DAG is a directory DAG node which has mergeinfo in its
descendants. This function iterates over its children. For each
child with immediate mergeinfo, it adds its mergeinfo to
@@ -3592,8 +3714,8 @@ get_mergeinfo_for_path(svn_mergeinfo_t *
result_pool));
if (validate_inherited_mergeinfo)
- SVN_ERR(svn_fs_validate_mergeinfo(mergeinfo, *mergeinfo,
- rev_root->fs, pool, iterpool));
+ SVN_ERR(svn_fs_fs__validate_mergeinfo(mergeinfo, rev_root->fs,
+ *mergeinfo, pool, iterpool));
svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
@@ -3700,6 +3822,7 @@ fs_get_mergeinfo(svn_mergeinfo_catalog_t
include_descendants, pool);
}
+
/* The vtable associated with root objects. */
static root_vtable_t root_vtable = {
fs_paths_changed,
@@ -3729,7 +3852,7 @@ static root_vtable_t root_vtable = {
fs_contents_changed,
fs_get_file_delta_stream,
fs_merge,
- fs_get_mergeinfo
+ fs_get_mergeinfo,
};
/* Construct a new root object in FS, allocated from POOL. */
Modified: subversion/trunk/subversion/libsvn_fs_fs/tree.h
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/tree.h?rev=1036078&r1=1036077&r2=1036078&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/tree.h (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/tree.h Wed Nov 17 15:26:33 2010
@@ -58,6 +58,7 @@ svn_error_t *svn_fs_fs__commit_obliterat
svn_error_t *svn_fs_fs__txn_root(svn_fs_root_t **root_p, svn_fs_txn_t *txn,
apr_pool_t *pool);
+
/* Set KIND_P to the node kind of the node at PATH in ROOT.
Allocate the structure in POOL. */
svn_error_t *
@@ -76,6 +77,14 @@ svn_fs_fs__node_created_rev(svn_revnum_t
const char *path,
apr_pool_t *pool);
+/* Implements svn_fs_validate_mergeinfo. */
+svn_error_t *
+svn_fs_fs__validate_mergeinfo(svn_mergeinfo_t *validated_mergeinfo,
+ svn_fs_t *fs,
+ svn_mergeinfo_t mergeinfo,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */