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/07/29 15:02:22 UTC

svn commit: r1508041 - in /subversion/branches/fsx: ./ subversion/ subversion/include/ subversion/libsvn_fs/ subversion/libsvn_fs_x/ subversion/svnadmin/

Author: stefan2
Date: Mon Jul 29 13:02:22 2013
New Revision: 1508041

URL: http://svn.apache.org/r1508041
Log: (empty)

Added:
    subversion/branches/fsx/subversion/libsvn_fs_x/   (props changed)
      - copied from r1508006, subversion/branches/fsfs-format7/subversion/libsvn_fs_x/
Modified:
    subversion/branches/fsx/build.conf
    subversion/branches/fsx/configure.ac
    subversion/branches/fsx/subversion/include/svn_error_codes.h
    subversion/branches/fsx/subversion/include/svn_fs.h
    subversion/branches/fsx/subversion/libsvn_fs/fs-loader.c
    subversion/branches/fsx/subversion/libsvn_fs/fs-loader.h
    subversion/branches/fsx/subversion/libsvn_fs_x/tree.c
    subversion/branches/fsx/subversion/svn_private_config.hw
    subversion/branches/fsx/subversion/svnadmin/svnadmin.c

Modified: subversion/branches/fsx/build.conf
URL: http://svn.apache.org/viewvc/subversion/branches/fsx/build.conf?rev=1508041&r1=1508040&r2=1508041&view=diff
==============================================================================
--- subversion/branches/fsx/build.conf (original)
+++ subversion/branches/fsx/build.conf Mon Jul 29 13:02:22 2013
@@ -49,6 +49,7 @@ private-includes =
 private-built-includes =
         subversion/svn_private_config.h
         subversion/libsvn_fs_fs/rep-cache-db.h
+        subversion/libsvn_fs_x/rep-cache-db.h
         subversion/libsvn_wc/wc-metadata.h
         subversion/libsvn_wc/wc-queries.h
         subversion/libsvn_wc/wc-checks.h
@@ -280,6 +281,13 @@ install = fsmod-lib
 libs = libsvn_delta libsvn_subr aprutil apriconv apr libsvn_fs_util
 msvc-static = yes
 
+[libsvn_fs_x]
+type = fs-module
+path = subversion/libsvn_fs_x
+install = fsmod-lib
+libs = libsvn_delta libsvn_subr aprutil apriconv apr libsvn_fs_util
+msvc-static = yes
+
 # Low-level grab bag of utilities
 [libsvn_fs_util]
 type = lib
@@ -407,12 +415,18 @@ msvc-libs = libhttpd.lib
 # CONSTRUCTED HEADERS
 #
 
-[rep_cache]
-description = Schema for the rep-sharing feature
+[rep_cache_fs_fs]
+description = Schema for the FSFS rep-sharing feature
 type = sql-header
 path = subversion/libsvn_fs_fs
 sources = rep-cache-db.sql
 
+[rep_cache_fs_x]
+description = Schema for the FSX rep-sharing feature
+type = sql-header
+path = subversion/libsvn_fs_x
+sources = rep-cache-db.sql
+
 [wc_queries]
 desription = Queries on the WC database
 type = sql-header
@@ -1281,7 +1295,7 @@ libs = libsvn_ra_serf libsvn_ra_local li
 [fs-libs]
 type = lib
 external-lib = $(SVN_FS_LIB_LINK)
-libs = libsvn_fs_base libsvn_fs_fs
+libs = libsvn_fs_base libsvn_fs_fs libsvn_fs_x
 
 [__ALL__]
 type = project

Modified: subversion/branches/fsx/configure.ac
URL: http://svn.apache.org/viewvc/subversion/branches/fsx/configure.ac?rev=1508041&r1=1508040&r2=1508041&view=diff
==============================================================================
--- subversion/branches/fsx/configure.ac (original)
+++ subversion/branches/fsx/configure.ac Mon Jul 29 13:02:22 2013
@@ -1390,6 +1390,12 @@ if test "$svn_enable_shared" = "no" || t
   svn_fs_lib_install_deps="install-fsmod-lib"
   svn_fs_lib_link="\$(FS_FS_LINK)"
 
