Author: cmpilato
Date: Wed Apr  7 14:08:12 2010
New Revision: 931559

URL: http://svn.apache.org/viewvc?rev=931559&view=rev
Log:
Add a --pre-1.7-compatible option to 'svnadmin create', with support
for such in the repository and filesystem layers.

* subversion/include/svn_fs.h
  (SVN_FS_CONFIG_PRE_1_7_COMPATIBLE): New #define.

* subversion/libsvn_fs_fs/fs_fs.c
  (svn_fs_fs__create): Recognize the SVN_FS_CONFIG_PRE_1_7_COMPATIBLE
    option, fix the format to version 4 if it's set.

* subversion/libsvn_fs_base/fs.c
  (base_create): Recognize the SVN_FS_CONFIG_PRE_1_7_COMPATIBLE
    option, fix the format to version 4 if it's set.  While here, make
    this code block look exactly like it does in the FSFS code so future
    devs don't have to second-guess what should be an obvious change
    to both backends.

* subversion/svnadmin/main.c
  (svnadmin__pre_1_7_compatible): New enum value.
  (struct svnadmin_opt_state): Add 'pre_1_7_compatible' member.
  (subcommand_create, main, options_table, cmd_table): Support and
    handle a new --pre-1.7-compatible option in all the obvious ways.

Modified:
    subversion/trunk/subversion/include/svn_fs.h
    subversion/trunk/subversion/libsvn_fs_base/fs.c
    subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c
    subversion/trunk/subversion/svnadmin/main.c

Modified: subversion/trunk/subversion/include/svn_fs.h
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_fs.h?rev=931559&r1=931558&r2=931559&view=diff
==============================================================================
--- subversion/trunk/subversion/include/svn_fs.h (original)
+++ subversion/trunk/subversion/include/svn_fs.h Wed Apr  7 14:08:12 2010
@@ -101,6 +101,13 @@ typedef struct svn_fs_t svn_fs_t;
  * @since New in 1.6.
  */
 #define SVN_FS_CONFIG_PRE_1_6_COMPATIBLE        "pre-1.6-compatible"
+
+/** Create repository format compatible with Subversion versions
+ * earlier than 1.7.
+ *
+ * @since New in 1.7.
+ */
+#define SVN_FS_CONFIG_PRE_1_7_COMPATIBLE        "pre-1.7-compatible"
 /** @} */
 
 

