You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by br...@apache.org on 2014/03/31 16:40:11 UTC
svn commit: r1583338 [2/2] - in /subversion/branches/remote-only-status: ./
build/generator/templates/ subversion/include/ subversion/include/private/
subversion/libsvn_client/ subversion/libsvn_fs/ subversion/libsvn_fs_fs/
subversion/libsvn_fs_x/ subv...
Modified: subversion/branches/remote-only-status/subversion/libsvn_wc/update_editor.c
URL: http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/libsvn_wc/update_editor.c?rev=1583338&r1=1583337&r2=1583338&view=diff
==============================================================================
--- subversion/branches/remote-only-status/subversion/libsvn_wc/update_editor.c (original)
+++ subversion/branches/remote-only-status/subversion/libsvn_wc/update_editor.c Mon Mar 31 14:40:09 2014
@@ -345,9 +345,10 @@ struct dir_baton
and reinstall it. */
apr_hash_t *deletion_conflicts;
- /* A hash of file names (only the hash key matters) seen by add_file
- and not yet added to the database by close_file. */
- apr_hash_t *not_present_files;
+ /* A hash of file names (only the hash key matters) seen by add_file and
+ add_directory and not yet added to the database, mapping to a const
+ char * node kind (via svn_node_kind_to_word(). */
+ apr_hash_t *not_present_nodes;
/* Set if an unversioned dir of the same name already existed in
this directory. */
@@ -608,7 +609,7 @@ make_dir_baton(struct dir_baton **d_p,
d->old_revision = SVN_INVALID_REVNUM;
d->adding_dir = adding;
d->changed_rev = SVN_INVALID_REVNUM;
- d->not_present_files = apr_hash_make(dir_pool);
+ d->not_present_nodes = apr_hash_make(dir_pool);
/* Copy some flags from the parent baton */
if (pb)
@@ -1974,6 +1975,7 @@ add_directory(const char *path,
struct dir_baton *pb = parent_baton;
struct edit_baton *eb = pb->edit_baton;
struct dir_baton *db;
+ apr_pool_t *scratch_pool = svn_pool_create(pool);
svn_node_kind_t kind;
svn_wc__db_status_t status;
svn_node_kind_t wc_kind;
@@ -1987,7 +1989,7 @@ add_directory(const char *path,
SVN_ERR(make_dir_baton(&db, path, eb, pb, TRUE, pool));
SVN_ERR(calculate_repos_relpath(&db->new_repos_relpath, db->local_abspath,
- NULL, eb, pb, db->pool, pool));
+ NULL, eb, pb, db->pool, scratch_pool));
*child_baton = db;
if (db->skip_this)
@@ -2022,13 +2024,26 @@ add_directory(const char *path,
"administrative directory"),
svn_dirent_local_style(db->local_abspath, pool));
- SVN_ERR(svn_io_check_path(db->local_abspath, &kind, db->pool));
+ if (!eb->clean_checkout)
+ {
+ SVN_ERR(svn_io_check_path(db->local_abspath, &kind, db->pool));
+
+ err = svn_wc__db_read_info(&status, &wc_kind, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ &conflicted, NULL, NULL, NULL, NULL, NULL, NULL,
+ eb->db, db->local_abspath,
+ scratch_pool, scratch_pool);
+ }
+ else
+ {
+ kind = svn_node_none;
+ status = svn_wc__db_status_not_present;
+ wc_kind = svn_node_unknown;
+ conflicted = FALSE;
+ err = NULL;
+ }
- err = svn_wc__db_read_info(&status, &wc_kind, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL,
- &conflicted, NULL, NULL, NULL, NULL, NULL, NULL,
- eb->db, db->local_abspath, db->pool, db->pool);
if (err)
{
if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND)
@@ -2041,63 +2056,55 @@ add_directory(const char *path,
versioned_locally_and_present = FALSE;
}
- else if (wc_kind == svn_node_dir
- && status == svn_wc__db_status_normal)
+ else if (status == svn_wc__db_status_normal && wc_kind == svn_node_unknown)
{
- /* !! We found the root of a separate working copy obstructing the wc !!
+ SVN_ERR_ASSERT(conflicted);
+ versioned_locally_and_present = FALSE; /* Tree conflict ACTUAL-only node */
+ }
+ else if (status == svn_wc__db_status_normal)
+ {
+ if (wc_kind == svn_node_dir)
+ {
+ /* !! We found the root of a working copy obstructing the wc !!
- If the directory would be part of our own working copy then
- we wouldn't have been called as an add_directory().
+ If the directory would be part of our own working copy then
+ we wouldn't have been called as an add_directory().
- The only thing we can do is add a not-present node, to allow
- a future update to bring in the new files when the problem is
- resolved. Note that svn_wc__db_base_add_not_present_node()
- explicitly adds the node into the parent's node database. */
-
- SVN_ERR(svn_wc__db_base_add_not_present_node(eb->db, db->local_abspath,
- db->new_repos_relpath,
- eb->repos_root,
- eb->repos_uuid,
- *eb->target_revision,
- svn_node_file,
- NULL, NULL,
- pool));
+ The only thing we can do is add a not-present node, to allow
+ a future update to bring in the new files when the problem is
+ resolved. Note that svn_wc__db_base_add_not_present_node()
+ explicitly adds the node into the parent's node database. */
- SVN_ERR(remember_skipped_tree(eb, db->local_abspath, pool));
- db->skip_this = TRUE;
- db->already_notified = TRUE;
+ svn_hash_sets(pb->not_present_nodes, apr_pstrdup(pb->pool, db->name),
+ svn_node_kind_to_word(svn_node_dir));
+ }
+ else
+ {
+ /* We found a file external occupating the place we need in BASE.
- do_notification(eb, db->local_abspath, svn_node_dir,
- svn_wc_notify_update_skip_obstruction, pool);
+ We can't add a not-present node in this case as that would overwrite
+ the file external. Luckily the file external itself stops us from
+ forgetting a child of this parent directory like an obstructing
+ working copy would.
- return SVN_NO_ERROR;
- }
- else if (status == svn_wc__db_status_normal
- && (wc_kind == svn_node_file
- || wc_kind == svn_node_symlink))
- {
- /* We found a file external occupating the place we need in BASE.
-
- We can't add a not-present node in this case as that would overwrite
- the file external. Luckily the file external itself stops us from
- forgetting a child of this parent directory like an obstructing
- working copy would.
-
- The reason we get here is that the adm crawler doesn't report
- file externals.
- */
+ The reason we get here is that the adm crawler doesn't report
+ file externals.
+ */
+ SVN_ERR_ASSERT(wc_kind == svn_node_file
+ || wc_kind == svn_node_symlink);
+ }
- SVN_ERR(remember_skipped_tree(eb, db->local_abspath, pool));
+ SVN_ERR(remember_skipped_tree(eb, db->local_abspath, scratch_pool));
db->skip_this = TRUE;
db->already_notified = TRUE;
- do_notification(eb, db->local_abspath, svn_node_file,
- svn_wc_notify_update_skip_obstruction, pool);
+ do_notification(eb, db->local_abspath, wc_kind,
+ svn_wc_notify_update_skip_obstruction, scratch_pool);
+
+ svn_pool_destroy(scratch_pool);
return SVN_NO_ERROR;
}
- else if (wc_kind == svn_node_unknown)
- versioned_locally_and_present = FALSE; /* Tree conflict ACTUAL-only node */
else
versioned_locally_and_present = IS_NODE_PRESENT(status);
@@ -2120,7 +2127,7 @@ add_directory(const char *path,
eb->db,
db->local_abspath,
tree_conflict,
- db->pool, db->pool));
+ db->pool, scratch_pool));
tree_conflict = svn_wc__conflict_skel_create(db->pool);
@@ -2129,7 +2136,7 @@ add_directory(const char *path,
eb->db, db->local_abspath,
reason, svn_wc_conflict_action_replace,
NULL,
- db->pool, db->pool));
+ db->pool, scratch_pool));
/* And now stop checking for conflicts here and just perform
a shadowed update */
@@ -2140,7 +2147,8 @@ add_directory(const char *path,
}
else
SVN_ERR(node_already_conflicted(&conflicted, &conflict_ignored,
- eb->db, db->local_abspath, pool));
+ eb->db, db->local_abspath,
+ scratch_pool));
}
/* Now the "usual" behaviour if already conflicted. Skip it. */
@@ -2163,18 +2171,13 @@ add_directory(const char *path,
Note that we can safely assume that no present base node exists,
because then we would not have received an add_directory.
*/
- SVN_ERR(svn_wc__db_base_add_not_present_node(eb->db, db->local_abspath,
- db->new_repos_relpath,
- eb->repos_root,
- eb->repos_uuid,
- *eb->target_revision,
- svn_node_dir,
- NULL, NULL,
- pool));
+ svn_hash_sets(pb->not_present_nodes, apr_pstrdup(pb->pool, db->name),
+ svn_node_kind_to_word(svn_node_dir));
- /* ### TODO: Also print victim_path in the skip msg. */
do_notification(eb, db->local_abspath, svn_node_dir,
- svn_wc_notify_skip_conflicted, pool);
+ svn_wc_notify_skip_conflicted, scratch_pool);
+
+ svn_pool_destroy(scratch_pool);
return SVN_NO_ERROR;
}
else if (conflict_ignored)
@@ -2207,7 +2210,7 @@ add_directory(const char *path,
SVN_ERR(svn_wc__db_scan_addition(&add_status, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL,
eb->db, db->local_abspath,
- pool, pool));
+ scratch_pool, scratch_pool));
/* Is there *something* that is not a dir? */
@@ -2230,7 +2233,7 @@ add_directory(const char *path,
db->local_abspath,
status, FALSE, svn_node_none,
svn_wc_conflict_action_add,
- pool, pool));
+ db->pool, scratch_pool));
}
if (tree_conflict == NULL)
@@ -2258,7 +2261,7 @@ add_directory(const char *path,
eb->db, db->local_abspath,
svn_wc_conflict_reason_unversioned,
svn_wc_conflict_action_add, NULL,
- db->pool, pool));
+ db->pool, scratch_pool));
db->edit_conflict = tree_conflict;
}
}
@@ -2269,7 +2272,7 @@ add_directory(const char *path,
db->new_repos_relpath,
wc_kind,
svn_node_dir,
- db->pool, pool));
+ db->pool, scratch_pool));
SVN_ERR(svn_wc__db_base_add_incomplete_directory(
eb->db, db->local_abspath,
@@ -2282,12 +2285,12 @@ add_directory(const char *path,
(! db->shadowed
&& status == svn_wc__db_status_added),
tree_conflict, NULL,
- pool));
+ scratch_pool));
/* Make sure there is a real directory at LOCAL_ABSPATH, unless we are just
updating the DB */
if (!db->shadowed)
- SVN_ERR(svn_wc__ensure_directory(db->local_abspath, pool));
+ SVN_ERR(svn_wc__ensure_directory(db->local_abspath, scratch_pool));
if (tree_conflict != NULL)
{
@@ -2299,11 +2302,11 @@ add_directory(const char *path,
eb->conflict_baton,
eb->cancel_func,
eb->cancel_baton,
- pool));
+ scratch_pool));
db->already_notified = TRUE;
do_notification(eb, db->local_abspath, svn_node_dir,
- svn_wc_notify_tree_conflict, pool);
+ svn_wc_notify_tree_conflict, scratch_pool);
}
@@ -2325,9 +2328,12 @@ add_directory(const char *path,
db->already_notified = TRUE;
- do_notification(eb, db->local_abspath, svn_node_dir, action, pool);
+ do_notification(eb, db->local_abspath, svn_node_dir, action,
+ scratch_pool);
}
+ svn_pool_destroy(scratch_pool);
+
return SVN_NO_ERROR;
}
@@ -2767,7 +2773,7 @@ close_directory(void *dir_baton,
}
}
- if (apr_hash_count(db->not_present_files))
+ if (apr_hash_count(db->not_present_nodes))
{
apr_hash_index_t *hi;
apr_pool_t *iterpool = svn_pool_create(scratch_pool);
@@ -2777,12 +2783,14 @@ close_directory(void *dir_baton,
transaction, but I can't even trigger it. I've tried
ra_local, ra_svn, ra_neon, ra_serf and they all call
close_file before close_dir. */
- for (hi = apr_hash_first(scratch_pool, db->not_present_files);
+ for (hi = apr_hash_first(scratch_pool, db->not_present_nodes);
hi;
hi = apr_hash_next(hi))
{
const char *child = svn__apr_hash_index_key(hi);
const char *child_abspath, *child_relpath;
+ svn_node_kind_t kind = svn_node_kind_from_word(
+ svn__apr_hash_index_val(hi));
svn_pool_clear(iterpool);
@@ -2795,7 +2803,7 @@ close_directory(void *dir_baton,
eb->repos_root,
eb->repos_uuid,
*eb->target_revision,
- svn_node_file,
+ kind,
NULL, NULL,
iterpool));
}
@@ -2917,6 +2925,9 @@ close_directory(void *dir_baton,
eb->cancel_func, eb->cancel_baton,
scratch_pool));
+ if (db->parent_baton)
+ svn_hash_sets(db->parent_baton->not_present_nodes, db->name, NULL);
+
if (conflict_skel && eb->conflict_func)
SVN_ERR(svn_wc__conflict_invoke_resolver(eb->db, db->local_abspath,
conflict_skel,
@@ -3136,13 +3147,13 @@ add_file(const char *path,
struct dir_baton *pb = parent_baton;
struct edit_baton *eb = pb->edit_baton;
struct file_baton *fb;
- svn_node_kind_t kind = svn_node_none;
- svn_node_kind_t wc_kind = svn_node_unknown;
- svn_wc__db_status_t status = svn_wc__db_status_normal;
+ svn_node_kind_t kind;
+ svn_node_kind_t wc_kind;
+ svn_wc__db_status_t status;
apr_pool_t *scratch_pool;
- svn_boolean_t conflicted = FALSE;
+ svn_boolean_t conflicted;
svn_boolean_t conflict_ignored = FALSE;
- svn_boolean_t versioned_locally_and_present = FALSE;
+ svn_boolean_t versioned_locally_and_present;
svn_skel_t *tree_conflict = NULL;
svn_error_t *err = SVN_NO_ERROR;
@@ -3182,6 +3193,13 @@ add_file(const char *path,
eb->db, fb->local_abspath,
scratch_pool, scratch_pool);
}
+ else
+ {
+ kind = svn_node_none;
+ status = svn_wc__db_status_not_present;
+ wc_kind = svn_node_unknown;
+ conflicted = FALSE;
+ }
if (err)
{
@@ -3194,58 +3212,53 @@ add_file(const char *path,
versioned_locally_and_present = FALSE;
}
- else if (wc_kind == svn_node_dir
- && status == svn_wc__db_status_normal)
+ else if (status == svn_wc__db_status_normal && wc_kind == svn_node_unknown)
{
- /* !! We found the root of a separate working copy obstructing the wc !!
-
- If the directory would be part of our own working copy then
- we wouldn't have been called as an add_file().
+ SVN_ERR_ASSERT(conflicted);
+ versioned_locally_and_present = FALSE; /* Tree conflict ACTUAL-only node */
+ }
+ else if (status == svn_wc__db_status_normal)
+ {
+ if (wc_kind == svn_node_dir)
+ {
+ /* !! We found the root of a working copy obstructing the wc !!
- The only thing we can do is add a not-present node, to allow
- a future update to bring in the new files when the problem is
- resolved. */
- svn_hash_sets(pb->not_present_files, apr_pstrdup(pb->pool, fb->name),
- (void *)1);
+ If the directory would be part of our own working copy then
+ we wouldn't have been called as an add_file().
- SVN_ERR(remember_skipped_tree(eb, fb->local_abspath, pool));
- fb->skip_this = TRUE;
- fb->already_notified = TRUE;
+ The only thing we can do is add a not-present node, to allow
+ a future update to bring in the new files when the problem is
+ resolved. */
+ svn_hash_sets(pb->not_present_nodes, apr_pstrdup(pb->pool, fb->name),
+ svn_node_kind_to_word(svn_node_file));
+ }
+ else
+ {
+ /* We found a file external occupating the place we need in BASE.
- do_notification(eb, fb->local_abspath, svn_node_file,
- svn_wc_notify_update_skip_obstruction, scratch_pool);
+ We can't add a not-present node in this case as that would overwrite
+ the file external. Luckily the file external itself stops us from
+ forgetting a child of this parent directory like an obstructing
+ working copy would.
- svn_pool_destroy(scratch_pool);
+ The reason we get here is that the adm crawler doesn't report
+ file externals.
+ */
+ SVN_ERR_ASSERT(wc_kind == svn_node_file
+ || wc_kind == svn_node_symlink);
+ }
- return SVN_NO_ERROR;
- }
- else if (status == svn_wc__db_status_normal
- && (wc_kind == svn_node_file
- || wc_kind == svn_node_symlink))
- {
- /* We found a file external occupating the place we need in BASE.
-
- We can't add a not-present node in this case as that would overwrite
- the file external. Luckily the file external itself stops us from
- forgetting a child of this parent directory like an obstructing
- working copy would.
-
- The reason we get here is that the adm crawler doesn't report
- file externals.
- */
SVN_ERR(remember_skipped_tree(eb, fb->local_abspath, pool));
fb->skip_this = TRUE;
fb->already_notified = TRUE;
- do_notification(eb, fb->local_abspath, svn_node_file,
+ do_notification(eb, fb->local_abspath, wc_kind,
svn_wc_notify_update_skip_obstruction, scratch_pool);
svn_pool_destroy(scratch_pool);
return SVN_NO_ERROR;
}
- else if (wc_kind == svn_node_unknown)
- versioned_locally_and_present = FALSE; /* Tree conflict ACTUAL-only node */
else
versioned_locally_and_present = IS_NODE_PRESENT(status);
@@ -3313,10 +3326,10 @@ add_file(const char *path,
Note that we can safely assume that no present base node exists,
because then we would not have received an add_file.
*/
- svn_hash_sets(pb->not_present_files, apr_pstrdup(pb->pool, fb->name),
- (void *)1);
+ svn_hash_sets(pb->not_present_nodes, apr_pstrdup(pb->pool, fb->name),
+ svn_node_kind_to_word(svn_node_file));
- do_notification(eb, fb->local_abspath, svn_node_unknown,
+ do_notification(eb, fb->local_abspath, svn_node_file,
svn_wc_notify_skip_conflicted, scratch_pool);
svn_pool_destroy(scratch_pool);
@@ -3418,8 +3431,8 @@ add_file(const char *path,
|| *eb->target_basename == '\0'
|| (strcmp(fb->local_abspath, eb->target_abspath) != 0))
{
- svn_hash_sets(pb->not_present_files, apr_pstrdup(pb->pool, fb->name),
- (void *)1);
+ svn_hash_sets(pb->not_present_nodes, apr_pstrdup(pb->pool, fb->name),
+ svn_node_kind_to_word(svn_node_file));
}
if (tree_conflict != NULL)
@@ -4619,7 +4632,7 @@ close_file(void *file_baton,
/* Deal with the WORKING tree, based on updates to the BASE tree. */
- svn_hash_sets(fb->dir_baton->not_present_files, fb->name, NULL);
+ svn_hash_sets(fb->dir_baton->not_present_nodes, fb->name, NULL);
/* Send a notification to the callback function. (Skip notifications
about files which were already notified for another reason.) */
Modified: subversion/branches/remote-only-status/subversion/libsvn_wc/util.c
URL: http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/libsvn_wc/util.c?rev=1583338&r1=1583337&r2=1583338&view=diff
==============================================================================
--- subversion/branches/remote-only-status/subversion/libsvn_wc/util.c (original)
+++ subversion/branches/remote-only-status/subversion/libsvn_wc/util.c Mon Mar 31 14:40:09 2014
@@ -272,8 +272,8 @@ svn_wc__conflict_description3_dup(const
new_conflict->their_abspath = apr_pstrdup(pool, conflict->their_abspath);
if (conflict->my_abspath)
new_conflict->my_abspath = apr_pstrdup(pool, conflict->my_abspath);
- if (conflict->merged_file)
- new_conflict->merged_file = apr_pstrdup(pool, conflict->merged_file);
+ if (conflict->merged_abspath)
+ new_conflict->merged_abspath = apr_pstrdup(pool, conflict->merged_abspath);
if (conflict->src_left_version)
new_conflict->src_left_version =
svn_wc_conflict_version_dup(conflict->src_left_version, pool);
@@ -407,9 +407,9 @@ svn_wc__cd3_to_cd2(const svn_wc_conflict
new_conflict->their_abspath = apr_pstrdup(result_pool,
conflict->their_abspath);
- if (conflict->merged_file)
+ if (conflict->merged_abspath)
new_conflict->merged_file = apr_pstrdup(result_pool,
- conflict->merged_file);
+ conflict->merged_abspath);
}
if (conflict->my_abspath)
new_conflict->my_abspath = apr_pstrdup(result_pool, conflict->my_abspath);
Modified: subversion/branches/remote-only-status/subversion/mod_dav_svn/authz.c
URL: http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/mod_dav_svn/authz.c?rev=1583338&r1=1583337&r2=1583338&view=diff
==============================================================================
--- subversion/branches/remote-only-status/subversion/mod_dav_svn/authz.c (original)
+++ subversion/branches/remote-only-status/subversion/mod_dav_svn/authz.c Mon Mar 31 14:40:09 2014
@@ -80,7 +80,8 @@ dav_svn__allow_read(request_rec *r,
uri_type = DAV_SVN__BUILD_URI_PUBLIC;
/* Build a Version Resource uri representing (rev, path). */
- uri = dav_svn__build_uri(repos, uri_type, rev, path, FALSE, pool);
+ uri = dav_svn__build_uri(repos, uri_type, rev, path, FALSE /* add_href */,
+ pool);
/* Check if GET would work against this uri. */
subreq = ap_sub_req_method_uri("GET", uri, r, r->output_filters);
Modified: subversion/branches/remote-only-status/subversion/mod_dav_svn/dav_svn.h
URL: http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/mod_dav_svn/dav_svn.h?rev=1583338&r1=1583337&r2=1583338&view=diff
==============================================================================
--- subversion/branches/remote-only-status/subversion/mod_dav_svn/dav_svn.h (original)
+++ subversion/branches/remote-only-status/subversion/mod_dav_svn/dav_svn.h Mon Mar 31 14:40:09 2014
@@ -876,7 +876,7 @@ dav_svn__build_uri(const dav_svn_repos *
enum dav_svn__build_what what,
svn_revnum_t revision,
const char *path,
- int add_href,
+ svn_boolean_t add_href,
apr_pool_t *pool);
Modified: subversion/branches/remote-only-status/subversion/mod_dav_svn/liveprops.c
URL: http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/mod_dav_svn/liveprops.c?rev=1583338&r1=1583337&r2=1583338&view=diff
==============================================================================
--- subversion/branches/remote-only-status/subversion/mod_dav_svn/liveprops.c (original)
+++ subversion/branches/remote-only-status/subversion/mod_dav_svn/liveprops.c Mon Mar 31 14:40:09 2014
@@ -549,7 +549,7 @@ insert_prop_internal(const dav_resource
return DAV_PROP_INSERT_NOTSUPP;
value = dav_svn__build_uri(resource->info->repos, DAV_SVN__BUILD_URI_BC,
resource->info->root.rev, NULL,
- 1 /* add_href */, scratch_pool);
+ TRUE /* add_href */, scratch_pool);
break;
case DAV_PROPID_checked_in:
@@ -578,7 +578,8 @@ insert_prop_internal(const dav_resource
}
s = dav_svn__build_uri(resource->info->repos,
DAV_SVN__BUILD_URI_BASELINE,
- revnum, NULL, 0 /* add_href */, scratch_pool);
+ revnum, NULL, FALSE /* add_href */,
+ scratch_pool);
value = apr_psprintf(scratch_pool, "<D:href>%s</D:href>",
apr_xml_quote_string(scratch_pool, s, 1));
}
@@ -596,7 +597,7 @@ insert_prop_internal(const dav_resource
s = dav_svn__build_uri(resource->info->repos,
DAV_SVN__BUILD_URI_VERSION,
rev_to_use, resource->info->repos_path,
- 0 /* add_href */, scratch_pool);
+ FALSE /* add_href */, scratch_pool);
value = apr_psprintf(scratch_pool, "<D:href>%s</D:href>",
apr_xml_quote_string(scratch_pool, s, 1));
}
@@ -610,7 +611,7 @@ insert_prop_internal(const dav_resource
return DAV_PROP_INSERT_NOTSUPP;
value = dav_svn__build_uri(resource->info->repos, DAV_SVN__BUILD_URI_VCC,
SVN_IGNORED_REVNUM, NULL,
- 1 /* add_href */, scratch_pool);
+ TRUE /* add_href */, scratch_pool);
break;
case DAV_PROPID_version_name:
Modified: subversion/branches/remote-only-status/subversion/mod_dav_svn/merge.c
URL: http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/mod_dav_svn/merge.c?rev=1583338&r1=1583337&r2=1583338&view=diff
==============================================================================
--- subversion/branches/remote-only-status/subversion/mod_dav_svn/merge.c (original)
+++ subversion/branches/remote-only-status/subversion/mod_dav_svn/merge.c Mon Mar 31 14:40:09 2014
@@ -85,7 +85,7 @@ send_response(const dav_svn_repos *repos
SVN_IGNORED_REVNUM, path, 0 /* add_href */, pool);
rev_to_use = dav_svn__get_safe_cr(root, path, pool);
vsn_url = dav_svn__build_uri(repos, DAV_SVN__BUILD_URI_VERSION,
- rev_to_use, path, 0 /* add_href */, pool);
+ rev_to_use, path, FALSE /* add_href */, pool);
status = ap_fputstrs(output, bb,
"<D:response>" DEBUG_CR
"<D:href>",
@@ -243,7 +243,7 @@ dav_svn__merge_response(ap_filter_t *out
/* the HREF for the baseline is actually the VCC */
vcc = dav_svn__build_uri(repos, DAV_SVN__BUILD_URI_VCC, SVN_IGNORED_REVNUM,
- NULL, 0 /* add_href */, pool);
+ NULL, FALSE /* add_href */, pool);
/* the version-name of the baseline is the revision number */
rev = apr_psprintf(pool, "%ld", new_rev);
Modified: subversion/branches/remote-only-status/subversion/mod_dav_svn/reports/update.c
URL: http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/mod_dav_svn/reports/update.c?rev=1583338&r1=1583337&r2=1583338&view=diff
==============================================================================
--- subversion/branches/remote-only-status/subversion/mod_dav_svn/reports/update.c (original)
+++ subversion/branches/remote-only-status/subversion/mod_dav_svn/reports/update.c Mon Mar 31 14:40:09 2014
@@ -253,13 +253,13 @@ send_vsn_url(item_baton_t *baton, apr_po
{
href = dav_svn__build_uri(baton->uc->resource->info->repos,
DAV_SVN__BUILD_URI_REVROOT,
- revision, path, 0 /* add_href */, pool);
+ revision, path, FALSE /* add_href */, pool);
}
else
{
href = dav_svn__build_uri(baton->uc->resource->info->repos,
DAV_SVN__BUILD_URI_VERSION,
- revision, path, 0 /* add_href */, pool);
+ revision, path, FALSE /* add_href */, pool);
}
return dav_svn__brigade_printf(baton->uc->bb, baton->uc->output,
@@ -346,7 +346,7 @@ add_helper(svn_boolean_t is_dir,
bc_url = dav_svn__build_uri(child->uc->resource->info->repos,
DAV_SVN__BUILD_URI_BC,
revision, real_path,
- 0 /* add_href */, pool);
+ FALSE /* add_href */, pool);
bc_url = svn_urlpath__canonicalize(bc_url, pool);
/* ugh, build_uri ignores the path and just builds the root
Modified: subversion/branches/remote-only-status/subversion/mod_dav_svn/repos.c
URL: http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/mod_dav_svn/repos.c?rev=1583338&r1=1583337&r2=1583338&view=diff
==============================================================================
--- subversion/branches/remote-only-status/subversion/mod_dav_svn/repos.c (original)
+++ subversion/branches/remote-only-status/subversion/mod_dav_svn/repos.c Mon Mar 31 14:40:09 2014
@@ -894,7 +894,7 @@ prep_version(dav_resource_combined *comb
comb->res.uri = dav_svn__build_uri(comb->priv.repos,
DAV_SVN__BUILD_URI_BASELINE,
comb->priv.root.rev, NULL,
- 0 /* add_href */,
+ FALSE /* add_href */,
pool);
return NULL;
@@ -4403,7 +4403,7 @@ dav_svn__working_to_regular_resource(dav
/* if rev was specific, create baseline-collection URL */
path = dav_svn__build_uri(repos, DAV_SVN__BUILD_URI_BC,
priv->root.rev, priv->repos_path,
- 0, resource->pool);
+ FALSE /* add_href */, resource->pool);
}
path = svn_path_uri_encode(path, resource->pool);
priv->uri_path = svn_stringbuf_create(path, resource->pool);
Modified: subversion/branches/remote-only-status/subversion/mod_dav_svn/util.c
URL: http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/mod_dav_svn/util.c?rev=1583338&r1=1583337&r2=1583338&view=diff
==============================================================================
--- subversion/branches/remote-only-status/subversion/mod_dav_svn/util.c (original)
+++ subversion/branches/remote-only-status/subversion/mod_dav_svn/util.c Mon Mar 31 14:40:09 2014
@@ -227,7 +227,7 @@ dav_svn__build_uri(const dav_svn_repos *
enum dav_svn__build_what what,
svn_revnum_t revision,
const char *path,
- int add_href,
+ svn_boolean_t add_href,
apr_pool_t *pool)
{
const char *root_path = repos->root_path;
Modified: subversion/branches/remote-only-status/subversion/mod_dav_svn/version.c
URL: http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/mod_dav_svn/version.c?rev=1583338&r1=1583337&r2=1583338&view=diff
==============================================================================
--- subversion/branches/remote-only-status/subversion/mod_dav_svn/version.c (original)
+++ subversion/branches/remote-only-status/subversion/mod_dav_svn/version.c Mon Mar 31 14:40:09 2014
@@ -178,7 +178,8 @@ get_option(const dav_resource *resource,
request_rec *r = resource->info->r;
const char *repos_root_uri =
dav_svn__build_uri(resource->info->repos, DAV_SVN__BUILD_URI_PUBLIC,
- SVN_IGNORED_REVNUM, "", 0, resource->pool);
+ SVN_IGNORED_REVNUM, "", FALSE /* add_href */,
+ resource->pool);
/* ### DAV:version-history-collection-set */
if (elem->ns != APR_XML_NS_DAV_ID
@@ -199,7 +200,7 @@ get_option(const dav_resource *resource,
dav_svn__build_uri(resource->info->repos,
DAV_SVN__BUILD_URI_ACT_COLLECTION,
SVN_INVALID_REVNUM, NULL,
- 1 /* add_href */,
+ TRUE /* add_href */,
resource->pool));
apr_text_append(resource->pool, option,
"</D:activity-collection-set>");
@@ -1040,7 +1041,7 @@ dav_svn__checkin(dav_resource *resource,
uri = dav_svn__build_uri(resource->info->repos,
DAV_SVN__BUILD_URI_VERSION,
new_rev, resource->info->repos_path,
- 0, resource->pool);
+ FALSE /* add_href */, resource->pool);
err = dav_svn__create_version_resource(version_resource, uri,
resource->pool);
Modified: subversion/branches/remote-only-status/subversion/svn/cl.h
URL: http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/svn/cl.h?rev=1583338&r1=1583337&r2=1583338&view=diff
==============================================================================
--- subversion/branches/remote-only-status/subversion/svn/cl.h (original)
+++ subversion/branches/remote-only-status/subversion/svn/cl.h Mon Mar 31 14:40:09 2014
@@ -534,7 +534,8 @@ svn_cl__merge_file_externally(const char
/* Like svn_cl__merge_file_externally, but using a built-in merge tool
* with help from an external editor specified by EDITOR_CMD. */
svn_error_t *
-svn_cl__merge_file(const char *base_path,
+svn_cl__merge_file(svn_boolean_t *remains_in_conflict,
+ const char *base_path,
const char *their_path,
const char *my_path,
const char *merged_path,
@@ -542,7 +543,8 @@ svn_cl__merge_file(const char *base_path
const char *path_prefix,
const char *editor_cmd,
apr_hash_t *config,
- svn_boolean_t *remains_in_conflict,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
apr_pool_t *scratch_pool);
Modified: subversion/branches/remote-only-status/subversion/svn/conflict-callbacks.c
URL: http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/svn/conflict-callbacks.c?rev=1583338&r1=1583337&r2=1583338&view=diff
==============================================================================
--- subversion/branches/remote-only-status/subversion/svn/conflict-callbacks.c (original)
+++ subversion/branches/remote-only-status/subversion/svn/conflict-callbacks.c Mon Mar 31 14:40:09 2014
@@ -129,6 +129,8 @@ svn_cl__accept_from_word(const char *wor
static svn_error_t *
show_diff(const svn_wc_conflict_description2_t *desc,
const char *path_prefix,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
apr_pool_t *pool)
{
const char *path1, *path2;
@@ -186,11 +188,12 @@ show_diff(const svn_wc_conflict_descript
SVN_ERR(svn_stream_for_stdout(&output, pool));
SVN_ERR(svn_diff_file_diff_2(&diff, path1, path2,
options, pool));
- return svn_diff_file_output_unified3(output, diff,
+ return svn_diff_file_output_unified4(output, diff,
path1, path2,
label1, label2,
APR_LOCALE_CHARSET,
NULL, FALSE,
+ cancel_func, cancel_baton,
pool);
}
@@ -796,7 +799,9 @@ handle_text_conflict(svn_wc_conflict_res
continue;
}
- SVN_ERR(show_diff(desc, b->path_prefix, iterpool));
+ SVN_ERR(show_diff(desc, b->path_prefix,
+ b->pb->cancel_func, b->pb->cancel_baton,
+ iterpool));
knows_something = TRUE;
}
else if (strcmp(opt->code, "e") == 0 || strcmp(opt->code, ":-E") == 0)
@@ -850,7 +855,8 @@ handle_text_conflict(svn_wc_conflict_res
continue;
}
- SVN_ERR(svn_cl__merge_file(desc->base_abspath,
+ SVN_ERR(svn_cl__merge_file(&remains_in_conflict,
+ desc->base_abspath,
desc->their_abspath,
desc->my_abspath,
desc->merged_file,
@@ -858,7 +864,8 @@ handle_text_conflict(svn_wc_conflict_res
b->path_prefix,
b->editor_cmd,
b->config,
- &remains_in_conflict,
+ b->pb->cancel_func,
+ b->pb->cancel_baton,
iterpool));
}
else
Modified: subversion/branches/remote-only-status/subversion/svn/file-merge.c
URL: http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/svn/file-merge.c?rev=1583338&r1=1583337&r2=1583338&view=diff
==============================================================================
--- subversion/branches/remote-only-status/subversion/svn/file-merge.c (original)
+++ subversion/branches/remote-only-status/subversion/svn/file-merge.c Mon Mar 31 14:40:09 2014
@@ -853,7 +853,8 @@ static svn_diff_output_fns_t file_merge_
};
svn_error_t *
-svn_cl__merge_file(const char *base_path,
+svn_cl__merge_file(svn_boolean_t *remains_in_conflict,
+ const char *base_path,
const char *their_path,
const char *my_path,
const char *merged_path,
@@ -861,7 +862,8 @@ svn_cl__merge_file(const char *base_path
const char *path_prefix,
const char *editor_cmd,
apr_hash_t *config,
- svn_boolean_t *remains_in_conflict,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
apr_pool_t *scratch_pool)
{
svn_diff_t *diff;
@@ -918,7 +920,8 @@ svn_cl__merge_file(const char *base_path
fmb.abort_merge = FALSE;
fmb.scratch_pool = scratch_pool;
- SVN_ERR(svn_diff_output(diff, &fmb, &file_merge_diff_output_fns));
+ SVN_ERR(svn_diff_output2(diff, &fmb, &file_merge_diff_output_fns,
+ cancel_func, cancel_baton));
SVN_ERR(svn_io_file_close(original_file, scratch_pool));
SVN_ERR(svn_io_file_close(modified_file, scratch_pool));
Modified: subversion/branches/remote-only-status/subversion/svn/list-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/svn/list-cmd.c?rev=1583338&r1=1583337&r2=1583338&view=diff
==============================================================================
--- subversion/branches/remote-only-status/subversion/svn/list-cmd.c (original)
+++ subversion/branches/remote-only-status/subversion/svn/list-cmd.c Mon Mar 31 14:40:09 2014
@@ -420,6 +420,8 @@ svn_cl__list(apr_getopt_t *os,
if (seen_nonexistent_target)
err = svn_error_create(SVN_ERR_ILLEGAL_TARGET, NULL,
_("Could not list all targets because some targets don't exist"));
+ else
+ err = NULL;
return svn_error_compose_create(externals_err, err);
}
Modified: subversion/branches/remote-only-status/subversion/svnlook/svnlook.c
URL: http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/svnlook/svnlook.c?rev=1583338&r1=1583337&r2=1583338&view=diff
==============================================================================
--- subversion/branches/remote-only-status/subversion/svnlook/svnlook.c (original)
+++ subversion/branches/remote-only-status/subversion/svnlook/svnlook.c Mon Mar 31 14:40:09 2014
@@ -1058,11 +1058,12 @@ print_diff_tree(svn_stream_t *out_stream
SVN_ERR(generate_label(&orig_label, base_root,
base_path, pool));
SVN_ERR(generate_label(&new_label, root, path, pool));
- SVN_ERR(svn_diff_file_output_unified3
- (out_stream, diff, orig_path, new_path,
+ SVN_ERR(svn_diff_file_output_unified4(
+ out_stream, diff, orig_path, new_path,
orig_label, new_label,
svn_cmdline_output_encoding(pool), NULL,
- opts->show_c_function, pool));
+ opts->show_c_function,
+ check_cancel, NULL, pool));
SVN_ERR(svn_stream_printf_from_utf8(out_stream, encoding, pool,
"\n"));
diff_header_printed = TRUE;
Modified: subversion/branches/remote-only-status/subversion/svnserve/serve.c
URL: http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/svnserve/serve.c?rev=1583338&r1=1583337&r2=1583338&view=diff
==============================================================================
--- subversion/branches/remote-only-status/subversion/svnserve/serve.c (original)
+++ subversion/branches/remote-only-status/subversion/svnserve/serve.c Mon Mar 31 14:40:09 2014
@@ -1066,8 +1066,7 @@ get_props(apr_hash_t **props,
/* Hardcode the values for the committed revision, date, and author. */
SVN_ERR(svn_repos_get_committed_info(&crev, &cdate, &cauthor, root,
path, pool));
- str = svn_string_create(apr_psprintf(pool, "%ld", crev),
- pool);
+ str = svn_string_createf(pool, "%ld", crev);
svn_hash_sets(*props, SVN_PROP_ENTRY_COMMITTED_REV, str);
str = (cdate) ? svn_string_create(cdate, pool) : NULL;
svn_hash_sets(*props, SVN_PROP_ENTRY_COMMITTED_DATE, str);
@@ -3374,26 +3373,13 @@ repos_path_valid(const char *path)
return TRUE;
}
-/* APR pool cleanup callback that resets the REPOS pointer in ARG. */
-static apr_status_t
-reset_repos(void *arg)
-{
- repository_t *repository = arg;
- repository->repos = NULL;
-
- return APR_SUCCESS;
-}
-
/* Look for the repository given by URL, using ROOT as the virtual
* repository root. If we find one, fill in the repos, fs, repos_url,
- * and fs_path fields of REPOSITORY. REPOSITORY->REPO will be allocated
- * SCRATCH_POOL because repositories may be closed and re-opened during
- * the lifetime of a connection. All other parts in REPOSITORY must
- * be allocated in RESULT_POOL. VHOST and READ_ONLY flags are the same
- * as in the server baton.
+ * and fs_path fields of REPOSITORY. VHOST and READ_ONLY flags are the
+ * same as in the server baton.
*
- * CONFIG_POOL, AUTHZ_POOL and REPOS_POOL shall be used to load any
- * object of the respective type.
+ * CONFIG_POOL and AUTHZ_POOL shall be used to load any object of the
+ * respective type.
*/
static svn_error_t *
find_repos(const char *url,
@@ -3404,9 +3390,8 @@ find_repos(const char *url,
repository_t *repository,
svn_repos__config_pool_t *config_pool,
svn_repos__authz_pool_t *authz_pool,
- svn_repos__repos_pool_t *repos_pool,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
+ apr_hash_t *fs_config,
+ apr_pool_t *pool)
{
const char *path, *full_path, *fs_path, *hooks_env;
svn_stringbuf_t *url_buf;
@@ -3423,8 +3408,8 @@ find_repos(const char *url,
if (path == NULL)
path = "";
}
- path = svn_relpath_canonicalize(path, result_pool);
- path = svn_path_uri_decode(path, result_pool);
+ path = svn_relpath_canonicalize(path, pool);
+ path = svn_path_uri_decode(path, pool);
/* Ensure that it isn't possible to escape the root by disallowing
'..' segments. */
@@ -3433,61 +3418,55 @@ find_repos(const char *url,
"Couldn't determine repository path");
/* Join the server-configured root with the client path. */
- full_path = svn_dirent_join(svn_dirent_canonicalize(root, result_pool),
- path, result_pool);
+ full_path = svn_dirent_join(svn_dirent_canonicalize(root, pool),
+ path, pool);
/* Search for a repository in the full path. */
- repository->repos_root = svn_repos_find_root_path(full_path, result_pool);
+ repository->repos_root = svn_repos_find_root_path(full_path, pool);
if (!repository->repos_root)
return svn_error_createf(SVN_ERR_RA_SVN_REPOS_NOT_FOUND, NULL,
"No repository found in '%s'", url);
/* Open the repository and fill in b with the resulting information. */
- SVN_ERR(svn_repos__repos_pool_get(&repository->repos, repos_pool,
- repository->repos_root, "",
- scratch_pool));
+ SVN_ERR(svn_repos_open2(&repository->repos, repository->repos_root,
+ fs_config, pool));
SVN_ERR(svn_repos_remember_client_capabilities(repository->repos,
repository->capabilities));
repository->fs = svn_repos_fs(repository->repos);
fs_path = full_path + strlen(repository->repos_root);
repository->fs_path = svn_stringbuf_create(*fs_path ? fs_path : "/",
- result_pool);
- url_buf = svn_stringbuf_create(url, result_pool);
+ pool);
+ url_buf = svn_stringbuf_create(url, pool);
svn_path_remove_components(url_buf,
svn_path_component_count(repository->fs_path->data));
repository->repos_url = url_buf->data;
repository->authz_repos_name = svn_dirent_is_child(root,
repository->repos_root,
- result_pool);
+ pool);
if (repository->authz_repos_name == NULL)
repository->repos_name = svn_dirent_basename(repository->repos_root,
- result_pool);
+ pool);
else
repository->repos_name = repository->authz_repos_name;
repository->repos_name = svn_path_uri_encode(repository->repos_name,
- result_pool);
-
- /* Reset the REPOS pointer as soon as the REPOS will be returned to the
- REPOS_POOL. */
- apr_pool_cleanup_register(scratch_pool, repository, reset_repos,
- apr_pool_cleanup_null);
+ pool);
/* If the svnserve configuration has not been loaded then load it from the
* repository. */
if (NULL == cfg)
{
- repository->base = svn_repos_conf_dir(repository->repos, result_pool);
+ repository->base = svn_repos_conf_dir(repository->repos, pool);
SVN_ERR(svn_repos__config_pool_get(&cfg, NULL, config_pool,
svn_repos_svnserve_conf
- (repository->repos, result_pool),
+ (repository->repos, pool),
FALSE, FALSE, repository->repos,
- result_pool));
+ pool));
}
- SVN_ERR(load_pwdb_config(repository, cfg, config_pool, result_pool));
+ SVN_ERR(load_pwdb_config(repository, cfg, config_pool, pool));
SVN_ERR(load_authz_config(repository, repository->repos_root, cfg,
- authz_pool, result_pool));
+ authz_pool, pool));
#ifdef SVN_HAVE_SASL
{
@@ -3509,10 +3488,10 @@ find_repos(const char *url,
#endif
/* Use the repository UUID as the default realm. */
- SVN_ERR(svn_fs_get_uuid(repository->fs, &repository->realm, result_pool));
+ SVN_ERR(svn_fs_get_uuid(repository->fs, &repository->realm, pool));
svn_config_get(cfg, &repository->realm, SVN_CONFIG_SECTION_GENERAL,
SVN_CONFIG_OPTION_REALM, repository->realm);
- repository->realm = apr_pstrdup(result_pool, repository->realm);
+ repository->realm = apr_pstrdup(pool, repository->realm);
/* Make sure it's possible for the client to authenticate. Note
that this doesn't take into account any authz configuration read
@@ -3524,9 +3503,9 @@ find_repos(const char *url,
svn_config_get(cfg, &hooks_env, SVN_CONFIG_SECTION_GENERAL,
SVN_CONFIG_OPTION_HOOKS_ENV, NULL);
if (hooks_env)
- hooks_env = svn_dirent_internal_style(hooks_env, scratch_pool);
+ hooks_env = svn_dirent_internal_style(hooks_env, pool);
- repository->hooks_env = apr_pstrdup(result_pool, hooks_env);
+ repository->hooks_env = apr_pstrdup(pool, hooks_env);
return SVN_NO_ERROR;
}
@@ -3815,8 +3794,8 @@ construct_server_baton(server_baton_t **
err = handle_config_error(find_repos(client_url, params->root, b->vhost,
b->read_only, params->cfg,
b->repository, params->config_pool,
- params->authz_pool, params->repos_pool,
- conn_pool, scratch_pool),
+ params->authz_pool, params->fs_config,
+ conn_pool),
b);
if (!err)
{
@@ -3886,7 +3865,7 @@ construct_server_baton(server_baton_t **
scratch_pool),
ra_client_string, client_string));
- warn_baton = apr_pcalloc(scratch_pool, sizeof(*warn_baton));
+ warn_baton = apr_pcalloc(conn_pool, sizeof(*warn_baton));
warn_baton->server = b;
warn_baton->conn = conn;
svn_fs_set_warning_func(b->repository->fs, fs_warning_func, warn_baton);
@@ -3909,45 +3888,6 @@ construct_server_baton(server_baton_t **
return SVN_NO_ERROR;
}
-/* Open a svn_repos object in CONNECTION for the same repository and with
- the same settings as last time. The repository object remains valid
- until POOL gets cleaned up at which point the respective pointer in
- CONNECTION reset. The repository in CONNECTION must have been opened
- at some point in the past using construct_server_baton.
- */
-static svn_error_t *
-reopen_repos(connection_t *connection,
- apr_pool_t *pool)
-{
- fs_warning_baton_t *warn_baton = apr_pcalloc(pool, sizeof(*warn_baton));
- repository_t *repository = connection->baton->repository;
-
- /* Open the repository and fill in b with the resulting information. */
- SVN_ERR(svn_repos__repos_pool_get(&repository->repos,
- connection->params->repos_pool,
- repository->repos_root, repository->uuid,
- pool));
- repository->fs = svn_repos_fs(repository->repos);
-
- /* Reset the REPOS pointer as soon as the REPOS will be returned to the
- REPOS_POOL. */
- apr_pool_cleanup_register(pool, repository, reset_repos,
- apr_pool_cleanup_null);
-
- /* Configure svn_repos object */
- SVN_ERR(svn_repos_remember_client_capabilities(repository->repos,
- repository->capabilities));
- SVN_ERR(svn_repos_hooks_setenv(repository->repos, repository->hooks_env,
- pool));
-
- warn_baton->server = connection->baton;
- warn_baton->conn = connection->conn;
- svn_fs_set_warning_func(connection->baton->repository->fs,
- fs_warning_func, &warn_baton);
-
- return SVN_NO_ERROR;
-}
-
svn_error_t *
serve_interruptable(svn_boolean_t *terminate_p,
connection_t *connection,
@@ -3964,14 +3904,8 @@ serve_interruptable(svn_boolean_t *termi
for (command = main_commands; command->cmdname; command++)
svn_hash_sets(cmd_hash, command->cmdname, command);
- /* Auto-initialize connection & open repository */
- if (connection->conn)
- {
- /* This is not the first call for CONNECTION. */
- if (connection->baton->repository->repos == NULL)
- err = reopen_repos(connection, pool);
- }
- else
+ /* Auto-initialize connection */
+ if (! connection->conn)
{
apr_status_t ar;
Modified: subversion/branches/remote-only-status/subversion/svnserve/server.h
URL: http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/svnserve/server.h?rev=1583338&r1=1583337&r2=1583338&view=diff
==============================================================================
--- subversion/branches/remote-only-status/subversion/svnserve/server.h (original)
+++ subversion/branches/remote-only-status/subversion/svnserve/server.h Mon Mar 31 14:40:09 2014
@@ -128,8 +128,9 @@ typedef struct serve_params_t {
/* all authz data should be opened through this factory */
svn_repos__authz_pool_t *authz_pool;
- /* all repositories should be opened through this factory */
- svn_repos__repos_pool_t *repos_pool;
+ /* The FS configuration to be applied to all repositories.
+ It mainly contains things like cache settings. */
+ apr_hash_t *fs_config;
/* Username case normalization style. */
enum username_case_type username_case;
@@ -175,9 +176,6 @@ typedef struct connection_t
/* memory pool for objects with connection lifetime */
apr_pool_t *pool;
- /* source and ultimate destiny for POOL */
- svn_root_pools__t *root_pools;
-
/* Number of threads using the pool.
The pool passed to apr_thread_create can only be released when both
Modified: subversion/branches/remote-only-status/subversion/svnserve/svnserve.c
URL: http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/svnserve/svnserve.c?rev=1583338&r1=1583337&r2=1583338&view=diff
==============================================================================
--- subversion/branches/remote-only-status/subversion/svnserve/svnserve.c (original)
+++ subversion/branches/remote-only-status/subversion/svnserve/svnserve.c Mon Mar 31 14:40:09 2014
@@ -441,9 +441,9 @@ static apr_status_t redirect_stdout(void
static svn_error_t *
accept_connection(connection_t **connection,
apr_socket_t *sock,
- svn_root_pools__t *connection_pools,
serve_params_t *params,
- enum connection_handling_mode handling_mode)
+ enum connection_handling_mode handling_mode,
+ apr_pool_t *pool)
{
apr_status_t status;
@@ -451,11 +451,10 @@ accept_connection(connection_t **connect
* the connection threads so it cannot clean up after each one. So
* separate pools that can be cleared at thread exit are used. */
- apr_pool_t *pool = svn_root_pools__acquire_pool(connection_pools);
- *connection = apr_pcalloc(pool, sizeof(**connection));
- (*connection)->pool = pool;
+ apr_pool_t *connection_pool = svn_pool_create(pool);
+ *connection = apr_pcalloc(connection_pool, sizeof(**connection));
+ (*connection)->pool = connection_pool;
(*connection)->params = params;
- (*connection)->root_pools = connection_pools;
(*connection)->ref_count = 1;
do
@@ -465,14 +464,15 @@ accept_connection(connection_t **connect
exit(0);
#endif
- status = apr_socket_accept(&(*connection)->usock, sock, pool);
+ status = apr_socket_accept(&(*connection)->usock, sock,
+ connection_pool);
if (handling_mode == connection_mode_fork)
{
apr_proc_t proc;
/* Collect any zombie child processes. */
while (apr_proc_wait_all_procs(&proc, NULL, NULL, APR_NOWAIT,
- pool) == APR_CHILD_DONE)
+ connection_pool) == APR_CHILD_DONE)
;
}
}
@@ -502,7 +502,7 @@ close_connection(connection_t *connectio
{
/* this will automatically close USOCK */
if (svn_atomic_dec(&connection->ref_count) == 0)
- svn_root_pools__release_pool(connection->pool, connection->root_pools);
+ svn_pool_destroy(connection->pool);
}
/* Wrapper around serve() that takes a socket instead of a connection.
@@ -638,7 +638,6 @@ sub_main(int *exit_code, int argc, const
#endif
svn_boolean_t is_multi_threaded;
enum connection_handling_mode handling_mode = CONNECTION_DEFAULT;
- apr_hash_t *fs_config = NULL;
svn_boolean_t cache_fulltexts = TRUE;
svn_boolean_t cache_txdeltas = TRUE;
svn_boolean_t cache_revprops = FALSE;
@@ -657,7 +656,6 @@ sub_main(int *exit_code, int argc, const
const char *pid_filename = NULL;
const char *log_filename = NULL;
svn_node_kind_t kind;
- svn_root_pools__t *socket_pools;
#ifdef SVN_HAVE_SASL
SVN_ERR(cyrus_init(pool));
@@ -681,7 +679,7 @@ sub_main(int *exit_code, int argc, const
params.logger = NULL;
params.config_pool = NULL;
params.authz_pool = NULL;
- params.repos_pool = NULL;
+ params.fs_config = NULL;
params.vhost = FALSE;
params.username_case = CASE_ASIS;
params.memory_cache_size = (apr_uint64_t)-1;
@@ -922,12 +920,12 @@ sub_main(int *exit_code, int argc, const
/* construct object pools */
is_multi_threaded = handling_mode == connection_mode_thread;
- fs_config = apr_hash_make(pool);
- svn_hash_sets(fs_config, SVN_FS_CONFIG_FSFS_CACHE_DELTAS,
+ params.fs_config = apr_hash_make(pool);
+ svn_hash_sets(params.fs_config, SVN_FS_CONFIG_FSFS_CACHE_DELTAS,
cache_txdeltas ? "1" :"0");
- svn_hash_sets(fs_config, SVN_FS_CONFIG_FSFS_CACHE_FULLTEXTS,
+ svn_hash_sets(params.fs_config, SVN_FS_CONFIG_FSFS_CACHE_FULLTEXTS,
cache_fulltexts ? "1" :"0");
- svn_hash_sets(fs_config, SVN_FS_CONFIG_FSFS_CACHE_REVPROPS,
+ svn_hash_sets(params.fs_config, SVN_FS_CONFIG_FSFS_CACHE_REVPROPS,
cache_revprops ? "2" :"0");
SVN_ERR(svn_repos__config_pool_create(¶ms.config_pool,
@@ -937,10 +935,6 @@ sub_main(int *exit_code, int argc, const
params.config_pool,
is_multi_threaded,
pool));
- SVN_ERR(svn_repos__repos_pool_create(¶ms.repos_pool,
- fs_config,
- is_multi_threaded,
- pool));
/* If a configuration file is specified, load it and any referenced
* password and authorization files. */
@@ -1182,10 +1176,6 @@ sub_main(int *exit_code, int argc, const
svn_cache_config_set(&settings);
}
- /* we use (and recycle) separate pools for sockets (many small ones)
- and connections (fewer but larger ones) */
- SVN_ERR(svn_root_pools__create(&socket_pools));
-
#if APR_HAS_THREADS
SVN_ERR(svn_root_pools__create(&connection_pools));
@@ -1217,8 +1207,8 @@ sub_main(int *exit_code, int argc, const
while (1)
{
connection_t *connection = NULL;
- SVN_ERR(accept_connection(&connection, sock, socket_pools, ¶ms,
- handling_mode));
+ SVN_ERR(accept_connection(&connection, sock, ¶ms, handling_mode,
+ pool));
if (run_mode == run_mode_listen_once)
{
err = serve_socket(connection, connection->pool);
@@ -1290,7 +1280,7 @@ main(int argc, const char *argv[])
return EXIT_FAILURE;
/* Create our top-level pool. */
- pool = svn_pool_create(NULL);
+ pool = apr_allocator_owner_get(svn_pool_create_allocator(TRUE));
err = sub_main(&exit_code, argc, argv, pool);
Modified: subversion/branches/remote-only-status/subversion/svnsync/svnsync.c
URL: http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/svnsync/svnsync.c?rev=1583338&r1=1583337&r2=1583338&view=diff
==============================================================================
--- subversion/branches/remote-only-status/subversion/svnsync/svnsync.c (original)
+++ subversion/branches/remote-only-status/subversion/svnsync/svnsync.c Mon Mar 31 14:40:09 2014
@@ -1342,7 +1342,7 @@ replay_rev_finished(svn_revnum_t revisio
svn_pool_clear(subpool);
- rev_str = svn_string_create(apr_psprintf(pool, "%ld", revision), subpool);
+ rev_str = svn_string_createf(subpool, "%ld", revision);
/* Ok, we're done, bring the last-merged-rev property up to date. */
SVN_ERR(svn_ra_change_rev_prop2(
Modified: subversion/branches/remote-only-status/subversion/tests/cmdline/davautocheck.sh
URL: http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/tests/cmdline/davautocheck.sh?rev=1583338&r1=1583337&r2=1583338&view=diff
==============================================================================
--- subversion/branches/remote-only-status/subversion/tests/cmdline/davautocheck.sh (original)
+++ subversion/branches/remote-only-status/subversion/tests/cmdline/davautocheck.sh Mon Mar 31 14:40:09 2014
@@ -25,7 +25,7 @@
# This script simplifies preparation of environment for Subversion client
# communicating with a server via DAV protocol. The prerequisites of such
# testing are:
-# - Subversion built using --enable-shared --enable-dso --with-apxs options,
+# - Subversion built using --enable-shared --with-apxs options,
# - Working Apache 2 HTTPD Server with the apxs program reachable through
# PATH or specified via the APXS Makefile variable or environment variable,
# - Modules dav_module and log_config_module compiled as DSO or built into
@@ -232,11 +232,11 @@ else
fi
[ -r "$MOD_DAV_SVN" ] \
- || fail "dav_svn_module not found, please use '--enable-shared --enable-dso --with-apxs' with your 'configure' script"
+ || fail "dav_svn_module not found, please use '--enable-shared --with-apxs' with your 'configure' script"
[ -r "$MOD_AUTHZ_SVN" ] \
- || fail "authz_svn_module not found, please use '--enable-shared --enable-dso --with-apxs' with your 'configure' script"
+ || fail "authz_svn_module not found, please use '--enable-shared --with-apxs' with your 'configure' script"
[ -r "$MOD_DONTDOTHAT" ] \
- || fail "dontdothat_module not found, please use '--enable-shared --enable-dso --with-apxs' with your 'configure' script"
+ || fail "dontdothat_module not found, please use '--enable-shared --with-apxs' with your 'configure' script"
for d in "$ABS_BUILDDIR"/subversion/*/.libs; do
if [ -z "$BUILDDIR_LIBRARY_PATH" ]; then
Propchange: subversion/branches/remote-only-status/subversion/tests/libsvn_fs_x/
------------------------------------------------------------------------------
Merged /subversion/trunk/subversion/tests/libsvn_fs_x:r1581845-1583335
Modified: subversion/branches/remote-only-status/subversion/tests/libsvn_fs_x/string-table-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/tests/libsvn_fs_x/string-table-test.c?rev=1583338&r1=1583337&r2=1583338&view=diff
==============================================================================
--- subversion/branches/remote-only-status/subversion/tests/libsvn_fs_x/string-table-test.c (original)
+++ subversion/branches/remote-only-status/subversion/tests/libsvn_fs_x/string-table-test.c Mon Mar 31 14:40:09 2014
@@ -171,8 +171,11 @@ large_string_table_body(svn_boolean_t do
builder = svn_fs_x__string_table_builder_create(pool);
for (i = 0; i < COUNT; ++i)
{
- strings[i] = generate_string(0x1234567876543210ull * (i + 1), 73000 + 1000 * i, pool);
- indexes[i] = svn_fs_x__string_table_builder_add(builder, strings[i]->data, strings[i]->len);
+ strings[i] = generate_string(APR_UINT64_C(0x1234567876543210) * (i + 1),
+ 73000 + 1000 * i, pool);
+ indexes[i] = svn_fs_x__string_table_builder_add(builder,
+ strings[i]->data,
+ strings[i]->len);
}
table = svn_fs_x__string_table_create(builder, pool);
@@ -210,7 +213,7 @@ many_strings_table_body(svn_boolean_t do
builder = svn_fs_x__string_table_builder_create(pool);
for (i = 0; i < COUNT; ++i)
{
- strings[i] = generate_string(0x1234567876543210ull * (i + 1),
+ strings[i] = generate_string(APR_UINT64_C(0x1234567876543210) * (i + 1),
(i * i) % 23000, pool);
indexes[i] = svn_fs_x__string_table_builder_add(builder,
strings[i]->data,
Modified: subversion/branches/remote-only-status/subversion/tests/libsvn_repos/repos-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/tests/libsvn_repos/repos-test.c?rev=1583338&r1=1583337&r2=1583338&view=diff
==============================================================================
--- subversion/branches/remote-only-status/subversion/tests/libsvn_repos/repos-test.c (original)
+++ subversion/branches/remote-only-status/subversion/tests/libsvn_repos/repos-test.c Mon Mar 31 14:40:09 2014
@@ -3327,7 +3327,6 @@ test_config_pool(const svn_test_opts_t *
svn_config_t *cfg;
apr_hash_t *sections1, *sections2;
int i;
- svn_boolean_t bvalue;
svn_fs_txn_t *txn;
svn_fs_root_t *root, *rev_root;
svn_revnum_t rev;
@@ -3515,20 +3514,6 @@ test_config_pool(const svn_test_opts_t *
svn_error_clear(err);
svn_pool_clear(subpool);
- /* as long as we keep a reference to a config, clearing the config pool
- should not invalidate that reference */
- SVN_ERR(svn_repos__config_pool_get(&cfg, NULL, config_pool,
- svn_dirent_join(wrk_dir,
- "config-pool-test1.cfg",
- pool),
- TRUE, TRUE, NULL, pool));
- svn_pool_clear(config_pool_pool);
- for (i = 0; i < 64000; ++i)
- apr_pcalloc(config_pool_pool, 80);
-
- SVN_ERR(svn_config_get_bool(cfg, &bvalue, "booleans", "true3", FALSE));
- SVN_TEST_ASSERT(bvalue);
-
return SVN_NO_ERROR;
}
Modified: subversion/branches/remote-only-status/subversion/tests/libsvn_subr/packed-data-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/tests/libsvn_subr/packed-data-test.c?rev=1583338&r1=1583337&r2=1583338&view=diff
==============================================================================
--- subversion/branches/remote-only-status/subversion/tests/libsvn_subr/packed-data-test.c (original)
+++ subversion/branches/remote-only-status/subversion/tests/libsvn_subr/packed-data-test.c Mon Mar 31 14:40:09 2014
@@ -117,14 +117,14 @@ test_uint_stream(apr_pool_t *pool)
enum { COUNT = 8 };
const apr_uint64_t values[COUNT] =
{
- 0xffffffffffffffffull,
+ APR_UINT64_MAX,
0,
- 0xffffffffffffffffull,
- 0x8000000000000000ull,
+ APR_UINT64_MAX,
+ APR_UINT64_C(0x8000000000000000),
0,
- 0x7fffffffffffffffull,
- 0x1234567890abcdefull,
- 0x0fedcba987654321ull,
+ APR_UINT64_C(0x7fffffffffffffff),
+ APR_UINT64_C(0x1234567890abcdef),
+ APR_UINT64_C(0x0fedcba987654321),
};
SVN_ERR(verify_uint_stream(values, COUNT, FALSE, pool));
@@ -176,13 +176,13 @@ test_int_stream(apr_pool_t *pool)
enum { COUNT = 7 };
const apr_int64_t values[COUNT] =
{
- 0x7fffffffffffffffll,
- -0x8000000000000000ll,
- 0,
- 0x7fffffffffffffffll,
- -0x7fffffffffffffffll,
- 0x1234567890abcdefll,
- -0x0fedcba987654321ll,
+ APR_INT64_MAX, /* extreme value */
+ APR_INT64_MIN, /* other extreme, creating maximum delta to predecessor */
+ 0, /* delta to predecessor > APR_INT64_MAX */
+ APR_INT64_MAX, /* max value, again */
+ -APR_INT64_MAX, /* _almost_ min value, almost max delta */
+ APR_INT64_C(0x1234567890abcdef), /* some arbitrary value */
+ -APR_INT64_C(0x0fedcba987654321), /* arbitrary value, different sign */
};
SVN_ERR(verify_int_stream(values, COUNT, FALSE, pool));
@@ -280,20 +280,26 @@ static const sub_record_t sub_records[SU
static const base_record_t test_data[BASE_RECORD_COUNT] =
{
{ 1, { "maximum", 7},
- 0xffffffffffffffffull, 0xffffffffffffffffull, sub_records,
- 0x7fffffffffffffffll, 0x7fffffffffffffffll, 9967, sub_records + 1,
+ APR_UINT64_MAX, APR_UINT64_MAX, sub_records,
+ APR_INT64_MAX, APR_INT64_MAX, 9967, sub_records + 1,
{ "\0\1\2\3\4\5\6\7\x8\x9\xa", 11} },
+
{ 2, { "minimum", 7},
0, 0, sub_records + 6,
- -0x8000000000000000ll, -0x8000000000000000ll, 6029, sub_records + 5,
+ APR_INT64_MIN, APR_INT64_MIN, 6029, sub_records + 5,
{ "X\0\0Y", 4} },
+
{ 3, { "mean", 4},
- 0x8000000000000000ull, 0x8000000000000000ull, sub_records + 2,
+ APR_UINT64_C(0x8000000000000000), APR_UINT64_C(0x8000000000000000),
+ sub_records + 2,
0, 0, 653, sub_records + 3,
{ "\xff\0\1\2\3\4\5\6\7\x8\x9\xa", 12} },
+
{ 4, { "random", 6},
- 0x1234567890abcdefull, 0xfedcba987654321ull, sub_records + 4,
- 0x1234567890abcdll, -0xedcba987654321ll, 7309, sub_records + 1,
+ APR_UINT64_C(0x1234567890abcdef), APR_UINT64_C(0xfedcba987654321),
+ sub_records + 4,
+ APR_INT64_C(0x1234567890abcd), APR_INT64_C(-0xedcba987654321), 7309,
+ sub_records + 1,
{ "\x80\x7f\0\1\6", 5} }
};
Modified: subversion/branches/remote-only-status/subversion/tests/libsvn_subr/string-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/tests/libsvn_subr/string-test.c?rev=1583338&r1=1583337&r2=1583338&view=diff
==============================================================================
--- subversion/branches/remote-only-status/subversion/tests/libsvn_subr/string-test.c (original)
+++ subversion/branches/remote-only-status/subversion/tests/libsvn_subr/string-test.c Mon Mar 31 14:40:09 2014
@@ -521,19 +521,19 @@ test24(apr_pool_t *pool)
SVN_TEST_ASSERT(length == 1);
SVN_TEST_STRING_ASSERT(buffer, "0");
- length = svn__i64toa(buffer, 0x8000000000000000ll);
+ length = svn__i64toa(buffer, APR_INT64_MIN);
SVN_TEST_ASSERT(length == 20);
SVN_TEST_STRING_ASSERT(buffer, "-9223372036854775808");
- length = svn__i64toa(buffer, 0x7fffffffffffffffll);
+ length = svn__i64toa(buffer, APR_INT64_MAX);
SVN_TEST_ASSERT(length == 19);
SVN_TEST_STRING_ASSERT(buffer, "9223372036854775807");
- length = svn__ui64toa(buffer, 0ull);
+ length = svn__ui64toa(buffer, 0u);
SVN_TEST_ASSERT(length == 1);
SVN_TEST_STRING_ASSERT(buffer, "0");
- length = svn__ui64toa(buffer, 0xffffffffffffffffull);
+ length = svn__ui64toa(buffer, APR_UINT64_MAX);
SVN_TEST_ASSERT(length == 20);
SVN_TEST_STRING_ASSERT(buffer, "18446744073709551615");
@@ -567,10 +567,10 @@ static svn_error_t *
test_base36(apr_pool_t *pool)
{
SVN_ERR(sub_test_base36(0, "0"));
- SVN_ERR(sub_test_base36(1234567890ull, "kf12oi"));
- SVN_ERR(sub_test_base36(0x7fffffffffffffffull, "1y2p0ij32e8e7"));
- SVN_ERR(sub_test_base36(0x8000000000000000ull, "1y2p0ij32e8e8"));
- SVN_ERR(sub_test_base36(0xffffffffffffffffull, "3w5e11264sgsf"));
+ SVN_ERR(sub_test_base36(APR_UINT64_C(1234567890), "kf12oi"));
+ SVN_ERR(sub_test_base36(APR_UINT64_C(0x7fffffffffffffff), "1y2p0ij32e8e7"));
+ SVN_ERR(sub_test_base36(APR_UINT64_C(0x8000000000000000), "1y2p0ij32e8e8"));
+ SVN_ERR(sub_test_base36(APR_UINT64_MAX, "3w5e11264sgsf"));
return SVN_NO_ERROR;
}
Modified: subversion/branches/remote-only-status/subversion/tests/libsvn_wc/conflict-data-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/tests/libsvn_wc/conflict-data-test.c?rev=1583338&r1=1583337&r2=1583338&view=diff
==============================================================================
--- subversion/branches/remote-only-status/subversion/tests/libsvn_wc/conflict-data-test.c (original)
+++ subversion/branches/remote-only-status/subversion/tests/libsvn_wc/conflict-data-test.c Mon Mar 31 14:40:09 2014
@@ -107,7 +107,7 @@ compare_conflict(const svn_wc_conflict_d
ASSERT_STR_EQ(actual->base_abspath, expected->base_abspath);
ASSERT_STR_EQ(actual->their_abspath, expected->their_abspath);
ASSERT_STR_EQ(actual->my_abspath, expected->my_abspath);
- ASSERT_STR_EQ(actual->merged_file, expected->merged_file);
+ ASSERT_STR_EQ(actual->merged_abspath, expected->merged_abspath);
ASSERT_INT_EQ(actual->operation, expected->operation);
SVN_ERR(compare_version(actual->src_left_version,
expected->src_left_version));
Modified: subversion/branches/remote-only-status/subversion/tests/svn_test_main.c
URL: http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/tests/svn_test_main.c?rev=1583338&r1=1583337&r2=1583338&view=diff
==============================================================================
--- subversion/branches/remote-only-status/subversion/tests/svn_test_main.c (original)
+++ subversion/branches/remote-only-status/subversion/tests/svn_test_main.c Mon Mar 31 14:40:09 2014
@@ -147,7 +147,29 @@ static const apr_getopt_option_t cl_opti
static svn_boolean_t skip_cleanup = FALSE;
/* All cleanup actions are registered as cleanups on this pool. */
+#if !defined(thread_local) && APR_HAS_THREADS
+
+# if __STDC_VERSION__ >= 201112 && !defined __STDC_NO_THREADS__
+# define thread_local _Thread_local
+# elif defined(WIN32) && defined(_MSC_VER)
+# define thread_local __declspec(thread)
+# elif defined(__thread)
+ /* ### Might work somewhere? */
+# define thread_local __thread
+# else
+ /* gcc defines __thread in some versions, but not all.
+ ### Who knows how to check for this?
+ ### stackoverflow recommends __GNUC__ but that breaks on
+ ### openbsd. */
+# endif
+#endif
+
+#ifdef thread_local
+#define HAVE_PER_THREAD_CLEANUP
+static thread_local apr_pool_t * cleanup_pool = NULL;
+#else
static apr_pool_t *cleanup_pool = NULL;
+#endif
/* Used by test_thread to serialize access to stdout. */
static svn_mutex__t *log_mutex = NULL;
@@ -176,6 +198,7 @@ cleanup_rmtree(void *data)
}
+
void
svn_test_add_dir_cleanup(const char *path)
{
@@ -461,15 +484,24 @@ test_thread(apr_thread_t *thread, void *
svn_boolean_t run_this_test; /* This test's mode matches DESC->MODE. */
test_params_t *params = data;
svn_atomic_t test_num;
-
- apr_pool_t *pool
+ apr_pool_t *pool;
+ apr_pool_t *thread_root
= apr_allocator_owner_get(svn_pool_create_allocator(FALSE));
+#ifdef HAVE_PER_THREAD_CLEANUP
+ cleanup_pool = svn_pool_create(thread_root);
+#endif
+
+ pool = svn_pool_create(thread_root);
+
for (test_num = svn_atomic_inc(¶ms->test_num);
test_num <= params->test_count;
test_num = svn_atomic_inc(¶ms->test_num))
{
svn_pool_clear(pool);
+#ifdef HAVE_PER_THREAD_CLEANUP
+ svn_pool_clear(cleanup_pool); /* after clearing pool*/
+#endif
desc = ¶ms->test_funcs[test_num];
skip = desc->mode == svn_test_skip;
@@ -494,8 +526,10 @@ test_thread(apr_thread_t *thread, void *
svn_error_clear(svn_mutex__unlock(log_mutex, NULL));
}
- /* release all test memory */
- svn_pool_destroy(pool);
+ svn_pool_clear(pool); /* Make sure this is cleared before cleanup_pool*/
+
+ /* Release all test memory. Possibly includes cleanup_pool */
+ svn_pool_destroy(thread_root);
/* End thread explicitly to prevent APR_INCOMPLETE return codes in
apr_thread_join(). */
Modified: subversion/branches/remote-only-status/tools/buildbot/slaves/svn-sparc-solaris/svnbuild.sh
URL: http://svn.apache.org/viewvc/subversion/branches/remote-only-status/tools/buildbot/slaves/svn-sparc-solaris/svnbuild.sh?rev=1583338&r1=1583337&r2=1583338&view=diff
==============================================================================
--- subversion/branches/remote-only-status/tools/buildbot/slaves/svn-sparc-solaris/svnbuild.sh (original)
+++ subversion/branches/remote-only-status/tools/buildbot/slaves/svn-sparc-solaris/svnbuild.sh Mon Mar 31 14:40:09 2014
@@ -23,15 +23,26 @@ set -x
echo "============ autogen.sh"
./autogen.sh || exit $?
+SVN_VER_MINOR=`awk '/define SVN_VER_MINOR/ { print $3 }' subversion/include/svn_version.h`
+
+cd ../obj
+grep obj/subversion/tests /etc/mnttab > /dev/null || mount-tmpfs
+
+if [ $SVN_VER_MINOR -eq 8 ]; then
+ # A bug causes 1.8 --enable-optimize to add -flto which isn't supported
+ OPTIONS_1_8='--disable-optimize'
+fi
+
echo "============ configure"
-./configure CC='cc -m64' \
+../build/configure CC='cc -m64 -v' \
--with-apr=/export/home/wandisco/buildbot/install \
--with-apr-util=/export/home/wandisco/buildbot/install \
--with-serf=/export/home/wandisco/buildbot/install \
--with-apxs=/export/home/wandisco/buildbot/install/bin/apxs \
--with-sqlite=/export/home/wandisco/buildbot/sqlite-amalgamation-3071501/sqlite3.c \
--enable-optimize \
- --disable-static \
+ --disable-shared \
+ $OPTIONS_1_8 \
|| exit $?
echo "============ make"
Modified: subversion/branches/remote-only-status/tools/buildbot/slaves/svn-sparc-solaris/svncheck.sh
URL: http://svn.apache.org/viewvc/subversion/branches/remote-only-status/tools/buildbot/slaves/svn-sparc-solaris/svncheck.sh?rev=1583338&r1=1583337&r2=1583338&view=diff
==============================================================================
--- subversion/branches/remote-only-status/tools/buildbot/slaves/svn-sparc-solaris/svncheck.sh (original)
+++ subversion/branches/remote-only-status/tools/buildbot/slaves/svn-sparc-solaris/svncheck.sh Mon Mar 31 14:40:09 2014
@@ -20,8 +20,17 @@
set -x
. ../svnenv.sh
-echo "============ make check"
-make check CLEANUP=1 PARALLEL=30
+SVN_VER_MINOR=`awk '/define SVN_VER_MINOR/ { print $3 }' subversion/include/svn_version.h`
+
+cd ../obj
+
+if [ $SVN_VER_MINOR -eq 9 ]; then
+ echo "============ make svnserveautocheck"
+ make svnserveautocheck CLEANUP=1 PARALLEL=30 THREADED=1
+else
+ echo "============ make check"
+ make check CLEANUP=1 PARALLEL=30 THREADED=1
+fi
# 'make check' will FAIL due to lack of UTF-8 conversion, so whitelist
# those known failures.
@@ -41,6 +50,9 @@ known="${known}|"
known="${known} svnsync_tests.py 24: copy and reencode non-UTF-8 svn:. props"
known="${known})"
+# tests.log must exist
+test -f tests.log || exit 1
+
# No FAIL other than the known ones.
egrep -v "$known" tests.log | grep '^FAIL' && exit 1
Modified: subversion/branches/remote-only-status/tools/buildbot/slaves/svn-sparc-solaris/svncleanup.sh
URL: http://svn.apache.org/viewvc/subversion/branches/remote-only-status/tools/buildbot/slaves/svn-sparc-solaris/svncleanup.sh?rev=1583338&r1=1583337&r2=1583338&view=diff
==============================================================================
--- subversion/branches/remote-only-status/tools/buildbot/slaves/svn-sparc-solaris/svncleanup.sh (original)
+++ subversion/branches/remote-only-status/tools/buildbot/slaves/svn-sparc-solaris/svncleanup.sh Mon Mar 31 14:40:09 2014
@@ -20,7 +20,11 @@
set -x
. ../svnenv.sh
+cd ../obj
+
echo "============ make extraclean"
-test -f Makefile && make extraclean || exit $?
+test -f Makefile && (make extraclean || exit $?)
+
+grep obj/subversion/tests /etc/mnttab > /dev/null && umount-tmpfs
exit 0
Modified: subversion/branches/remote-only-status/tools/dev/unix-build/Makefile.svn
URL: http://svn.apache.org/viewvc/subversion/branches/remote-only-status/tools/dev/unix-build/Makefile.svn?rev=1583338&r1=1583337&r2=1583338&view=diff
==============================================================================
--- subversion/branches/remote-only-status/tools/dev/unix-build/Makefile.svn (original)
+++ subversion/branches/remote-only-status/tools/dev/unix-build/Makefile.svn Mon Mar 31 14:40:09 2014
@@ -1443,6 +1443,7 @@ endif
echo >>$@.tmp '</Location>'
echo >>$@.tmp 'RedirectMatch permanent ^/svn-test-work/repositories/REDIRECT-PERM-(.*)$$ /svn-test-work/repositories/$$1'
echo >>$@.tmp 'RedirectMatch ^/svn-test-work/repositories/REDIRECT-TEMP-(.*)$$ /svn-test-work/repositories/$$1'
+ echo >>$@.tmp 'Include "conf/$(SVN_REL_WC)*-custom.conf"'
mv -f $@.tmp $@
.PHONY: libpath