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
   };