+  AC_DEFINE(SVN_LIBSVN_FS_LINKS_FS_X, 1,
+      [Defined if libsvn_fs should link against libsvn_fs_x])
+  svn_fs_lib_deps="$svn_fs_lib_deps \$(FS_X_DEPS)"
+  svn_fs_lib_install_deps="$svn_fs_lib_install_deps install-fsx-lib"
+  svn_fs_lib_link="$svn_fs_lib_link \$(FS_X_LINK)"
+
   if test "$svn_lib_berkeley_db" = "yes"; then
   AC_DEFINE(SVN_LIBSVN_FS_LINKS_FS_BASE, 1,
       [Defined if libsvn_fs should link against libsvn_fs_base])

Modified: subversion/branches/fsx/subversion/include/svn_error_codes.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsx/subversion/include/svn_error_codes.h?rev=1508041&r1=1508040&r2=1508041&view=diff
==============================================================================
--- subversion/branches/fsx/subversion/include/svn_error_codes.h (original)
+++ subversion/branches/fsx/subversion/include/svn_error_codes.h Mon Jul 29 13:02:22 2013
@@ -806,6 +806,36 @@ SVN_ERROR_START
              SVN_ERR_FS_CATEGORY_START + 52,
              "Could not initialize the revprop caching infrastructure.")
 
