Author: brane
Date: Mon Sep  4 13:58:26 2017
New Revision: 1807225

URL: http://svn.apache.org/viewvc?rev=1807225&view=rev
Log:
Begin adding support for multiple working copy formats.

Instead of supporting just one format, introduce a current formaat
(the default for new working copies) and a lowest supported format,
and change the way new working copies are created: instead of the
base schema defining the current format, it defines the lowest
supporting format and a series of format updates are performed
to bring it to the current shape.

* subversion/libsvn_wc/wc.h
  (SVN_WC__VERSION): Bump to 32.
  (SVN_WC__SUPPORTED_VERSION): New; set to 31, the 1.8/1.9 format.
  (SVN_WC__COMPRESSED_PRISTINES): NEw; set to 32.
  (svn_wc__upgrade_sdb): Add parameter target_format.
  (svn_wc__update_schema): New prototype.

* subversion/libsvn_wc/wc_db_private.h
  (VERIFY_USABLE_WCROOT): Check the range of supported formats.

* subversion/libsvn_wc/wc_db.c
  (init_db): Add parameter wcroot_abspath.
   Update the schema to the current format.
  (create_db): Update the call to init_db.
  (svn_wc__db_bump_format): Update the call to svn_wc__upgrade_sdb.

* subversion/libsvn_wc/wc_db_wcroot.c
  (svn_wc__db_pdh_create_wcroot): Allow the range of supported formats.

* subversion/libsvn_wc/lock.c
  (open_single): Allow the range of supported formats.

* subversion/libsvn_wc/upgrade.c: Include svn_version.h.
  (bump_to_32): New private function.
  (svn_wc__version_string_from_format): Add new mappings.
  (svn_wc__upgrade_sdb): Extract the schema-update part into ...
  (svn_wc__update_schema): ... here.
  (svn_wc__update_schema): Implement.

* subversion/libsvn_wc/wc-metadata.sql
  (STMT_CREATE_SCHEMA): Set base format to SVN_WC__SUPPORTED_FORMAT.
  (STMT_BUMP_TO_32): Update the user_version.

Modified:
    subversion/branches/better-pristines/subversion/libsvn_wc/lock.c
    subversion/branches/better-pristines/subversion/libsvn_wc/upgrade.c
    subversion/branches/better-pristines/subversion/libsvn_wc/wc-metadata.sql
    subversion/branches/better-pristines/subversion/libsvn_wc/wc.h
    subversion/branches/better-pristines/subversion/libsvn_wc/wc_db.c
    subversion/branches/better-pristines/subversion/libsvn_wc/wc_db_private.h
    subversion/branches/better-pristines/subversion/libsvn_wc/wc_db_wcroot.c

Modified: subversion/branches/better-pristines/subversion/libsvn_wc/lock.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/better-pristines/subversion/libsvn_wc/lock.c?rev=1807225&r1=1807224&r2=1807225&view=diff
==============================================================================
--- subversion/branches/better-pristines/subversion/libsvn_wc/lock.c (original)
+++ subversion/branches/better-pristines/subversion/libsvn_wc/lock.c Mon Sep  4 
13:58:26 2017
@@ -566,10 +566,12 @@ open_single(svn_wc_adm_access_t **adm_ac
     }
   SVN_ERR(err);
 