Modified: subversion/trunk/subversion/libsvn_fs_base/fs.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_base/fs.c?rev=931559&r1=931558&r2=931559&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_base/fs.c (original)
+++ subversion/trunk/subversion/libsvn_fs_base/fs.c Wed Apr  7 14:08:12 2010
@@ -657,20 +657,22 @@ base_create(svn_fs_t *fs, const char *pa
   int format = SVN_FS_BASE__FORMAT_NUMBER;
   svn_error_t *svn_err;
 
-  /* See if we had an explicitly specified pre-1.5-compatible.  */
-  if (fs->config && apr_hash_get(fs->config, SVN_FS_CONFIG_PRE_1_6_COMPATIBLE,
-                                 APR_HASH_KEY_STRING))
-    format = 3;
-
-  /* See if we had an explicitly specified pre-1.5-compatible.  */
-  if (fs->config && apr_hash_get(fs->config, SVN_FS_CONFIG_PRE_1_5_COMPATIBLE,
-                                 APR_HASH_KEY_STRING))
-    format = 2;
-
-  /* See if we had an explicitly specified pre-1.4-compatible.  */
-  if (fs->config && apr_hash_get(fs->config, SVN_FS_CONFIG_PRE_1_4_COMPATIBLE,
-                                 APR_HASH_KEY_STRING))
-    format = 1;
+  /* See if compatibility with older versions was explicitly requested. */
+  if (fs->config)
+    {
+      if (apr_hash_get(fs->config, SVN_FS_CONFIG_PRE_1_4_COMPATIBLE,
+                                   APR_HASH_KEY_STRING))
+        format = 1;
+      else if (apr_hash_get(fs->config, SVN_FS_CONFIG_PRE_1_5_COMPATIBLE,
+                                        APR_HASH_KEY_STRING))
+        format = 2;
+      else if (apr_hash_get(fs->config, SVN_FS_CONFIG_PRE_1_6_COMPATIBLE,
+                                        APR_HASH_KEY_STRING))
+        format = 3;
+      else if (apr_hash_get(fs->config, SVN_FS_CONFIG_PRE_1_7_COMPATIBLE,
+                                        APR_HASH_KEY_STRING))
+        format = 4;
+    }
 
   /* Create the environment and databases. */
   svn_err = open_databases(fs, TRUE, format, path, pool);

Modified: subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c?rev=931559&r1=931558&r2=931559&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c Wed Apr  7 14:08:12 2010
@@ -6329,7 +6329,7 @@ svn_fs_fs__create(svn_fs_t *fs,
   fs_fs_data_t *ffd = fs->fsap_data;
 
   fs->path = apr_pstrdup(pool, path);
-  /* See if we had an explicitly requested pre-1.4- or pre-1.5-compatible.  */
+  /* See if compatibility with older versions was explicitly requested. */
   if (fs->config)
     {
       if (apr_hash_get(fs->config, SVN_FS_CONFIG_PRE_1_4_COMPATIBLE,
@@ -6341,6 +6341,9 @@ svn_fs_fs__create(svn_fs_t *fs,
       else if (apr_hash_get(fs->config, SVN_FS_CONFIG_PRE_1_6_COMPATIBLE,
                                         APR_HASH_KEY_STRING))
         format = 3;
+      else if (apr_hash_get(fs->config, SVN_FS_CONFIG_PRE_1_7_COMPATIBLE,
+                                        APR_HASH_KEY_STRING))
+        format = 4;
     }
   ffd->format = format;
 

Modified: subversion/trunk/subversion/svnadmin/main.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/svnadmin/main.c?rev=931559&r1=931558&r2=931559&view=diff
==============================================================================
--- subversion/trunk/subversion/svnadmin/main.c (original)
+++ subversion/trunk/subversion/svnadmin/main.c Wed Apr  7 14:08:12 2010
@@ -230,7 +230,8 @@ enum
     svnadmin__wait,
     svnadmin__pre_1_4_compatible,
     svnadmin__pre_1_5_compatible,
-    svnadmin__pre_1_6_compatible
+    svnadmin__pre_1_6_compatible,
+    svnadmin__pre_1_7_compatible
   };
 
 /* Option codes and descriptions.
@@ -316,6 +317,10 @@ static const apr_getopt_option_t options
      N_("use format compatible with Subversion versions\n"
         "                             earlier than 1.6")},
 
+    {"pre-1.7-compatible",     svnadmin__pre_1_7_compatible, 0,
+     N_("use format compatible with Subversion versions\n"
+        "                             earlier than 1.7")},
+
     {NULL}
   };
 
@@ -336,7 +341,8 @@ static const svn_opt_subcommand_desc2_t 
     "Create a new, empty repository at REPOS_PATH.\n"),
    {svnadmin__bdb_txn_nosync, svnadmin__bdb_log_keep,
     svnadmin__config_dir, svnadmin__fs_type, svnadmin__pre_1_4_compatible,
-    svnadmin__pre_1_5_compatible, svnadmin__pre_1_6_compatible } },
+    svnadmin__pre_1_5_compatible, svnadmin__pre_1_6_compatible,
+    svnadmin__pre_1_7_compatible} },
 
   {"deltify", subcommand_deltify, {0}, N_
    ("usage: svnadmin deltify [-r LOWER[:UPPER]] REPOS_PATH\n\n"
@@ -488,6 +494,7 @@ struct svnadmin_opt_state
   svn_boolean_t pre_1_4_compatible;                 /* --pre-1.4-compatible */
   svn_boolean_t pre_1_5_compatible;                 /* --pre-1.5-compatible */
   svn_boolean_t pre_1_6_compatible;                 /* --pre-1.6-compatible */
+  svn_boolean_t pre_1_7_compatible;                 /* --pre-1.7-compatible */
   svn_opt_revision_t start_revision, end_revision;  /* -r X[:Y] */
   svn_boolean_t help;                               /* --help or -? */
   svn_boolean_t version;                            /* --version */
@@ -578,6 +585,11 @@ subcommand_create(apr_getopt_t *os, void
                  APR_HASH_KEY_STRING,
                  "1");
 
+  if (opt_state->pre_1_7_compatible)
+    apr_hash_set(fs_config, SVN_FS_CONFIG_PRE_1_7_COMPATIBLE,
+                 APR_HASH_KEY_STRING,
+                 "1");
+
   SVN_ERR(svn_config_get_config(&config, opt_state->config_dir, pool));
   SVN_ERR(svn_repos_create(&repos, opt_state->repository_path,
                            NULL, NULL,
@@ -1572,6 +1584,9 @@ main(int argc, const char *argv[])
       case svnadmin__pre_1_6_compatible:
         opt_state.pre_1_6_compatible = TRUE;
         break;
+      case svnadmin__pre_1_7_compatible:
+        opt_state.pre_1_7_compatible = TRUE;
+        break;
       case svnadmin__fs_type:
         err = svn_utf_cstring_to_utf8(&opt_state.fs_type, opt_arg, pool);
         if (err)


Reply via email to