You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by da...@apache.org on 2013/04/06 01:05:28 UTC
svn commit: r1465153 - in /subversion/trunk/subversion: include/svn_fs.h
include/svn_repos.h libsvn_fs/fs-loader.c libsvn_fs/fs-loader.h
libsvn_fs_base/fs.c libsvn_fs_fs/fs.c libsvn_fs_fs/fs_fs.c
libsvn_fs_fs/tree.h tests/libsvn_fs/fs-test.c
Author: danielsh
Date: Fri Apr 5 23:05:27 2013
New Revision: 1465153
URL: http://svn.apache.org/r1465153
Log:
Redesign and implement "fetch filesystem info".
Introduce a new function, svn_fs_info_format(), and delete from svn_fs_info_t
members for which retrieval functions already exist.
* subversion/include/svn_fs.h
(svn_fs_info_format): New declaration.
(svn_fs_info_t): Trim some members, as described above.
* subversion/include/svn_repos.h
(svn_repos_info_format): Add cross-reference to svn_fs_info_format().
* subversion/libsvn_fs/fs-loader.c
(svn_fs_info_format): New definition.
* subversion/libsvn_fs/fs-loader.h
(fs_vtable_t.info_format): New vtable member.
* subversion/libsvn_fs_base/fs.c
(base_bdb_info_format): New function.
(fs_vtable): Wire it in.
* subversion/libsvn_fs_fs/tree.h
(svn_fs_fs__info_format): New declaration.
* subversion/libsvn_fs_fs/fs.c
(fs_vtable_t): Wire it in.
* subversion/libsvn_fs_fs/fs_fs.c
(svn_version.h): Include.
(svn_fs_fs__info_format): New definition.
* subversion/tests/libsvn_fs/fs-test.c
(svn_version.h): Include.
(test_fs_info_format): New test.
(test_funcs): Run it.
Modified:
subversion/trunk/subversion/include/svn_fs.h
subversion/trunk/subversion/include/svn_repos.h
subversion/trunk/subversion/libsvn_fs/fs-loader.c
subversion/trunk/subversion/libsvn_fs/fs-loader.h
subversion/trunk/subversion/libsvn_fs_base/fs.c
subversion/trunk/subversion/libsvn_fs_fs/fs.c
subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c
subversion/trunk/subversion/libsvn_fs_fs/tree.h
subversion/trunk/subversion/tests/libsvn_fs/fs-test.c
Modified: subversion/trunk/subversion/include/svn_fs.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_fs.h?rev=1465153&r1=1465152&r2=1465153&view=diff
==============================================================================
--- subversion/trunk/subversion/include/svn_fs.h (original)
+++ subversion/trunk/subversion/include/svn_fs.h Fri Apr 5 23:05:27 2013
@@ -2040,6 +2040,28 @@ svn_fs_youngest_rev(svn_revnum_t *younge
apr_pool_t *pool);
+/**
+ * Return filesystem format information for @a fs.
+ *
+ * Set @a *fs_format to the filesystem format number of @a fs, which is
+ * an integer that increases when incompatible changes are made (such as
+ * by #svn_fs_upgrade).
+ *
+ * Set @a *supports_version to the version number of the minimum Subversion GA
+ * release that can read and write @a fs.
+ *
+ * @see svn_repos_info_format()
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_fs_info_format(int *fs_format,
+ svn_version_t **supports_version,
+ svn_fs_t *fs,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+
/** Provide filesystem @a fs the opportunity to compress storage relating to
* associated with @a revision in filesystem @a fs. Use @a pool for all
* allocations.
@@ -2517,23 +2539,6 @@ svn_fs_verify_root(svn_fs_root_t *root,
*/
typedef struct svn_fs_info_t {
- /** @see svn_fs_type() */
- const char *fs_type;
-
- /** @see svn_fs_get_uuid() */
- const char *uuid;
-
- /** @see svn_fs_youngest_rev() */
- svn_revnum_t youngest;
-
- /** Filesystem format number: an integer that increases when incompatible
- * changes are made (such as by #svn_fs_upgrade). */
- int fs_format;
-
- /** The oldest Subversion GA release that can read and write this
- * filesystem. */
- svn_version_t *supports_version;
-
#if 0
/* Potential future feature. */
svn_boolean_t is_write_locked;
Modified: subversion/trunk/subversion/include/svn_repos.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_repos.h?rev=1465153&r1=1465152&r2=1465153&view=diff
==============================================================================
--- subversion/trunk/subversion/include/svn_repos.h (original)
+++ subversion/trunk/subversion/include/svn_repos.h Fri Apr 5 23:05:27 2013
@@ -2496,6 +2496,8 @@ svn_repos_node_from_baton(void *edit_bat
* Set @a *supports_version to the version number of the minimum Subversion GA
* release that can read and write @a repos.
*
+ * @see svn_fs_info_format()
+ *
* @since New in 1.8.
*/
svn_error_t *
Modified: subversion/trunk/subversion/libsvn_fs/fs-loader.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs/fs-loader.c?rev=1465153&r1=1465152&r2=1465153&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs/fs-loader.c (original)
+++ subversion/trunk/subversion/libsvn_fs/fs-loader.c Fri Apr 5 23:05:27 2013
@@ -1307,6 +1307,18 @@ svn_fs_youngest_rev(svn_revnum_t *younge
}
svn_error_t *
+svn_fs_info_format(int *fs_format,
+ svn_version_t **supports_version,
+ svn_fs_t *fs,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ return svn_error_trace(fs->vtable->info_format(fs_format, supports_version,
+ fs,
+ result_pool, scratch_pool));
+}
+
+svn_error_t *
svn_fs_deltify_revision(svn_fs_t *fs, svn_revnum_t revision, apr_pool_t *pool)
{
return svn_error_trace(fs->vtable->deltify(fs, revision, pool));
Modified: subversion/trunk/subversion/libsvn_fs/fs-loader.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs/fs-loader.h?rev=1465153&r1=1465152&r2=1465153&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs/fs-loader.h (original)
+++ subversion/trunk/subversion/libsvn_fs/fs-loader.h Fri Apr 5 23:05:27 2013
@@ -212,6 +212,11 @@ typedef struct fs_vtable_t
svn_fs_get_locks_callback_t get_locks_func,
void *get_locks_baton,
apr_pool_t *pool);
+ svn_error_t *(*info_format)(int *fs_format,
+ svn_version_t **supports_version,
+ svn_fs_t *fs,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
svn_error_t *(*verify_root)(svn_fs_root_t *root,
apr_pool_t *pool);
svn_error_t *(*freeze)(svn_fs_t *fs,
Modified: subversion/trunk/subversion/libsvn_fs_base/fs.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_base/fs.c?rev=1465153&r1=1465152&r2=1465153&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_base/fs.c (original)
+++ subversion/trunk/subversion/libsvn_fs_base/fs.c Fri Apr 5 23:05:27 2013
@@ -471,6 +471,46 @@ bdb_write_config(svn_fs_t *fs)
}
static svn_error_t *
+base_bdb_info_format(int *fs_format,
+ svn_version_t **supports_version,
+ svn_fs_t *fs,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ base_fs_data_t *bfd = fs->fsap_data;
+
+ *fs_format = bfd->format;
+ *supports_version = apr_palloc(result_pool, sizeof(svn_version_t));
+
+ (*supports_version)->major = SVN_VER_MAJOR;
+ (*supports_version)->minor = 0;
+ (*supports_version)->patch = 0;
+ (*supports_version)->tag = "";
+
+ switch (bfd->format)
+ {
+ case 1:
+ break;
+ case 2:
+ (*supports_version)->minor = 4;
+ break;
+ case 3:
+ (*supports_version)->minor = 5;
+ break;
+ case 4:
+ (*supports_version)->minor = 6;
+ break;
+#ifdef SVN_DEBUG
+# if SVN_FS_BASE__FORMAT_NUMBER != 4
+# error "Need to add a 'case' statement here"
+# endif
+#endif
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
base_bdb_verify_root(svn_fs_root_t *root,
apr_pool_t *scratch_pool)
{
@@ -507,6 +547,7 @@ static fs_vtable_t fs_vtable = {
svn_fs_base__unlock,
svn_fs_base__get_lock,
svn_fs_base__get_locks,
+ base_bdb_info_format,
base_bdb_verify_root,
base_bdb_freeze,
base_bdb_set_errcall,
Modified: subversion/trunk/subversion/libsvn_fs_fs/fs.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/fs.c?rev=1465153&r1=1465152&r2=1465153&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/fs.c (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/fs.c Fri Apr 5 23:05:27 2013
@@ -184,6 +184,7 @@ static fs_vtable_t fs_vtable = {
svn_fs_fs__unlock,
svn_fs_fs__get_lock,
svn_fs_fs__get_locks,
+ svn_fs_fs__info_format,
svn_fs_fs__verify_root,
fs_freeze,
fs_set_errcall
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=1465153&r1=1465152&r2=1465153&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c Fri Apr 5 23:05:27 2013
@@ -49,6 +49,7 @@
#include "svn_mergeinfo.h"
#include "svn_config.h"
#include "svn_ctype.h"
+#include "svn_version.h"
#include "fs.h"
#include "tree.h"
@@ -11466,3 +11467,48 @@ svn_fs_fs__hotcopy(svn_fs_t *src_fs,
return SVN_NO_ERROR;
}
+
+svn_error_t *
+svn_fs_fs__info_format(int *fs_format,
+ svn_version_t **supports_version,
+ svn_fs_t *fs,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ fs_fs_data_t *ffd = fs->fsap_data;
+ *fs_format = ffd->format;
+ *supports_version = apr_palloc(result_pool, sizeof(svn_version_t));
+
+ (*supports_version)->major = SVN_VER_MAJOR;
+ (*supports_version)->minor = 1;
+ (*supports_version)->patch = 0;
+ (*supports_version)->tag = "";
+
+ switch (ffd->format)
+ {
+ case 1:
+ break;
+ case 2:
+ (*supports_version)->minor = 4;
+ break;
+ case 3:
+ (*supports_version)->minor = 5;
+ break;
+ case 4:
+ (*supports_version)->minor = 6;
+ break;
+ case 5:
+ return svn_error_create(SVN_ERR_FS_UNSUPPORTED_FORMAT, NULL,
+ _("FSFS format 5 was never released"));
+ case 6:
+ (*supports_version)->minor = 8;
+ break;
+#ifdef SVN_DEBUG
+# if SVN_FS_FS__FORMAT_NUMBER != 6
+# error "Need to add a 'case' statement here"
+# endif
+#endif
+ }
+
+ return SVN_NO_ERROR;
+}
Modified: subversion/trunk/subversion/libsvn_fs_fs/tree.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/tree.h?rev=1465153&r1=1465152&r2=1465153&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/tree.h (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/tree.h Fri Apr 5 23:05:27 2013
@@ -91,6 +91,13 @@ svn_error_t *
svn_fs_fs__verify_root(svn_fs_root_t *root,
apr_pool_t *pool);
+svn_error_t *
+svn_fs_fs__info_format(int *fs_format,
+ svn_version_t **supports_version,
+ svn_fs_t *fs,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
Modified: subversion/trunk/subversion/tests/libsvn_fs/fs-test.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/libsvn_fs/fs-test.c?rev=1465153&r1=1465152&r2=1465153&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/libsvn_fs/fs-test.c (original)
+++ subversion/trunk/subversion/tests/libsvn_fs/fs-test.c Fri Apr 5 23:05:27 2013
@@ -34,6 +34,7 @@
#include "svn_checksum.h"
#include "svn_mergeinfo.h"
#include "svn_props.h"
+#include "svn_version.h"
#include "private/svn_fs_private.h"
@@ -4983,6 +4984,26 @@ filename_trailing_newline(const svn_test
return SVN_NO_ERROR;
}
+static svn_error_t *
+test_fs_info_format(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ svn_fs_t *fs;
+ int fs_format;
+ svn_version_t *supports_version;
+ svn_version_t v1_5_0 = {1, 5, 0, ""};
+ svn_test_opts_t opts2;
+
+ opts2 = *opts;
+ opts2.server_minor_version = 5;
+
+ SVN_ERR(svn_test__create_fs(&fs, "test-fs-format-info", &opts2, pool));
+ SVN_ERR(svn_fs_info_format(&fs_format, &supports_version, fs, pool, pool));
+ SVN_TEST_ASSERT(fs_format == 3); /* happens to be the same for FSFS and BDB */
+ SVN_TEST_ASSERT(svn_ver_equal(supports_version, &v1_5_0));
+
+ return SVN_NO_ERROR;
+}
/* ------------------------------------------------------------------------ */
@@ -5066,5 +5087,7 @@ struct svn_test_descriptor_t test_funcs[
"test svn_fs_delete_fs"),
SVN_TEST_OPTS_PASS(filename_trailing_newline,
"filenames with trailing \\n might be rejected"),
+ SVN_TEST_OPTS_PASS(test_fs_info_format,
+ "test svn_fs_info_format"),
SVN_TEST_NULL
};