You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2016/11/16 18:51:16 UTC
svn commit: r1770035 - in /subversion/branches/authzperf/subversion:
include/private/svn_repos_private.h libsvn_repos/config_pool.c
svnserve/serve.c svnserve/svnserve.c tests/libsvn_repos/repos-test.c
Author: stefan2
Date: Wed Nov 16 18:51:16 2016
New Revision: 1770035
URL: http://svn.apache.org/viewvc?rev=1770035&view=rev
Log:
On the authzperf branch:
Significantly simplify the svn_repos__config_pool_t code.
Since authz uses its own parser now, the largest config files in the system
are no longer managed through this cache. In particular, we can drop the
fast-path code for in-repo config lookup -- which is still efficient but
will actually have to access the repo to get the content checksum.
Also, we drop support for case-sentive config files here; it's simply not
needed anymore for cached configs and that saves a lot of meddling behind
the scenes.
* subversion/include/private/svn_repos_private.h
(svn_repos__config_pool_t): No longer needs to be a separate struct.
(svn_repos__config_pool_get): Drop CASE_SENSITIVE parameter.
* subversion/libsvn_repos/config_pool.c
(): Remove unnecessary #includes.
(config_object_t,
in_repo_config_t,
svn_repos__config_pool_t,
getter,
setter): We cache plain svn_config_t now, so drop all wrapper support.
(auto_parse): Drop support for CASE_SENSITIVE, produce and cache normal
svn_cache_t objects.
(add_checksum,
key_by_url): Drop. We don't want the repos lookup shortcut anymore.
(find_repos_config): Remove unsupported features.
(svn_repos__config_pool_create): This is trivial now.
(svn_repos__config_pool_get): Remove unsupported features but since we
don't have a getter anymore, we must put
the shallow copy here.
* subversion/svnserve/serve.c
(load_pwdb_config,
find_repos): Update API caller.
* subversion/svnserve/svnserve.c
(sub_main): Same.
* subversion/tests/libsvn_repos/repos-test.c
(test_config_pool): Same. Note that this test works with case-insensitive
config files just as well.
Modified:
subversion/branches/authzperf/subversion/include/private/svn_repos_private.h
subversion/branches/authzperf/subversion/libsvn_repos/config_pool.c
subversion/branches/authzperf/subversion/svnserve/serve.c
subversion/branches/authzperf/subversion/svnserve/svnserve.c
subversion/branches/authzperf/subversion/tests/libsvn_repos/repos-test.c
Modified: subversion/branches/authzperf/subversion/include/private/svn_repos_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/include/private/svn_repos_private.h?rev=1770035&r1=1770034&r2=1770035&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/include/private/svn_repos_private.h (original)
+++ subversion/branches/authzperf/subversion/include/private/svn_repos_private.h Wed Nov 16 18:51:16 2016
@@ -34,6 +34,7 @@
#include "svn_editor.h"
#include "svn_config.h"
+#include "private/svn_object_pool.h"
#include "private/svn_string_private.h"
#ifdef __cplusplus
@@ -185,7 +186,7 @@ svn_repos__get_logs_compat(svn_repos_t *
* from multiple threads. Configuration objects no longer referenced by
* any user may linger for a while before being cleaned up.
*/
-typedef struct svn_repos__config_pool_t svn_repos__config_pool_t;
+typedef svn_object_pool__t svn_repos__config_pool_t;
/* Create a new configuration pool object with a lifetime determined by
* POOL and return it in *CONFIG_POOL.
@@ -203,10 +204,10 @@ svn_repos__config_pool_create(svn_repos_
* data from a local repository. CONFIG_POOL will store the configuration
* and make further callers use the same instance if the content matches.
* If KEY is not NULL, *KEY will be set to a unique ID - if available.
+ * Section and option names will be case-insensitive.
*
* If MUST_EXIST is TRUE, a missing config file is also an error, *CFG
- * is otherwise simply NULL. The CASE_SENSITIVE controls the lookup
- * behavior for section and option names alike.
+ * is otherwise simply NULL.
*
* PREFERRED_REPOS is only used if it is not NULL and PATH is a URL.
* If it matches the URL, access the repository through this object
@@ -223,7 +224,6 @@ svn_repos__config_pool_get(svn_config_t
svn_repos__config_pool_t *config_pool,
const char *path,
svn_boolean_t must_exist,
- svn_boolean_t case_sensitive,
svn_repos_t *preferred_repos,
apr_pool_t *pool);
Modified: subversion/branches/authzperf/subversion/libsvn_repos/config_pool.c
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/libsvn_repos/config_pool.c?rev=1770035&r1=1770034&r2=1770035&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/libsvn_repos/config_pool.c (original)
+++ subversion/branches/authzperf/subversion/libsvn_repos/config_pool.c Wed Nov 16 18:51:16 2016
@@ -25,15 +25,9 @@
#include "svn_checksum.h"
-#include "svn_config.h"
-#include "svn_error.h"
-#include "svn_hash.h"
#include "svn_path.h"
#include "svn_pools.h"
-#include "svn_repos.h"
-#include "private/svn_dep_compat.h"
-#include "private/svn_mutex.h"
#include "private/svn_subr_private.h"
#include "private/svn_repos_private.h"
#include "private/svn_object_pool.h"
@@ -41,94 +35,6 @@
#include "svn_private_config.h"
-/* Our wrapper structure for parsed svn_config_t* instances. All data in
- * CS_CFG and CI_CFG is expanded (to make it thread-safe) and considered
- * read-only.
- */
-typedef struct config_object_t
-{
- /* UUID of the configuration contents.
- * This is a SHA1 checksum of the parsed textual representation of CFG. */
- svn_checksum_t *key;
-
- /* Parsed and expanded configuration. At least one of the following
- * must not be NULL. */
-
- /* Case-sensitive config. May be NULL */
- svn_config_t *cs_cfg;
-
- /* Case-insensitive config. May be NULL */
- svn_config_t *ci_cfg;
-} config_object_t;
-
-
-/* Data structure used to short-circuit the repository access for configs
- * read via URL. After reading such a config successfully, we store key
- * repository information here and will validate it without actually opening
- * the repository.
- *
- * As this is only an optimization and may create many entries in
- * svn_repos__config_pool_t's IN_REPO_HASH_POOL index, we clean them up
- * once in a while.
- */
-typedef struct in_repo_config_t
-{
- /* URL used to open the configuration */
- const char *url;
-
- /* Path of the repository that contained URL */
- const char *repo_root;
-
- /* Head revision of that repository when last read */
- svn_revnum_t revision;
-
- /* Contents checksum of the file stored under URL@REVISION */
- svn_checksum_t *key;
-} in_repo_config_t;
-
-
-/* Core data structure extending the encapsulated OBJECT_POOL. All access
- * to it must be serialized using the OBJECT_POOL->MUTEX.
- *
- * To speed up URL@HEAD lookups, we maintain IN_REPO_CONFIGS as a secondary
- * hash index. It maps URLs as provided by the caller onto in_repo_config_t
- * instances. If that is still up-to-date, a further lookup into CONFIG
- * may yield the desired configuration without the need to actually open
- * the respective repository.
- *
- * Unused configurations that are kept in the IN_REPO_CONFIGS hash and may
- * be cleaned up when the hash is about to grow.
- */
-struct svn_repos__config_pool_t
-{
- svn_object_pool__t *object_pool;
-
- /* URL -> in_repo_config_t* mapping.
- * This is only a partial index and will get cleared regularly. */
- apr_hash_t *in_repo_configs;
-
- /* allocate the IN_REPO_CONFIGS index and in_repo_config_t here */
- apr_pool_t *in_repo_hash_pool;
-};
-
-
-/* Return an automatic reference to the CFG member in CONFIG that will be
- * released when POOL gets cleaned up. The case sensitivity flag in *BATON
- * selects the desired option and section name matching mode.
- */
-static void *
-getter(void *object,
- void *baton,
- apr_pool_t *pool)
-{
- config_object_t *wrapper = object;
- svn_boolean_t *case_sensitive = baton;
- svn_config_t *config = *case_sensitive ? wrapper->cs_cfg : wrapper->ci_cfg;
-
- /* we need to duplicate the root structure as it contains temp. buffers */
- return config ? svn_config__shallow_copy(config, pool) : NULL;
-}
-
/* Return a memory buffer structure allocated in POOL and containing the
* data from CHECKSUM.
*/
@@ -146,41 +52,9 @@ checksum_as_key(svn_checksum_t *checksum
return result;
}
-/* Copy the configuration from the wrapper in SOURCE to the wrapper in
- * *TARGET with the case sensitivity flag in *BATON selecting the config
- * to copy. This is usually done to add the missing case-(in)-sensitive
- * variant. Since we must hold all data in *TARGET from the same POOL,
- * a deep copy is required.
- */
-static svn_error_t *
-setter(void **target,
- void *source,
- void *baton,
- apr_pool_t *pool)
-{
- svn_boolean_t *case_sensitive = baton;
- config_object_t *target_cfg = *(config_object_t **)target;
- config_object_t *source_cfg = source;
-
- /* Maybe, we created a variant with different case sensitivity? */
- if (*case_sensitive && target_cfg->cs_cfg == NULL)
- {
- SVN_ERR(svn_config_dup(&target_cfg->cs_cfg, source_cfg->cs_cfg, pool));
- svn_config__set_read_only(target_cfg->cs_cfg, pool);
- }
- else if (!*case_sensitive && target_cfg->ci_cfg == NULL)
- {
- SVN_ERR(svn_config_dup(&target_cfg->ci_cfg, source_cfg->ci_cfg, pool));
- svn_config__set_read_only(target_cfg->ci_cfg, pool);
- }
-
- return SVN_NO_ERROR;
-}
-
/* Set *CFG to the configuration passed in as text in CONTENTS and *KEY to
* the corresponding object pool key. If no such configuration exists in
- * CONFIG_POOL, yet, parse CONTENTS and cache the result. CASE_SENSITIVE
- * controls option and section name matching.
+ * CONFIG_POOL, yet, parse CONTENTS and cache the result.
*
* RESULT_POOL determines the lifetime of the returned reference and
* SCRATCH_POOL is being used for temporary allocations.
@@ -190,12 +64,11 @@ auto_parse(svn_config_t **cfg,
svn_membuf_t **key,
svn_repos__config_pool_t *config_pool,
svn_stringbuf_t *contents,
- svn_boolean_t case_sensitive,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
svn_checksum_t *checksum;
- config_object_t *config_object;
+ svn_config_t *config;
apr_pool_t *cfg_pool;
/* calculate SHA1 over the whole file contents */
@@ -204,87 +77,31 @@ auto_parse(svn_config_t **cfg,
/* return reference to suitable config object if that already exists */
*key = checksum_as_key(checksum, result_pool);
- SVN_ERR(svn_object_pool__lookup((void **)cfg, config_pool->object_pool,
- *key, &case_sensitive, result_pool));
+ SVN_ERR(svn_object_pool__lookup((void **)cfg, config_pool,
+ *key, NULL, result_pool));
if (*cfg)
return SVN_NO_ERROR;
/* create a pool for the new config object and parse the data into it */
- cfg_pool = svn_object_pool__new_wrapper_pool(config_pool->object_pool);
+ cfg_pool = svn_object_pool__new_wrapper_pool(config_pool);
- config_object = apr_pcalloc(cfg_pool, sizeof(*config_object));
-
- SVN_ERR(svn_config_parse(case_sensitive ? &config_object->cs_cfg
- : &config_object->ci_cfg,
+ SVN_ERR(svn_config_parse(&config,
svn_stream_from_stringbuf(contents, scratch_pool),
- case_sensitive, case_sensitive, cfg_pool));
+ FALSE, FALSE, cfg_pool));
/* switch config data to r/o mode to guarantee thread-safe access */
- svn_config__set_read_only(case_sensitive ? config_object->cs_cfg
- : config_object->ci_cfg,
- cfg_pool);
+ svn_config__set_read_only(config, cfg_pool);
/* add config in pool, handle loads races and return the right config */
- SVN_ERR(svn_object_pool__insert((void **)cfg, config_pool->object_pool,
- *key, config_object, &case_sensitive,
- cfg_pool, result_pool));
-
- return SVN_NO_ERROR;
-}
-
-/* Store a URL@REVISION to CHECKSUM, REPOS_ROOT in CONFIG_POOL.
- */
-static svn_error_t *
-add_checksum(svn_repos__config_pool_t *config_pool,
- const char *url,
- const char *repos_root,
- svn_revnum_t revision,
- svn_checksum_t *checksum)
-{
- apr_size_t path_len = strlen(url);
- apr_pool_t *pool = config_pool->in_repo_hash_pool;
- in_repo_config_t *config = apr_hash_get(config_pool->in_repo_configs,
- url, path_len);
- if (config)
- {
- /* update the existing entry */
- memcpy((void *)config->key->digest, checksum->digest,
- svn_checksum_size(checksum));
- config->revision = revision;
-
- /* duplicate the string only if necessary */
- if (strcmp(config->repo_root, repos_root))
- config->repo_root = apr_pstrdup(pool, repos_root);
- }
- else
- {
- /* insert a new entry.
- * Limit memory consumption by cyclically clearing pool and hash. */
- if (2 * svn_object_pool__count(config_pool->object_pool)
- < apr_hash_count(config_pool->in_repo_configs))
- {
- svn_pool_clear(pool);
- config_pool->in_repo_configs = svn_hash__make(pool);
- }
-
- /* construct the new entry */
- config = apr_pcalloc(pool, sizeof(*config));
- config->key = svn_checksum_dup(checksum, pool);
- config->url = apr_pstrmemdup(pool, url, path_len);
- config->repo_root = apr_pstrdup(pool, repos_root);
- config->revision = revision;
-
- /* add to index */
- apr_hash_set(config_pool->in_repo_configs, url, path_len, config);
- }
+ SVN_ERR(svn_object_pool__insert((void **)cfg, config_pool, *key, config,
+ NULL, cfg_pool, result_pool));
return SVN_NO_ERROR;
}
/* Set *CFG to the configuration stored in URL@HEAD and cache it in
- * CONFIG_POOL. CASE_SENSITIVE controls
- * option and section name matching. If PREFERRED_REPOS is given,
- * use that if it also matches URL.
+ * CONFIG_POOL. If PREFERRED_REPOS is given, use that if it also matches
+ * URL.
*
* RESULT_POOL determines the lifetime of the returned reference and
* SCRATCH_POOL is being used for temporary allocations.
@@ -294,7 +111,6 @@ find_repos_config(svn_config_t **cfg,
svn_membuf_t **key,
svn_repos__config_pool_t *config_pool,
const char *url,
- svn_boolean_t case_sensitive,
svn_repos_t *preferred_repos,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
@@ -354,8 +170,8 @@ find_repos_config(svn_config_t **cfg,
if (checksum)
{
*key = checksum_as_key(checksum, scratch_pool);
- SVN_ERR(svn_object_pool__lookup((void **)cfg, config_pool->object_pool,
- *key, &case_sensitive, result_pool));
+ SVN_ERR(svn_object_pool__lookup((void **)cfg, config_pool,
+ *key, NULL, result_pool));
}
/* not parsed, yet? */
@@ -374,58 +190,10 @@ find_repos_config(svn_config_t **cfg,
(apr_size_t)length, scratch_pool));
/* handle it like ordinary file contents and cache it */
- SVN_ERR(auto_parse(cfg, key, config_pool, contents, case_sensitive,
+ SVN_ERR(auto_parse(cfg, key, config_pool, contents,
result_pool, scratch_pool));
}
- /* store the (path,rev) -> checksum mapping as well */
- if (*cfg && checksum)
- SVN_MUTEX__WITH_LOCK(svn_object_pool__mutex(config_pool->object_pool),
- add_checksum(config_pool, url, repos_root_dirent,
- youngest_rev, checksum));
-
- return SVN_NO_ERROR;
-}
-
-/* Given the URL, search the CONFIG_POOL for an entry that maps it URL to
- * a content checksum and is still up-to-date. If this could be found,
- * return the object's *KEY. Use POOL for allocations.
- *
- * Requires external serialization on CONFIG_POOL.
- *
- * Note that this is only the URL(+rev) -> Checksum lookup and does not
- * guarantee that there is actually a config object available for *KEY.
- */
-static svn_error_t *
-key_by_url(svn_membuf_t **key,
- svn_repos__config_pool_t *config_pool,
- const char *url,
- apr_pool_t *pool)
-{
- svn_error_t *err;
- svn_stringbuf_t *contents;
- apr_int64_t current;
-
- /* hash lookup url -> sha1 -> config */
- in_repo_config_t *config = svn_hash_gets(config_pool->in_repo_configs, url);
- *key = NULL;
- if (!config)
- return SVN_NO_ERROR;
-
- /* found *some* reference to a configuration.
- * Verify that it is still current. Will fail for BDB repos. */
- err = svn_stringbuf_from_file2(&contents,
- svn_dirent_join(config->repo_root,
- "db/current", pool),
- pool);
- if (!err)
- err = svn_cstring_atoi64(¤t, contents->data);
-
- if (err)
- svn_error_clear(err);
- else if (current == config->revision)
- *key = checksum_as_key(config->key, pool);
-
return SVN_NO_ERROR;
}
@@ -436,22 +204,8 @@ svn_repos__config_pool_create(svn_repos_
svn_boolean_t thread_safe,
apr_pool_t *pool)
{
- svn_repos__config_pool_t *result;
- svn_object_pool__t *object_pool;
-
- SVN_ERR(svn_object_pool__create(&object_pool, getter, setter,
- thread_safe, pool));
-
- /* construct the config pool in our private ROOT_POOL to survive POOL
- * cleanup and to prevent threading issues with the allocator */
- result = apr_pcalloc(pool, sizeof(*result));
-
- result->object_pool = object_pool;
- result->in_repo_hash_pool = svn_pool_create(pool);
- result->in_repo_configs = svn_hash__make(result->in_repo_hash_pool);
-
- *config_pool = result;
- return SVN_NO_ERROR;
+ return svn_error_trace(svn_object_pool__create(config_pool, NULL, NULL,
+ thread_safe, pool));
}
svn_error_t *
@@ -460,7 +214,6 @@ svn_repos__config_pool_get(svn_config_t
svn_repos__config_pool_t *config_pool,
const char *path,
svn_boolean_t must_exist,
- svn_boolean_t case_sensitive,
svn_repos_t *preferred_repos,
apr_pool_t *pool)
{
@@ -476,32 +229,15 @@ svn_repos__config_pool_get(svn_config_t
if (svn_path_is_url(path))
{
- /* Read config file from repository.
- * Attempt a quick lookup first. */
- SVN_MUTEX__WITH_LOCK(svn_object_pool__mutex(config_pool->object_pool),
- key_by_url(key, config_pool, path, pool));
- if (*key)
- {
- SVN_ERR(svn_object_pool__lookup((void **)cfg,
- config_pool->object_pool,
- *key, &case_sensitive, pool));
- if (*cfg)
- {
- svn_pool_destroy(scratch_pool);
- return SVN_NO_ERROR;
- }
- }
-
/* Read and cache the configuration. This may fail. */
- err = find_repos_config(cfg, key, config_pool, path, case_sensitive,
+ err = find_repos_config(cfg, key, config_pool, path,
preferred_repos, pool, scratch_pool);
if (err || !*cfg)
{
/* let the standard implementation handle all the difficult cases */
svn_error_clear(err);
- err = svn_repos__retrieve_config(cfg, path, must_exist,
- case_sensitive, pool,
- scratch_pool);
+ err = svn_repos__retrieve_config(cfg, path, must_exist, FALSE,
+ pool, scratch_pool);
}
}
else
@@ -513,18 +249,21 @@ svn_repos__config_pool_get(svn_config_t
{
/* let the standard implementation handle all the difficult cases */
svn_error_clear(err);
- err = svn_config_read3(cfg, path, must_exist, case_sensitive,
- case_sensitive, pool);
+ err = svn_config_read3(cfg, path, must_exist, FALSE, FALSE, pool);
}
else
{
/* parsing and caching will always succeed */
- err = auto_parse(cfg, key, config_pool, contents, case_sensitive,
+ err = auto_parse(cfg, key, config_pool, contents,
pool, scratch_pool);
}
}
svn_pool_destroy(scratch_pool);
- return err;
+ /* we need to duplicate the root structure as it contains temp. buffers */
+ if (*cfg)
+ *cfg = svn_config__shallow_copy(*cfg, pool);
+
+ return svn_error_trace(err);
}
Modified: subversion/branches/authzperf/subversion/svnserve/serve.c
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/svnserve/serve.c?rev=1770035&r1=1770034&r2=1770035&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/svnserve/serve.c (original)
+++ subversion/branches/authzperf/subversion/svnserve/serve.c Wed Nov 16 18:51:16 2016
@@ -227,7 +227,7 @@ load_pwdb_config(repository_t *repositor
pwdb_path = svn_dirent_join(repository->base, pwdb_path, pool);
err = svn_repos__config_pool_get(&repository->pwdb, NULL, config_pool,
- pwdb_path, TRUE, FALSE,
+ pwdb_path, TRUE,
repository->repos, pool);
if (err)
{
@@ -3702,7 +3702,7 @@ find_repos(const char *url,
SVN_ERR(svn_repos__config_pool_get(&cfg, NULL, config_pool,
svn_repos_svnserve_conf
(repository->repos, result_pool),
- FALSE, FALSE, repository->repos,
+ FALSE, repository->repos,
result_pool));
}
Modified: subversion/branches/authzperf/subversion/svnserve/svnserve.c
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/svnserve/svnserve.c?rev=1770035&r1=1770034&r2=1770035&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/svnserve/svnserve.c (original)
+++ subversion/branches/authzperf/subversion/svnserve/svnserve.c Wed Nov 16 18:51:16 2016
@@ -1061,7 +1061,6 @@ sub_main(int *exit_code, int argc, const
params.config_pool,
config_filename,
TRUE, /* must_exist */
- FALSE, /* names_case_sensitive */
NULL,
pool));
}
Modified: subversion/branches/authzperf/subversion/tests/libsvn_repos/repos-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/tests/libsvn_repos/repos-test.c?rev=1770035&r1=1770034&r2=1770035&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/tests/libsvn_repos/repos-test.c (original)
+++ subversion/branches/authzperf/subversion/tests/libsvn_repos/repos-test.c Wed Nov 16 18:51:16 2016
@@ -3932,7 +3932,7 @@ test_config_pool(const svn_test_opts_t *
svn_dirent_join(wrk_dir,
"config-pool-test1.cfg",
pool),
- TRUE, TRUE, NULL, subpool));
+ TRUE, NULL, subpool));
if (sections1 == NULL)
sections1 = cfg->sections;
@@ -3951,7 +3951,7 @@ test_config_pool(const svn_test_opts_t *
svn_dirent_join(wrk_dir,
"config-pool-test2.cfg",
pool),
- TRUE, TRUE, NULL, subpool));
+ TRUE, NULL, subpool));
SVN_TEST_ASSERT(cfg->sections == sections1);
@@ -3967,7 +3967,7 @@ test_config_pool(const svn_test_opts_t *
svn_dirent_join(wrk_dir,
"config-pool-test3.cfg",
pool),
- TRUE, TRUE, NULL, subpool));
+ TRUE, NULL, subpool));
if (sections2 == NULL)
sections2 = cfg->sections;
@@ -3997,7 +3997,7 @@ test_config_pool(const svn_test_opts_t *
svn_path_url_add_component2(
repo_root_url,
"dir/config", pool),
- TRUE, TRUE, NULL, subpool));
+ TRUE, NULL, subpool));
SVN_TEST_ASSERT(cfg->sections == sections1);
svn_pool_clear(subpool);
@@ -4015,7 +4015,7 @@ test_config_pool(const svn_test_opts_t *
svn_path_url_add_component2(
repo_root_url,
"dir/config", pool),
- TRUE, TRUE, NULL, subpool));
+ TRUE, NULL, subpool));
SVN_TEST_ASSERT(cfg->sections == sections2);
svn_pool_clear(subpool);
@@ -4025,7 +4025,7 @@ test_config_pool(const svn_test_opts_t *
repo_root_url,
"another-dir/config",
pool),
- TRUE, TRUE, NULL, subpool));
+ TRUE, NULL, subpool));
SVN_TEST_ASSERT(cfg->sections == sections1);
svn_pool_clear(subpool);
@@ -4034,14 +4034,14 @@ test_config_pool(const svn_test_opts_t *
svn_path_url_add_component2(
repo_root_url,
"dir/config", pool),
- TRUE, TRUE, NULL, subpool));
+ TRUE, NULL, subpool));
SVN_TEST_ASSERT(cfg->sections == sections2);
SVN_ERR(svn_repos__config_pool_get(&cfg, NULL, config_pool,
svn_path_url_add_component2(
repo_root_url,
"another-dir/config",
pool),
- TRUE, TRUE, NULL, subpool));
+ TRUE, NULL, subpool));
SVN_TEST_ASSERT(cfg->sections == sections1);
svn_pool_clear(subpool);
@@ -4049,10 +4049,10 @@ test_config_pool(const svn_test_opts_t *
SVN_TEST_ASSERT_ERROR(svn_repos__config_pool_get(&cfg, NULL, config_pool,
svn_path_url_add_component2(repo_root_url, "X",
pool),
- TRUE, TRUE, NULL, subpool),
+ TRUE, NULL, subpool),
SVN_ERR_ILLEGAL_TARGET);
err = svn_repos__config_pool_get(&cfg, NULL, config_pool, "X.cfg",
- TRUE, TRUE, NULL, subpool);
+ TRUE, NULL, subpool);
SVN_TEST_ASSERT(err && APR_STATUS_IS_ENOENT(err->apr_err));
svn_error_clear(err);
svn_pool_clear(subpool);