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 2013/10/25 14:58:10 UTC
svn commit: r1535721 - in /subversion/trunk/subversion:
include/private/svn_subr_private.h libsvn_subr/config.c
libsvn_subr/config_file.c tests/libsvn_subr/config-test.c
Author: stefan2
Date: Fri Oct 25 12:58:10 2013
New Revision: 1535721
URL: http://svn.apache.org/r1535721
Log:
Provide a simple test for the new r/o mode in config_t.
This requires the addition of private API to access internal state.
* subversion/include/private/svn_subr_private.h
(svn_config__is_read_only,
svn_config__is_expanded): declare new private API
* subversion/libsvn_subr/config.c
(svn_config__is_expanded): implement new API
* subversion/libsvn_subr/config_file.c
(svn_config__is_read_only): implement new API
* subversion/tests/libsvn_subr/config-test.c
(test_read_only_mode): new test case
(test_funcs): register it
Modified:
subversion/trunk/subversion/include/private/svn_subr_private.h
subversion/trunk/subversion/libsvn_subr/config.c
subversion/trunk/subversion/libsvn_subr/config_file.c
subversion/trunk/subversion/tests/libsvn_subr/config-test.c
Modified: subversion/trunk/subversion/include/private/svn_subr_private.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/private/svn_subr_private.h?rev=1535721&r1=1535720&r2=1535721&view=diff
==============================================================================
--- subversion/trunk/subversion/include/private/svn_subr_private.h (original)
+++ subversion/trunk/subversion/include/private/svn_subr_private.h Fri Oct 25 12:58:10 2013
@@ -469,8 +469,21 @@ svn_root_pools__release_pool(apr_pool_t
*/
/* Future attempts to modify CFG will trigger an assertion. */
-void svn_config__set_read_only(svn_config_t *cfg,
- apr_pool_t *scratch_pool);
+void
+svn_config__set_read_only(svn_config_t *cfg,
+ apr_pool_t *scratch_pool);
+
+/* Return TRUE, if CFG cannot be modified. */
+svn_boolean_t
+svn_config__is_read_only(svn_config_t *cfg);
+
+/* Return TRUE, if OPTION in SECTION in CFG exists and does not require
+ * further expansion (due to either containing no placeholders or already
+ * having been expanded). */
+svn_boolean_t
+svn_config__is_expanded(svn_config_t *cfg,
+ const char *section,
+ const char *option);
/** @} */
Modified: subversion/trunk/subversion/libsvn_subr/config.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/config.c?rev=1535721&r1=1535720&r2=1535721&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/config.c (original)
+++ subversion/trunk/subversion/libsvn_subr/config.c Fri Oct 25 12:58:10 2013
@@ -39,6 +39,7 @@
#include "config_impl.h"
#include "private/svn_dep_compat.h"
+#include "private/svn_subr_private.h"
@@ -652,6 +653,33 @@ svn_config_create_option(cfg_option_t **
*opt = o;
}
+svn_boolean_t
+svn_config__is_expanded(svn_config_t *cfg,
+ const char *section,
+ const char *option)
+{
+ cfg_option_t *opt;
+
+ if (cfg == NULL)
+ return FALSE;
+
+ /* does the option even exist? */
+ opt = find_option(cfg, section, option, NULL);
+ if (opt == NULL)
+ return FALSE;
+
+ /* already expanded? */
+ if (opt->expanded)
+ return TRUE;
+
+ /* needs expansion? */
+ if (opt->value && strchr(opt->value, '%'))
+ return FALSE;
+
+ /* no expansion necessary */
+ return TRUE;
+}
+
void
svn_config_get(svn_config_t *cfg, const char **valuep,
Modified: subversion/trunk/subversion/libsvn_subr/config_file.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/config_file.c?rev=1535721&r1=1535720&r2=1535721&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/config_file.c (original)
+++ subversion/trunk/subversion/libsvn_subr/config_file.c Fri Oct 25 12:58:10 2013
@@ -463,6 +463,12 @@ svn_config__set_read_only(svn_config_t *
cfg->read_only = TRUE;
}
+svn_boolean_t
+svn_config__is_read_only(svn_config_t *cfg)
+{
+ return cfg->read_only;
+}
+
svn_error_t *
Modified: subversion/trunk/subversion/tests/libsvn_subr/config-test.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/libsvn_subr/config-test.c?rev=1535721&r1=1535720&r2=1535721&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/libsvn_subr/config-test.c (original)
+++ subversion/trunk/subversion/tests/libsvn_subr/config-test.c Fri Oct 25 12:58:10 2013
@@ -35,6 +35,7 @@
#include "svn_error.h"
#include "svn_config.h"
+#include "private/svn_subr_private.h"
#include "../svn_test.h"
@@ -352,6 +353,37 @@ test_ignore_bom(apr_pool_t *pool)
return SVN_NO_ERROR;
}
+static svn_error_t *
+test_read_only_mode(apr_pool_t *pool)
+{
+ svn_config_t *cfg;
+ svn_config_t *cfg2;
+ const char *cfg_file;
+
+ if (!srcdir)
+ SVN_ERR(init_params(pool));
+
+ cfg_file = apr_pstrcat(pool, srcdir, "/", "config-test.cfg", (char *)NULL);
+ SVN_ERR(svn_config_read3(&cfg, cfg_file, TRUE, TRUE, FALSE, pool));
+
+ /* setting CFG to r/o mode shall toggle the r/o mode and expand values */
+
+ SVN_TEST_ASSERT(!svn_config__is_read_only(cfg));
+ SVN_TEST_ASSERT(!svn_config__is_expanded(cfg, "section1", "i"));
+
+ svn_config__set_read_only(cfg, pool);
+
+ SVN_TEST_ASSERT(svn_config__is_read_only(cfg));
+ SVN_TEST_ASSERT(svn_config__is_expanded(cfg, "section1", "i"));
+
+ /* copies should be r/w with values */
+
+ SVN_ERR(svn_config_dup(&cfg2, cfg, pool));
+ SVN_TEST_ASSERT(!svn_config__is_read_only(cfg2));
+
+ return SVN_NO_ERROR;
+}
+
/*
====================================================================
If you add a new test to this file, update this array.
@@ -375,6 +407,9 @@ struct svn_test_descriptor_t test_funcs[
"test case-sensitive option name lookup"),
SVN_TEST_PASS2(test_stream_interface,
"test svn_config_parse"),
- SVN_TEST_PASS2(test_ignore_bom, "test parsing config file with BOM"),
+ SVN_TEST_PASS2(test_ignore_bom,
+ "test parsing config file with BOM"),
+ SVN_TEST_PASS2(test_read_only_mode,
+ "test r/o mode"),
SVN_TEST_NULL
};