+  /** @since New in 1.9. */
+  SVN_ERRDEF(SVN_ERR_FS_MALFORMED_TXN_ID,
+             SVN_ERR_FS_CATEGORY_START + 53,
+             "Malformed transaction ID string.")
+
+  /** @since New in 1.9. */
+  SVN_ERRDEF(SVN_ERR_FS_ITEM_INDEX_CORRUPTION,
+             SVN_ERR_FS_CATEGORY_START + 54,
+             "Corrupt index file.")
+
+  /** @since New in 1.9. */
+  SVN_ERRDEF(SVN_ERR_FS_ITEM_INDEX_REVISION,
+             SVN_ERR_FS_CATEGORY_START + 55,
+             "Revision not covered by index.")
+
+  /** @since New in 1.9. */
+  SVN_ERRDEF(SVN_ERR_FS_ITEM_INDEX_OVERFLOW,
+             SVN_ERR_FS_CATEGORY_START + 56,
+             "Item index too large for this revision.")
+
+  /** @since New in 1.9. */
+  SVN_ERRDEF(SVN_ERR_FS_CONTAINER_INDEX,
+             SVN_ERR_FS_CATEGORY_START + 57,
+             "Container index out of range.")
+
+  /** @since New in 1.9. */
+  SVN_ERRDEF(SVN_ERR_FS_ITEM_INDEX_INCONSISTENT,
+             SVN_ERR_FS_CATEGORY_START + 58,
+             "Index files are inconsistent.")
+
   /* repos errors */
 
   SVN_ERRDEF(SVN_ERR_REPOS_LOCKED,

Modified: subversion/branches/fsx/subversion/include/svn_fs.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsx/subversion/include/svn_fs.h?rev=1508041&r1=1508040&r2=1508041&view=diff
==============================================================================
--- subversion/branches/fsx/subversion/include/svn_fs.h (original)
+++ subversion/branches/fsx/subversion/include/svn_fs.h Mon Jul 29 13:02:22 2013
@@ -120,6 +120,8 @@ typedef struct svn_fs_t svn_fs_t;
 #define SVN_FS_TYPE_BDB                         "bdb"
 /** @since New in 1.1. */
 #define SVN_FS_TYPE_FSFS                        "fsfs"
+/** @since New in 1.9. */
+#define SVN_FS_TYPE_FSX                         "fsx"
 
 /** Create repository format compatible with Subversion versions
  * earlier than 1.4.
@@ -148,6 +150,18 @@ typedef struct svn_fs_t svn_fs_t;
  * @since New in 1.8.
  */
 #define SVN_FS_CONFIG_PRE_1_8_COMPATIBLE        "pre-1.8-compatible"
+
+/** Create repository format compatible with Subversion versions
+ * earlier than 1.9.  The value must be a version in the same format
+ * as #SVN_VER_NUMBER.
+ *
+ * @note The @c patch component would often be ignored, due to our forward
+ * compatibility promises within minor release lines.  It should therefore
+ * usually be set to @c 0.
+ *
+ * @since New in 1.9.
+ */
+#define SVN_FS_CONFIG_COMPATIBLE_VERSION        "compatible-version"
 /** @} */
 
 
@@ -222,6 +236,7 @@ svn_fs_set_warning_func(svn_fs_t *fs,
  *
  *   SVN_FS_TYPE_BDB   Berkeley-DB implementation
  *   SVN_FS_TYPE_FSFS  Native-filesystem implementation
+ *   SVN_FS_TYPE_FSX   Experimental filesystem implementation
  *
  * If @a fs_config is @c NULL or does not contain a value for
  * #SVN_FS_CONFIG_FS_TYPE then the default filesystem type will be used.
@@ -2662,6 +2677,32 @@ typedef struct svn_fs_fsfs_info_t {
      or svn_fs_info_dup(). */
 } svn_fs_fsfs_info_t;
 
+/**
+ * A structure that provides some information about a filesystem.
+ * Returned by svn_fs_info() for #SVN_FS_TYPE_FSX filesystems.
+ *
+ * @note Fields may be added to the end of this structure in future
+ * versions.  Therefore, users shouldn't allocate structures of this
+ * type, to preserve binary compatibility.
+ *
+ * @since New in 1.9.
+ */
+typedef struct svn_fs_fsx_info_t {
+
+  /** Filesystem backend (#fs_type), i.e., the string #SVN_FS_TYPE_FSX. */
+  const char *fs_type;
+
+  /** Shard size, always > 0. */
+  int shard_size;
+
+  /** The smallest revision which is not in a pack file. */
+  svn_revnum_t min_unpacked_rev;
+
+  /* If you add fields here, check whether you need to extend svn_fs_info()
+     or svn_fs_info_dup(). */
+
+} svn_fs_fsx_info_t;
+
 /** @see svn_fs_info()
  * @since New in 1.9. */
 typedef struct svn_fs_info_placeholder_t {

Modified: subversion/branches/fsx/subversion/libsvn_fs/fs-loader.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsx/subversion/libsvn_fs/fs-loader.c?rev=1508041&r1=1508040&r2=1508041&view=diff
==============================================================================
--- subversion/branches/fsx/subversion/libsvn_fs/fs-loader.c (original)
+++ subversion/branches/fsx/subversion/libsvn_fs/fs-loader.c Mon Jul 29 13:02:22 2013
@@ -84,6 +84,17 @@ static struct fs_type_defn base_defn =
     NULL
   };
 
+static struct fs_type_defn fsx_defn =
+  {
+    SVN_FS_TYPE_FSX, "x",
+#ifdef SVN_LIBSVN_FS_LINKS_FS_X
+    svn_fs_x__init,
+#else
+    NULL,
+#endif
+    &base_defn
+  };
+
 static struct fs_type_defn fsfs_defn =
   {
     SVN_FS_TYPE_FSFS, "fs",
@@ -92,7 +103,7 @@ static struct fs_type_defn fsfs_defn =
 #else
     NULL,
 #endif
-    &base_defn
+    &fsx_defn
   };
 
 static struct fs_type_defn *fs_modules = &fsfs_defn;

Modified: subversion/branches/fsx/subversion/libsvn_fs/fs-loader.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsx/subversion/libsvn_fs/fs-loader.h?rev=1508041&r1=1508040&r2=1508041&view=diff
==============================================================================
--- subversion/branches/fsx/subversion/libsvn_fs/fs-loader.h (original)
+++ subversion/branches/fsx/subversion/libsvn_fs/fs-loader.h Mon Jul 29 13:02:22 2013
@@ -171,6 +171,9 @@ svn_error_t *svn_fs_base__init(const svn
 svn_error_t *svn_fs_fs__init(const svn_version_t *loader_version,
                              fs_library_vtable_t **vtable,
                              apr_pool_t* common_pool);
+svn_error_t *svn_fs_x__init(const svn_version_t *loader_version,
+                            fs_library_vtable_t **vtable,
+                            apr_pool_t* common_pool);
 
 
 

Propchange: subversion/branches/fsx/subversion/libsvn_fs_x/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Mon Jul 29 13:02:22 2013
@@ -0,0 +1,11 @@
+Debug
+Release
+*.lo
+*.la
+.libs
+*.la-a
+*.o
+*~
+.*~
+rep-cache-db.h
+revprops-db.h

Propchange: subversion/branches/fsx/subversion/libsvn_fs_x/
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Mon Jul 29 13:02:22 2013
@@ -0,0 +1,78 @@
+/subversion/branches/1.5.x-r30215/subversion/libsvn_fs_x:870312
+/subversion/branches/1.7.x-fs-verify/subversion/libsvn_fs_x:1146708,1161180
+/subversion/branches/10Gb/subversion/libsvn_fs_x:1388102,1388163-1388190,1388195,1388202,1388205,1388211,1388276,1388362,1388375,1388394,1388636,1388639-1388640,1388643-1388644,1388654,1388720,1388789,1388795,1388801,1388805,1388807,1388810,1388816,1389044,1389276,1389289,1389662,1389867,1390017,1390209,1390216,1390407,1390409,1390414,1390419,1390955
+/subversion/branches/atomic-revprop/subversion/libsvn_fs_x:965046-1000689
+/subversion/branches/auto-props-sdc/subversion/libsvn_fs_x:1384106-1401643
+/subversion/branches/bdb-reverse-deltas/subversion/libsvn_fs_x:872050-872529
+/subversion/branches/cache-server/subversion/libsvn_fs_x:1458643-1476567
+/subversion/branches/diff-callbacks3/subversion/libsvn_fs_x:870059-870761
+/subversion/branches/diff-optimizations/subversion/libsvn_fs_x:1031270-1037352
+/subversion/branches/diff-optimizations-bytes/subversion/libsvn_fs_x:1037353-1067789
+/subversion/branches/dont-save-plaintext-passwords-by-default/subversion/libsvn_fs_x:870728-871118
+/subversion/branches/double-delete/subversion/libsvn_fs_x:870511-872970
+/subversion/branches/ev2-export/subversion/libsvn_fs_x:1325914,1332738,1413107
+/subversion/branches/explore-wc/subversion/libsvn_fs_x:875486,875493,875497,875507,875511,875514,875559,875580-875581,875584,875587,875611,875627,875647,875667-875668,875711-875712,875733-875734,875736,875744-875748,875751,875758,875782,875795-875796,875830,875836,875838,875842,875852,875855,875864,875870,875873,875880,875885-875888,875890,875897-875898,875905,875907-875909,875935,875943-875944,875946,875979,875982-875983,875985-875986,875990,875997
+/subversion/branches/file-externals/subversion/libsvn_fs_x:871779-873302
+/subversion/branches/fs-rep-sharing/subversion/libsvn_fs_x:869036-873803
+/subversion/branches/fsfs-pack/subversion/libsvn_fs_x:873717-874575
+/subversion/branches/gnome-keyring/subversion/libsvn_fs_x:870558-871410
+/subversion/branches/gpg-agent-password-store/subversion/libsvn_fs_x:1005036-1150766
+/subversion/branches/gtest_addition/subversion/libsvn_fs_x:1452117-1502138
+/subversion/branches/http-protocol-v2/subversion/libsvn_fs_x:874395-876041
+/subversion/branches/in-memory-cache/subversion/libsvn_fs_x:869829-871452
+/subversion/branches/in-repo-authz/subversion/libsvn_fs_x:1414342-1424779
+/subversion/branches/inheritable-props/subversion/libsvn_fs_x:1297080-1395089
+/subversion/branches/integrate-cache-item-serialization/subversion/libsvn_fs_x:1068724-1068739
+/subversion/branches/integrate-cache-membuffer/subversion/libsvn_fs_x:998649-998852
+/subversion/branches/integrate-compression-level/subversion/libsvn_fs_x:1068651-1072287
+/subversion/branches/integrate-io-improvements/subversion/libsvn_fs_x:1068684-1072297
+/subversion/branches/integrate-is-cachable/subversion/libsvn_fs_x:1072568-1074082
+/subversion/branches/integrate-partial-getter/subversion/libsvn_fs_x:1072558-1076552
+/subversion/branches/integrate-readline-speedup/subversion/libsvn_fs_x:1072553-1072555
+/subversion/branches/integrate-stream-api-extensions/subversion/libsvn_fs_x:1068695-1072516
+/subversion/branches/integrate-string-improvements/subversion/libsvn_fs_x:1068251-1190617
+/subversion/branches/integrate-txdelta-caching/subversion/libsvn_fs_x:1072541-1078213
+/subversion/branches/issue-2779-dev/subversion/libsvn_fs_x:965496-984198
+/subversion/branches/issue-2843-dev/subversion/libsvn_fs_x:871432-874179
+/subversion/branches/issue-3000/subversion/libsvn_fs_x:871713,871716-871719,871721-871726,871728,871734
+/subversion/branches/issue-3067-deleted-subtrees/subversion/libsvn_fs_x:873375-874084
+/subversion/branches/issue-3148-dev/subversion/libsvn_fs_x:875193-875204
+/subversion/branches/issue-3220-dev/subversion/libsvn_fs_x:872210-872226
+/subversion/branches/issue-3242-dev/subversion/libsvn_fs_x:879653-896436
+/subversion/branches/issue-3334-dirs/subversion/libsvn_fs_x:875156-875867
+/subversion/branches/issue-3975/subversion/libsvn_fs_x:1152931-1160746
+/subversion/branches/issue-4116-dev/subversion/libsvn_fs_x:1424719-1425040
+/subversion/branches/issue-4194-dev/subversion/libsvn_fs_x:1410507-1414880
+/subversion/branches/javahl-ra/subversion/libsvn_fs_x:991978-1494640
+/subversion/branches/kwallet/subversion/libsvn_fs_x:870785-871314
+/subversion/branches/log-g-performance/subversion/libsvn_fs_x:870941-871032
+/subversion/branches/merge-skips-obstructions/subversion/libsvn_fs_x:874525-874615
+/subversion/branches/multi-layer-moves/subversion/libsvn_fs_x:1239019-1300930
+/subversion/branches/nfc-nfd-aware-client/subversion/libsvn_fs_x:870276,870376
+/subversion/branches/node_pool/subversion/libsvn_fs_x:1304828-1305388
+/subversion/branches/performance/subversion/libsvn_fs_x:979193,980118,981087,981090,981189,981194,981287,981684,981827,982043,982355,983398,983406,983430,983474,983488,983490,983760,983764,983766,983770,984927,984973,984984,985014,985037,985046,985472,985477,985482,985487-985488,985493,985497,985500,985514,985601,985603,985606,985669,985673,985695,985697,986453,986465,986485,986491-986492,986517,986521,986605,986608,986817,986832,987865,987868-987869,987872,987886-987888,987893,988319,988898,990330,990533,990535-990537,990541,990568,990572,990574-990575,990600,990759,992899,992904,992911,993127,993141,994956,995478,995507,995603,998012,998858,999098,1001413,1001417,1004291,1022668,1022670,1022676,1022715,1022719,1025660,1025672,1027193,1027203,1027206,1027214,1027227,1028077,1028092,1028094,1028104,1028107,1028111,1028354,1029038,1029042-1029043,1029054-1029055,1029062-1029063,1029078,1029080,1029090,1029092-1029093,1029111,1029151,1029158,1029229-1029230,1029232,1029335-1029336,102
 9339-1029340,1029342,1029344,1030763,1030827,1031203,1031235,1032285,1032333,1033040,1033057,1033294,1035869,1035882,1039511,1043705,1053735,1056015,1066452,1067683,1067697-1078365
+/subversion/branches/py-tests-as-modules/subversion/libsvn_fs_x:956579-1033052
+/subversion/branches/ra_serf-digest-authn/subversion/libsvn_fs_x:875693-876404
+/subversion/branches/reintegrate-improvements/subversion/libsvn_fs_x:873853-874164
+/subversion/branches/revprop-cache/subversion/libsvn_fs_x:1298521-1326293
+/subversion/branches/revprop-packing/subversion/libsvn_fs_x:1143907,1143971,1143997,1144017,1144499,1144568,1146145
+/subversion/branches/subtree-mergeinfo/subversion/libsvn_fs_x:876734-878766
+/subversion/branches/svn-mergeinfo-enhancements/subversion/libsvn_fs_x:870119-870195,870197-870288
+/subversion/branches/svn-patch-improvements/subversion/libsvn_fs_x:918519-934609
+/subversion/branches/svn_mutex/subversion/libsvn_fs_x:1141683-1182099
+/subversion/branches/svnpatch-diff/subversion/libsvn_fs_x:865738-876477
+/subversion/branches/svnraisetc/subversion/libsvn_fs_x:874709-875149
+/subversion/branches/svnserve-logging/subversion/libsvn_fs_x:869828-870893
+/subversion/branches/tc-issue-3334/subversion/libsvn_fs_x:874697-874773
+/subversion/branches/tc-merge-notify/subversion/libsvn_fs_x:874017-874062
+/subversion/branches/tc-resolve/subversion/libsvn_fs_x:874191-874239
+/subversion/branches/tc_url_rev/subversion/libsvn_fs_x:874351-874483
+/subversion/branches/tree-conflicts/subversion/libsvn_fs_x:868291-873154
+/subversion/branches/tree-conflicts-notify/subversion/libsvn_fs_x:873926-874008
+/subversion/branches/tristate-chunked-request/subversion/libsvn_fs_x:1502394-1502681
+/subversion/branches/tweak-build-take-two/subversion/libsvn_fs_x:1424288-1425049,1425051-1425613
+/subversion/branches/uris-as-urls/subversion/libsvn_fs_x:1060426-1064427
+/subversion/branches/verify-at-commit/subversion/libsvn_fs_x:1462039-1462408
+/subversion/branches/verify-keep-going/subversion/libsvn_fs_x:1439280-1492639
+/subversion/branches/wc-collate-path/subversion/libsvn_fs_x:1402685-1480384
+/subversion/trunk/subversion/libsvn_fs_x:1414756-1507008

Modified: subversion/branches/fsx/subversion/libsvn_fs_x/tree.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsx/subversion/libsvn_fs_x/tree.c?rev=1508041&r1=1508006&r2=1508041&view=diff
==============================================================================
--- subversion/branches/fsx/subversion/libsvn_fs_x/tree.c (original)
+++ subversion/branches/fsx/subversion/libsvn_fs_x/tree.c Mon Jul 29 13:02:22 2013
@@ -4068,7 +4068,7 @@ static root_vtable_t root_vtable = {
   x_change_node_prop,
   x_props_changed,
   x_dir_entries,
-  x_dir_optimal_order,
+/*  x_dir_optimal_order,*/
   x_make_dir,
   x_copy,
   x_revision_link,

Modified: subversion/branches/fsx/subversion/svn_private_config.hw
URL: http://svn.apache.org/viewvc/subversion/branches/fsx/subversion/svn_private_config.hw?rev=1508041&r1=1508040&r2=1508041&view=diff
==============================================================================
--- subversion/branches/fsx/subversion/svn_private_config.hw (original)
+++ subversion/branches/fsx/subversion/svn_private_config.hw Mon Jul 29 13:02:22 2013
@@ -58,6 +58,9 @@
 /* Link fs fs library into the fs library */
 #define SVN_LIBSVN_FS_LINKS_FS_FS
 
+/* Link fs fs library into the fs library */
+#define SVN_LIBSVN_FS_LINKS_FS_X
+
 /* Link local repos access library to client */
 #define SVN_LIBSVN_CLIENT_LINKS_RA_LOCAL
 

Modified: subversion/branches/fsx/subversion/svnadmin/svnadmin.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsx/subversion/svnadmin/svnadmin.c?rev=1508041&r1=1508040&r2=1508041&view=diff
==============================================================================
--- subversion/branches/fsx/subversion/svnadmin/svnadmin.c (original)
+++ subversion/branches/fsx/subversion/svnadmin/svnadmin.c Mon Jul 29 13:02:22 2013
@@ -420,7 +420,7 @@ static const svn_opt_subcommand_desc2_t 
    ("usage: svnadmin pack REPOS_PATH\n\n"
     "Possibly compact the repository into a more efficient storage model.\n"
     "This may not apply to all repositories, in which case, exit.\n"),
-   {'q'} },
+   {'q', 'M'} },
 
   {"recover", subcommand_recover, {0}, N_
    ("usage: svnadmin recover REPOS_PATH\n\n"
@@ -699,18 +699,39 @@ subcommand_create(apr_getopt_t *os, void
         svn_hash_sets(fs_config, SVN_FS_CONFIG_PRE_1_6_COMPATIBLE, "1");
       if (! svn_version__at_least(opt_state->compatible_version, 1, 8, 0))
         svn_hash_sets(fs_config, SVN_FS_CONFIG_PRE_1_8_COMPATIBLE, "1");
+      /* In 1.8, we figured out that we didn't have to keep extending this
+         madness indefinitely. */
+      svn_hash_sets(fs_config, SVN_FS_CONFIG_COMPATIBLE_VERSION,
+                    apr_psprintf(pool, "%d.%d.%d%s%s",
+                                 opt_state->compatible_version->major,
+                                 opt_state->compatible_version->minor,
+                                 opt_state->compatible_version->patch,
+                                 opt_state->compatible_version->tag
+                                 ? "-" : "",
+                                 opt_state->compatible_version->tag));
     }
 
-  if (opt_state->compatible_version
-      && ! svn_version__at_least(opt_state->compatible_version, 1, 1, 0)
-      /* ### TODO: this NULL check hard-codes knowledge of the library's
-                   default fs-type value */
-      && (opt_state->fs_type == NULL
-          || !strcmp(opt_state->fs_type, SVN_FS_TYPE_FSFS)))
+  if (opt_state->compatible_version)
     {
-      return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
-                              _("Repositories compatible with 1.0.x must use "
-                                "--fs-type=bdb"));
+      if (! svn_version__at_least(opt_state->compatible_version, 1, 1, 0)
+          /* ### TODO: this NULL check hard-codes knowledge of the library's
+                       default fs-type value */
+          && (opt_state->fs_type == NULL
+              || !strcmp(opt_state->fs_type, SVN_FS_TYPE_FSFS)))
+        {
+          return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+                                  _("Repositories compatible with 1.0.x must "
+                                    "use --fs-type=bdb"));
+        }
+
+      if (! svn_version__at_least(opt_state->compatible_version, 1, 9, 0)
+          && opt_state->fs_type && !strcmp(opt_state->fs_type, SVN_FS_TYPE_FSX))
+        {
+          return svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+                                   _("Repositories compatible with 1.8.x or "
+                                     "earlier cannot use --fs-type=%s"),
+                                   SVN_FS_TYPE_FSX);
+        }
     }
 
   SVN_ERR(svn_repos_create(&repos, opt_state->repository_path,