Author: stefan2
Date: Sun Feb 14 18:33:31 2016
New Revision: 1730370
URL: http://svn.apache.org/viewvc?rev=1730370&view=rev
Log:
* subversion/mod_dav_svn/merge.c
(do_resources): Switch the the new svn_fs_paths_changed3 API.
Modified:
subversion/trunk/subversion/mod_dav_svn/merge.c
Modified: subversion/trunk/subversion/mod_dav_svn/merge.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/mod_dav_svn/merge.c?rev=1730370&r1=1730369&r2=1730370&view=diff
==============================================================================
--- subversion/trunk/subversion/mod_dav_svn/merge.c (original)
+++ subversion/trunk/subversion/mod_dav_svn/merge.c Sun Feb 14 18:33:31 2016
@@ -119,8 +119,8 @@ do_resources(const dav_svn_repos *repos,
apr_bucket_brigade *bb,
apr_pool_t *pool)
{
- apr_hash_t *changes;
- apr_hash_index_t *hi;
+ svn_fs_path_change_iterator_t *iterator;
+ svn_fs_path_change3_t *change;
/* Change lists can have >100000 entries, so we must make sure to release
any collection as soon as possible. Allocate them in SUBPOOL. */
@@ -135,22 +135,16 @@ do_resources(const dav_svn_repos *repos,
and deleted things. Also, note that deleted things don't merit
responses of their own -- they are considered modifications to
their parent. */
- SVN_ERR(svn_fs_paths_changed2(&changes, root, subpool));
+ SVN_ERR(svn_fs_paths_changed3(&iterator, root, subpool, subpool));
+ SVN_ERR(svn_fs_path_change_get(&change, iterator));
- for (hi = apr_hash_first(subpool, changes); hi; hi = apr_hash_next(hi))
+ while (change)
{
- const void *key;
- void *val;
- const char *path;
- apr_ssize_t path_len;
- svn_fs_path_change2_t *change;
svn_boolean_t send_self;
svn_boolean_t send_parent;
+ const char *path = change->path.data;
svn_pool_clear(iterpool);
- apr_hash_this(hi, &key, &path_len, &val);
- path = key;
- change = val;
/* Figure out who needs to get sent. */
switch (change->change_kind)
@@ -177,11 +171,11 @@ do_resources(const dav_svn_repos *repos,
{
/* If we haven't already sent this path, send it (and then
remember that we sent it). */
- if (! apr_hash_get(sent, path, path_len))
+ if (! apr_hash_get(sent, path, change->path.len))
{
svn_node_kind_t kind;
SVN_ERR(svn_fs_check_path(&kind, root, path, iterpool));
- SVN_ERR(send_response(repos, root, path,
+ SVN_ERR(send_response(repos, root, change->path.data,
kind == svn_node_dir,
output, bb, iterpool));
@@ -191,7 +185,10 @@ do_resources(const dav_svn_repos *repos,
* Because file paths cannot be the parent of other paths,
* we only need to track non-file paths. */
if (change->node_kind != svn_node_file)
- apr_hash_set(sent, path, path_len, (void *)1);
+ {
+ path = apr_pstrmemdup(subpool, path, change->path.len);
+ apr_hash_set(sent, path, change->path.len, (void *)1);
+ }
}
}
if (send_parent)
@@ -204,6 +201,8 @@ do_resources(const dav_svn_repos *repos,
svn_hash_sets(sent, apr_pstrdup(subpool, parent), (void *)1);
}
}
+
+ SVN_ERR(svn_fs_path_change_get(&change, iterator));
}
svn_pool_destroy(subpool);