-  /* The format version must match exactly. Note that wc_db will perform
-     an auto-upgrade if allowed. If it does *not*, then it has decided a
-     manual upgrade is required and it should have raised an error.  */
-  SVN_ERR_ASSERT(wc_format == SVN_WC__VERSION);
+  /* The format version must be in the supported version range. Note
+     that wc_db will perform an auto-upgrade if allowed. If it does
+     *not*, then it has decided a manual upgrade is required and it
+     should have raised an error.  */
+  SVN_ERR_ASSERT(SVN_WC__SUPPORTED_VERSION <= wc_format
+                 && wc_format <= SVN_WC__VERSION);
 
   /* Need to create a new lock */
   SVN_ERR(adm_access_alloc(&lock, path, db, db_provided, write_lock,

Modified: subversion/branches/better-pristines/subversion/libsvn_wc/upgrade.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/better-pristines/subversion/libsvn_wc/upgrade.c?rev=1807225&r1=1807224&r2=1807225&view=diff
==============================================================================
--- subversion/branches/better-pristines/subversion/libsvn_wc/upgrade.c 
(original)
+++ subversion/branches/better-pristines/subversion/libsvn_wc/upgrade.c Mon Sep 
 4 13:58:26 2017
@@ -28,6 +28,7 @@
 #include "svn_dirent_uri.h"
 #include "svn_path.h"
 #include "svn_hash.h"
+#include "svn_version.h"
 
 #include "wc.h"
 #include "adm_files.h"
@@ -1857,6 +1858,15 @@ bump_to_31(void *baton,
 }
 
 static svn_error_t *
+bump_to_32(void *baton,
+           svn_sqlite__db_t *sdb,
+           apr_pool_t *scratch_pool)
+{
+  SVN_ERR(svn_sqlite__exec_statements(sdb, STMT_UPGRADE_TO_32));
+  return SVN_NO_ERROR;
+}
+
+static svn_error_t *
 upgrade_apply_dav_cache(svn_sqlite__db_t *sdb,
                         const char *dir_relpath,
                         apr_int64_t wc_id,
@@ -2055,21 +2065,22 @@ svn_wc__version_string_from_format(int w
       case 9: return "1.5";
       case 10: return "1.6";
       case SVN_WC__WC_NG_VERSION: return "1.7";
+      case 29: return "1.7";
+      case 31: return "1.8";
+      case 32: return "1.10";
     }
   return _("(unreleased development version)");
 }
 
+
 svn_error_t *
 svn_wc__upgrade_sdb(int *result_format,
                     const char *wcroot_abspath,
                     svn_sqlite__db_t *sdb,
                     int start_format,
+                    int target_format,
                     apr_pool_t *scratch_pool)
 {
-  struct bump_baton bb;
-
-  bb.wcroot_abspath = wcroot_abspath;
-
   if (start_format < SVN_WC__WC_NG_VERSION /* 12 */)
     return svn_error_createf(SVN_ERR_WC_UPGRADE_REQUIRED, NULL,
                              _("Working copy '%s' is too old (format %d, "
@@ -2091,100 +2102,42 @@ svn_wc__upgrade_sdb(int *result_format,
                                                     scratch_pool),
                              start_format);
 
-  /* ### need lock-out. only one upgrade at a time. note that other code
-     ### cannot use this un-upgraded database until we finish the upgrade.  */
+  if (start_format > target_format)
+    return svn_error_createf(SVN_ERR_WC_UNSUPPORTED_FORMAT, NULL,
+                             _("Working copy '%s' is already at version %s "
+                               "(format %d) and cannot be downgraded to "
+                               "version %s (format %d)"),
+                             svn_dirent_local_style(wcroot_abspath,
+                                                    scratch_pool),
+                             svn_wc__version_string_from_format(start_format),
+                             start_format,
+                             svn_wc__version_string_from_format(target_format),
+                             target_format);
 
-  /* Note: none of these have "break" statements; the fall-through is
-     intentional. */
-  switch (start_format)
-    {
-      case 19:
-        SVN_ERR(svn_sqlite__with_transaction(sdb, bump_to_20, &bb,
-                                             scratch_pool));
-        *result_format = 20;
-        /* FALLTHROUGH  */
-
-      case 20:
-        SVN_ERR(svn_sqlite__with_transaction(sdb, bump_to_21, &bb,
-                                             scratch_pool));
-        *result_format = 21;
-        /* FALLTHROUGH  */
-
-      case 21:
-        SVN_ERR(svn_sqlite__with_transaction(sdb, bump_to_22, &bb,
-                                             scratch_pool));
-        *result_format = 22;
-        /* FALLTHROUGH  */
-
-      case 22:
-        SVN_ERR(svn_sqlite__with_transaction(sdb, bump_to_23, &bb,
-                                             scratch_pool));
-        *result_format = 23;
-        /* FALLTHROUGH  */
-
-      case 23:
-        SVN_ERR(svn_sqlite__with_transaction(sdb, bump_to_24, &bb,
-                                             scratch_pool));
-        *result_format = 24;
-        /* FALLTHROUGH  */
-
-      case 24:
-        SVN_ERR(svn_sqlite__with_transaction(sdb, bump_to_25, &bb,
-                                             scratch_pool));
-        *result_format = 25;
-        /* FALLTHROUGH  */
-
-      case 25:
-        SVN_ERR(svn_sqlite__with_transaction(sdb, bump_to_26, &bb,
-                                             scratch_pool));
-        *result_format = 26;
-        /* FALLTHROUGH  */
-
-      case 26:
-        SVN_ERR(svn_sqlite__with_transaction(sdb, bump_to_27, &bb,
-                                             scratch_pool));
-        *result_format = 27;
-        /* FALLTHROUGH  */
-
-      case 27:
-        SVN_ERR(svn_sqlite__with_transaction(sdb, bump_to_28, &bb,
-                                             scratch_pool));
-        *result_format = 28;
-        /* FALLTHROUGH  */
-
-      case 28:
-        SVN_ERR(svn_sqlite__with_transaction(sdb, bump_to_29, &bb,
-                                             scratch_pool));
-        *result_format = 29;
-        /* FALLTHROUGH  */
-
-      case 29:
-        SVN_ERR(svn_sqlite__with_transaction(sdb, bump_to_30, &bb,
-                                             scratch_pool));
-        *result_format = 30;
-
-      case 30:
-        SVN_ERR(svn_sqlite__with_transaction(sdb, bump_to_31, &bb,
-                                             scratch_pool));
-        *result_format = 31;
-        /* FALLTHROUGH  */
-      /* ### future bumps go here.  */
-#if 0
-      case XXX-1:
-        /* Revamp the recording of tree conflicts.  */
-        SVN_ERR(svn_sqlite__with_transaction(sdb, bump_to_XXX, &bb,
-                                             scratch_pool));
-        *result_format = XXX;
-        /* FALLTHROUGH  */
-#endif
-      case SVN_WC__VERSION:
-        /* already upgraded */
-        *result_format = SVN_WC__VERSION;
-
-        SVN_SQLITE__WITH_LOCK(
-            svn_wc__db_install_schema_statistics(sdb, scratch_pool),
-            sdb);
-    }
+  if (target_format < SVN_WC__SUPPORTED_VERSION)
+    return svn_error_createf(SVN_ERR_WC_UNSUPPORTED_FORMAT, NULL,
+                             _("Working copy version %s (format %d) "
+                               "is not supported by client version %s."),
+                             svn_wc__version_string_from_format(target_format),
+                             target_format, SVN_VER_NUM);
+
+  if (target_format > SVN_WC__VERSION)
+    return svn_error_createf(SVN_ERR_WC_UNSUPPORTED_FORMAT, NULL,
+                             _("Working copy with format %d "
+                               "can't be created by client version %s."),
+                             target_format, SVN_VER_NUM);
+
+  /* FIXME:
+     ### need lock-out. only one upgrade at a time. note that other code
+     ### _can_ use this un-upgraded database before we finish the upgrade. */
+  /* Update the schema */
+  SVN_ERR(svn_wc__update_schema(result_format, wcroot_abspath, sdb,
+                                start_format, target_format, scratch_pool));
+
+  /* Make sure that the stats1 table is populated. */
+  SVN_SQLITE__WITH_TXN(
+      svn_wc__db_install_schema_statistics(sdb, scratch_pool),
+      sdb);
 
 #ifdef SVN_DEBUG
   if (*result_format != start_format)
@@ -2202,6 +2155,102 @@ svn_wc__upgrade_sdb(int *result_format,
 
   return SVN_NO_ERROR;
 }
+
+
+svn_error_t *
+svn_wc__update_schema(int *result_format,
+                      const char *wcroot_abspath,
+                      svn_sqlite__db_t *sdb,
+                      int start_format,
+                      int target_format,
+                      apr_pool_t *scratch_pool)
+{
+  struct bump_baton bb;
+  bb.wcroot_abspath = wcroot_abspath;
+
+  /* Repeatedly upgrade until the target format version is reached. */
+  for (*result_format = start_format;
+       *result_format < target_format;)
+    {
+      switch (*result_format)
+        {
+          case 19:
+            SVN_ERR(svn_sqlite__with_lock(sdb, bump_to_20, &bb, scratch_pool));
+            *result_format = 20;
+            break;
+
+          case 20:
+            SVN_ERR(svn_sqlite__with_lock(sdb, bump_to_21, &bb, scratch_pool));
+            *result_format = 21;
+            break;
+
+          case 21:
+            SVN_ERR(svn_sqlite__with_lock(sdb, bump_to_22, &bb, scratch_pool));
+            *result_format = 22;
+            break;
+
+          case 22:
+            SVN_ERR(svn_sqlite__with_lock(sdb, bump_to_23, &bb, scratch_pool));
+            *result_format = 23;
+            break;
+
+          case 23:
+            SVN_ERR(svn_sqlite__with_lock(sdb, bump_to_24, &bb, scratch_pool));
+            *result_format = 24;
+            break;
+
+          case 24:
+            SVN_ERR(svn_sqlite__with_lock(sdb, bump_to_25, &bb, scratch_pool));
+            *result_format = 25;
+            break;
+
+          case 25:
+            SVN_ERR(svn_sqlite__with_lock(sdb, bump_to_26, &bb, scratch_pool));
+            *result_format = 26;
+            break;
+
+          case 26:
+            SVN_ERR(svn_sqlite__with_lock(sdb, bump_to_27, &bb, scratch_pool));
+            *result_format = 27;
+            break;
+
+          case 27:
+            SVN_ERR(svn_sqlite__with_lock(sdb, bump_to_28, &bb, scratch_pool));
+            *result_format = 28;
+            break;
+
+          case 28:
+            SVN_ERR(svn_sqlite__with_lock(sdb, bump_to_29, &bb, scratch_pool));
+            *result_format = 29;
+            break;
+
+          case 29:
+            SVN_ERR(svn_sqlite__with_lock(sdb, bump_to_30, &bb, scratch_pool));
+            *result_format = 30;
+            break;
+
+          case 30:
+            SVN_ERR(svn_sqlite__with_lock(sdb, bump_to_31, &bb, scratch_pool));
+            *result_format = 31;
+            break;
+
+          case 31:
+            SVN_ERR(svn_sqlite__with_lock(sdb, bump_to_32, &bb, scratch_pool));
+            *result_format = SVN_WC__VERSION;
+            break;
+
+          /* ### future bumps go here.  */
+#if 0
+          case XXX-1:
+            SVN_ERR(svn_sqlite__with_lock(sdb, bump_to_XXX, &bb, 
scratch_pool));
+            *result_format = XXX;
+            break;
+#endif
+        }
+    }
+
+  return SVN_NO_ERROR;
+}
 
 
 /* */

Modified: 
subversion/branches/better-pristines/subversion/libsvn_wc/wc-metadata.sql
URL: 
http://svn.apache.org/viewvc/subversion/branches/better-pristines/subversion/libsvn_wc/wc-metadata.sql?rev=1807225&r1=1807224&r2=1807225&view=diff
==============================================================================
--- subversion/branches/better-pristines/subversion/libsvn_wc/wc-metadata.sql 
(original)
+++ subversion/branches/better-pristines/subversion/libsvn_wc/wc-metadata.sql 
Mon Sep  4 13:58:26 2017
@@ -228,9 +228,11 @@ CREATE TABLE WC_LOCK (
   PRIMARY KEY (wc_id, local_dir_relpath)
  );
 
-
+/* When we're creating a new working copy, the default schema creates
+   the earliest supported format.  The normal WC upgrade code is used
+   to bring the format up to SVN_WC__VERSION. */
 PRAGMA user_version =
--- define: SVN_WC__VERSION
+-- define: SVN_WC__SUPPORTED_VERSION
 ;
 
 
@@ -921,6 +923,8 @@ DROP INDEX I_ACTUAL_PARENT;
 CREATE UNIQUE INDEX I_ACTUAL_PARENT ON ACTUAL_NODE (wc_id, parent_relpath,
                                                     local_relpath);
 
+PRAGMA user_version = 32;
+
 /* ------------------------------------------------------------------------- */
 
 /* Format YYY introduces new handling for conflict information.  */

Modified: subversion/branches/better-pristines/subversion/libsvn_wc/wc.h
URL: 
http://svn.apache.org/viewvc/subversion/branches/better-pristines/subversion/libsvn_wc/wc.h?rev=1807225&r1=1807224&r2=1807225&view=diff
==============================================================================
--- subversion/branches/better-pristines/subversion/libsvn_wc/wc.h (original)
+++ subversion/branches/better-pristines/subversion/libsvn_wc/wc.h Mon Sep  4 
13:58:26 2017
@@ -160,11 +160,17 @@ extern "C" {
  * == 1.8.x shipped with format 31
  * == 1.9.x shipped with format 31
  *
+ * The bump to 32 added support for compressed pristines and pristine storage
+ * within the working copy database.
+ *
  * Please document any further format changes here.
  */
 
-#define SVN_WC__VERSION 31
+/* The default WC version created by the client. */
+#define SVN_WC__VERSION 32
 
+/* The minimum WC version supported by the client. */
+#define SVN_WC__SUPPORTED_VERSION 31
 
 /* Formats <= this have no concept of "revert text-base/props".  */
 #define SVN_WC__NO_REVERT_FILES 4
@@ -195,6 +201,10 @@ extern "C" {
    sqlite_stat1 table on opening */
 #define SVN_WC__ENSURE_STAT1_TABLE 31
 
+/* In this version, we added support for compressed and in-database
+   pristine storage. */
+#define SVN_WC__COMPRESSED_PRISTINES 32
+
 /* Return a string indicating the released version (or versions) of
  * Subversion that used WC format number WC_FORMAT, or some other
  * suitable string if no released version used WC_FORMAT.
@@ -583,7 +593,8 @@ svn_wc__internal_get_origin(svn_boolean_
                             apr_pool_t *scratch_pool);
 
 /* Upgrade the wc sqlite database given in SDB for the wc located at
-   WCROOT_ABSPATH. It's current/starting format is given by START_FORMAT.
+   WCROOT_ABSPATH. It's current/starting format is given by START_FORMAT,
+   and the intended format is given by TARGET_FORMAT.
    After the upgrade is complete (to as far as the automatic upgrade will
    perform), the resulting format is RESULT_FORMAT. All allocations are
    performed in SCRATCH_POOL.  */
@@ -592,8 +603,18 @@ svn_wc__upgrade_sdb(int *result_format,
                     const char *wcroot_abspath,
                     svn_sqlite__db_t *sdb,
                     int start_format,
+                    int target_format,
                     apr_pool_t *scratch_pool);
 
+/* The schema-update part of svn_wc__upgrade_sdb. */
+svn_error_t *
+svn_wc__update_schema(int *result_format,
+                      const char *wcroot_abspath,
+                      svn_sqlite__db_t *sdb,
+                      int start_format,
+                      int target_format,
+                      apr_pool_t *scratch_pool);
+
 /* Create a conflict skel from the old separated data */
 svn_error_t *
 svn_wc__upgrade_conflict_skel_from_raw(svn_skel_t **conflicts,

Modified: subversion/branches/better-pristines/subversion/libsvn_wc/wc_db.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/better-pristines/subversion/libsvn_wc/wc_db.c?rev=1807225&r1=1807224&r2=1807225&view=diff
==============================================================================
--- subversion/branches/better-pristines/subversion/libsvn_wc/wc_db.c (original)
+++ subversion/branches/better-pristines/subversion/libsvn_wc/wc_db.c Mon Sep  
4 13:58:26 2017
@@ -1365,9 +1365,11 @@ init_db(/* output values */
         const char *root_node_repos_relpath,
         svn_revnum_t root_node_revision,
         svn_depth_t root_node_depth,
+        const char *wcroot_abspath,
         apr_pool_t *scratch_pool)
 {
   svn_sqlite__stmt_t *stmt;
+  int result_format;
 
   /* Create the database's schema.  */
   SVN_ERR(svn_sqlite__exec_statements(db, STMT_CREATE_SCHEMA));
@@ -1375,6 +1377,11 @@ init_db(/* output values */
   SVN_ERR(svn_sqlite__exec_statements(db, STMT_CREATE_NODES_TRIGGERS));
   SVN_ERR(svn_sqlite__exec_statements(db, STMT_CREATE_EXTERNALS));
 
+  /* TODO: Parametrize the target format here. */
+  SVN_ERR(svn_wc__update_schema(&result_format, wcroot_abspath, db,
+                                SVN_WC__SUPPORTED_VERSION, SVN_WC__VERSION,
+                                scratch_pool));
+
   SVN_ERR(svn_wc__db_install_schema_statistics(db, scratch_pool));
 
   /* Insert the repository. */
@@ -1447,7 +1454,7 @@ create_db(svn_sqlite__db_t **sdb,
   SVN_SQLITE__WITH_LOCK(init_db(repos_id, wc_id,
                                 *sdb, repos_root_url, repos_uuid,
                                 root_node_repos_relpath, root_node_revision,
-                                root_node_depth, scratch_pool),
+                                root_node_depth, dir_abspath, scratch_pool),
                         *sdb);
 
   return SVN_NO_ERROR;
@@ -16046,8 +16053,9 @@ svn_wc__db_bump_format(int *result_forma
     }
 
   SVN_ERR(svn_sqlite__read_schema_version(&format, sdb, scratch_pool));
+  /* TODO: Parametrize the target format here. */
   err = svn_wc__upgrade_sdb(result_format, wcroot_abspath,
-                            sdb, format, scratch_pool);
+                            sdb, format, SVN_WC__VERSION, scratch_pool);
 
   if (err == SVN_NO_ERROR && bumped_format)
     *bumped_format = (*result_format > format);

Modified: 
subversion/branches/better-pristines/subversion/libsvn_wc/wc_db_private.h
URL: 
http://svn.apache.org/viewvc/subversion/branches/better-pristines/subversion/libsvn_wc/wc_db_private.h?rev=1807225&r1=1807224&r2=1807225&view=diff
==============================================================================
--- subversion/branches/better-pristines/subversion/libsvn_wc/wc_db_private.h 
(original)
+++ subversion/branches/better-pristines/subversion/libsvn_wc/wc_db_private.h 
Mon Sep  4 13:58:26 2017
@@ -155,7 +155,8 @@ svn_wc__db_verify_no_work(svn_sqlite__db
 /* Assert that the given WCROOT is usable.
    NOTE: the expression is multiply-evaluated!!  */
 #define VERIFY_USABLE_WCROOT(wcroot)  SVN_ERR_ASSERT(               \
-    (wcroot) != NULL && (wcroot)->format == SVN_WC__VERSION)
+    (wcroot) != NULL && (wcroot)->format <= SVN_WC__VERSION         \
+    && (wcroot)->format >= SVN_WC__SUPPORTED_VERSION)
 
 /* Check if the WCROOT is usable for light db operations such as path
    calculations */

Modified: 
subversion/branches/better-pristines/subversion/libsvn_wc/wc_db_wcroot.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/better-pristines/subversion/libsvn_wc/wc_db_wcroot.c?rev=1807225&r1=1807224&r2=1807225&view=diff
==============================================================================
--- subversion/branches/better-pristines/subversion/libsvn_wc/wc_db_wcroot.c 
(original)
+++ subversion/branches/better-pristines/subversion/libsvn_wc/wc_db_wcroot.c 
Mon Sep  4 13:58:26 2017
@@ -337,7 +337,7 @@ svn_wc__db_pdh_create_wcroot(svn_wc__db_
   /* Verify that no work items exists. If they do, then our integrity is
      suspect and, thus, we cannot upgrade this database.  */
   if (format >= SVN_WC__HAS_WORK_QUEUE &&
-      format < SVN_WC__VERSION && verify_format)
+      format < SVN_WC__SUPPORTED_VERSION && verify_format)
     {
       svn_error_t *err = svn_wc__db_verify_no_work(sdb);
       if (err)
@@ -345,7 +345,7 @@ svn_wc__db_pdh_create_wcroot(svn_wc__db_
           /* Special message for attempts to upgrade a 1.7-dev wc with
              outstanding workqueue items. */
           if (err->apr_err == SVN_ERR_WC_CLEANUP_REQUIRED
-              && format < SVN_WC__VERSION && verify_format)
+              && format < SVN_WC__SUPPORTED_VERSION && verify_format)
             err = svn_error_quick_wrap(err, _("Cleanup with an older 1.7 "
                                               "client before upgrading with "
                                               "this client"));
@@ -354,16 +354,27 @@ svn_wc__db_pdh_create_wcroot(svn_wc__db_
     }
 
   /* Auto-upgrade the SDB if possible.  */
-  if (format < SVN_WC__VERSION && verify_format)
+  if (format < SVN_WC__SUPPORTED_VERSION && verify_format)
     {
-      return svn_error_createf(SVN_ERR_WC_UPGRADE_REQUIRED, NULL,
-                               _("The working copy at '%s'\nis too old "
-                                 "(format %d) to work with client version "
-                                 "'%s' (expects format %d). You need to "
-                                 "upgrade the working copy first.\n"),
-                               svn_dirent_local_style(wcroot_abspath,
-                                                      scratch_pool),
-                               format, SVN_VERSION, SVN_WC__VERSION);
+      if (SVN_WC__SUPPORTED_VERSION == SVN_WC__VERSION)
+        return svn_error_createf(SVN_ERR_WC_UPGRADE_REQUIRED, NULL,
+                                 _("The working copy at '%s'\nis too old "
+                                   "(format %d) to work with client version "
+                                   "'%s' (expects format %d). You need "
+                                   "to upgrade the working copy first.\n"),
+                                 svn_dirent_local_style(wcroot_abspath,
+                                                        scratch_pool),
+                                 format, SVN_VERSION, SVN_WC__VERSION);
+      else
+        return svn_error_createf(SVN_ERR_WC_UPGRADE_REQUIRED, NULL,
+                                 _("The working copy at '%s'\nis too old "
+                                   "(format %d) to work with client version "
+                                   "'%s' (expects format %d to %d). You need "
+                                   "to upgrade the working copy first.\n"),
+                                 svn_dirent_local_style(wcroot_abspath,
+                                                        scratch_pool),
+                                 format, SVN_VERSION,
+                                 SVN_WC__SUPPORTED_VERSION, SVN_WC__VERSION);
     }
 
   *wcroot = apr_palloc(result_pool, sizeof(**wcroot));


Reply via email to