[Stefan Sperling]
> So my vote is: leave it as is, but print a more informative error message
> suggesting to create the file (so that people don't have to post to
> users@ to be instructed to do so), and make svnadmin upgrade create it.

I guess the common case is that the source of a hotcopy is _not_ the
target of a previous hotcopy of a 1.6.x repository by 1.6.0 - 1.6.11.
In which case the following simple patch should be sufficient.  I'm not
sure if svnadmin should explain the full situation with the 1.6.0 bug.

Untested.

Peter

[[[
* subversion/libsvn_fs_fs/fs.h
  (SVN_FS_FS__MIN_CONFIG_FORMAT): New define.

* subversion/libsvn_fs_fs/fs_fs.c
  (upgrade_body): Create fsfs.conf when upgrading a repository from < 1.6.0.
  (svn_fs_fs__hotcopy): Only copy fsfs.conf if the repository is >= 1.6.0.
]]]

Index: subversion/libsvn_fs_fs/fs.h
===================================================================
--- subversion/libsvn_fs_fs/fs.h        (revision 980368)
+++ subversion/libsvn_fs_fs/fs.h        (working copy)
@@ -122,6 +122,9 @@ extern "C" {
 /* The minimum format number that stores node kinds in changed-paths lists. */
 #define SVN_FS_FS__MIN_KIND_IN_CHANGED_FORMAT 4

+/* The minimum format number that supports a db/fsfs.conf file. */
+#define SVN_FS_FS__MIN_CONFIG_FORMAT 4
+
 /* The minimum format number that supports packed revprop shards. */
 #define SVN_FS_FS__MIN_PACKED_REVPROP_FORMAT 5

Index: subversion/libsvn_fs_fs/fs_fs.c
===================================================================
--- subversion/libsvn_fs_fs/fs_fs.c     (revision 980368)
+++ subversion/libsvn_fs_fs/fs_fs.c     (working copy)
@@ -1326,6 +1326,9 @@ upgrade_body(void *baton, apr_pool_t *pool)
                                           STMT_CREATE_SCHEMA));
     }

+  if (format < SVN_FS_FS__MIN_CONFIG_FORMAT)
+    SVN_ERR(write_config(fs, pool));
+
   /* Bump the format file. */
   return write_format(format_path, SVN_FS_FS__FORMAT_NUMBER, max_files_per_dir,
                       TRUE, pool);
@@ -1503,7 +1506,8 @@ svn_fs_fs__hotcopy(const char *src_path,
   SVN_ERR(svn_io_dir_file_copy(src_path, dst_path, PATH_UUID, pool));

   /* Copy the config. */
-  SVN_ERR(svn_io_dir_file_copy(src_path, dst_path, PATH_CONFIG, pool));
+  if (format >= SVN_FS_FS__MIN_CONFIG_FORMAT)
+    SVN_ERR(svn_io_dir_file_copy(src_path, dst_path, PATH_CONFIG, pool));

   /* Copy the rep cache before copying the rev files to make sure all
      cached references will be present in the copy. */

Reply via email to