Soliciting review of this, as apparently most people skipped my previous
mail which had the same entropy in a more-compressed form.
Assuming no objections I'll see about an implementation in libsvn_* and
making svnadmin consume that.
danielsh_at_apache.org wrote on Fri, Apr 05, 2013 at 14:47:38 -0000:
> Author: danielsh
> Date: Fri Apr 5 14:47:37 2013
> New Revision: 1464993
>
> URL: http://svn.apache.org/r1464993
> Log:
> 'svnadmin info': sketch the public API.
>
> Declare the new APIs:
> * subversion/include/svn_fs.h
> (svn_fs_info, svn_fs_info_t, svn_fs_info_dup): New.
>
> * subversion/include/svn_repos.h
> (svn_repos_info, svn_repos_info_t, svn_repos_info_dup): New.
> (svn_repos_capabilities): New.
>
> And provide "Not implemented" definitions:
>
> * subversion/libsvn_fs/fs-loader.c
> (svn_fs_info, svn_fs_info_dup): Dummy implementations.
>
> * subversion/libsvn_repos/repos.c
> (svn_repos_info, svn_repos_info_dup): Dummy implementations.
> (svn_repos_capabilities): Dummy implementation.
>
> 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_repos/repos.c
>
> Modified: subversion/trunk/subversion/include/svn_fs.h
> URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_fs.h?rev=1464993&r1=1464992&r2=1464993&view=diff
> ==============================================================================
> --- subversion/trunk/subversion/include/svn_fs.h (original)
> +++ subversion/trunk/subversion/include/svn_fs.h Fri Apr 5 14:47:37 2013
> @@ -2500,6 +2500,98 @@ svn_fs_verify_root(svn_fs_root_t *root,
>
> /** @} */
>
> +/**
> + * @defgroup fs_info Filesystem information subsystem
> + * @{
> + */
> +
> +/**
> + * A structure that provides some information about a filesystem.
> + * Returned by svn_fs_info().
> + *
> + * @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.8.
> + */
> +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;
> +#endif
> +
> + /** Filesystem backend (#fs_type) -specific information.
> + * @see SVN_FS_FSFS_INFO_* */
> + apr_hash_t *fsap_info;
> +
> + /** List of user-serviceable config files.
> + * Elements are dirents (as const char *). */
> + apr_array_header_t *config_files;
> +
> +} svn_fs_info_t;
> +
> +/**
> + * Set @a *info to an info struct describing @a fs.
> + *
> + * @see #svn_fs_info_t
> + *
> + * @since New in 1.8.
> + */
> +svn_error_t *
> +svn_fs_info(const svn_fs_info_t **info,
> + svn_fs_t *fs,
> + apr_pool_t *result_pool,
> + apr_pool_t *scratch_pool);
> +
> +/**
> + * Return a duplicate of @a info, allocated in @a pool. No part of the new
> + * structure will be shared with @a info.
> + *
> + * @since New in 1.8.
> + */
> +svn_fs_info_t *
> +svn_fs_info_dup(const svn_fs_info_t *info,
> + apr_pool_t *result_pool);
> +
> +/** @name FSFS-specific #svn_fs_info_t information.
> + * @since New in 1.8.
> + * @{
> + */
> +
> +/** Value: shard size (as int), or 0 if the filesystem is
> + * not currently sharded. */
> +#define SVN_FS_FSFS_INFO_SHARDED "sharded"
> +
> +/** Value: abspath to rep-cache.db, or absent if that doesn't exist.
> + @note Do not modify the db schema or tables!
> + */
> +#define SVN_FS_FSFS_INFO_REP_CACHE_PATH "rep-cache-path"
> +
> +/** The smallest revision (as #svn_revnum_t) which is not in a pack file.
> + * @note Zero (0) if (but not iff) the format does not support packing. */
> +#define SVN_FS_FSFS_INFO_MIN_UNPACKED_REV "min-unpacked-rev"
> +/** @} */
> +
> +/** @} */
>
> #ifdef __cplusplus
> }
>
> Modified: subversion/trunk/subversion/include/svn_repos.h
> URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_repos.h?rev=1464993&r1=1464992&r2=1464993&view=diff
> ==============================================================================
> --- subversion/trunk/subversion/include/svn_repos.h (original)
> +++ subversion/trunk/subversion/include/svn_repos.h Fri Apr 5 14:47:37 2013
> @@ -495,6 +495,26 @@ svn_repos_has_capability(svn_repos_t *re
> apr_pool_t *pool);
>
> /**
> + * Return a set capabilities supported by the running Subversion library and by
> + * @a repos. (Capabilities supported by this version of Subversion but not by
> + * @a repos are not listed. This may happen when svn_repos_upgrade2() has not
> + * been called after a software upgrade.)
> + *
> + * The set is represented as a hash whose keys are the set members. The values
> + * are not defined.
> + *
> + * @see svn_repos_info()
> + *
> + * @since New in 1.8.
> + */
> +svn_error_t *
> +svn_repos_capabilities(apr_hash_t **capabilities,
> + svn_repos_t *repos,
> + apr_pool_t *result_pool,
> + apr_pool_t *scratch_pool);
> +/** @} */
> +
> +/**
> * The capability of doing the right thing with merge-tracking
> * information, both storing it and responding to queries about it.
> *
> @@ -3387,6 +3407,76 @@ svn_repos_remember_client_capabilities(s
> const apr_array_header_t *capabilities);
>
>
> +
> +/** Info. **/
> +/**
> + * @defgroup repos_info Repository information subsystem
> + * @{
> + */
> +
> +/**
> + * A structure that provides some information about a repository.
> + * Returned by svn_repos_info().
> + *
> + * @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.8.
> + */
> +typedef struct svn_repos_info_t {
> +
> + /** Repository format number: an integer that increases when incompatible
> + * changes are made (such as by #svn_repos_upgrade). */
> + int repos_format;
> +
> + /** The oldest Subversion GA release that can read and write this
> + * repository. */
> + svn_version_t *supports_version;
> +
> + /** Set of basenames of hook scripts which have been installed.
> + * Keys are C strings such as "post-commit", values are undefined. */
> + apr_hash_t *hooks_enabled;
> +
> + /** Set of basenames of hook scripts which are respected by this version of
> + * Subversion. Keys are C strings such as "post-commit", values are
> + * undefined.
> + *
> + * @note Hooks are sometimes extended (e.g., by passing additional arguments
> + * to them). In the future we might extend the semantics of this hash to
> + * describe that case, for example by adding keys or defining a meaning for
> + * the values.
> + */
> + apr_hash_t *hooks_known;
> +
> + /** @see svn_fs_info(), svn_repos_fs() */
> + svn_fs_info_t *fs_info;
> +
> +} svn_repos_info_t;
> +
> +/**
> + * Set @a *info to an info struct describing @a repos.
> + *
> + * @see #svn_repos_info_t, svn_repos_capabilities()
> + *
> + * @since New in 1.8.
> + */
> +svn_error_t *
> +svn_repos_info(const svn_repos_info_t **info,
> + svn_repos_t *repos,
> + apr_pool_t *result_pool,
> + apr_pool_t *scratch_pool);
> +
> +/**
> + * Return a duplicate of @a info, allocated in @a pool. No part of the new
> + * structure will be shared with @a info.
> + *
> + * @since New in 1.8.
> + */
> +svn_repos_info_t *
> +svn_repos_info_dup(const svn_repos_info_t *info,
> + apr_pool_t *result_pool);
> +
>
> #ifdef __cplusplus
> }
>
> Modified: subversion/trunk/subversion/libsvn_fs/fs-loader.c
> URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs/fs-loader.c?rev=1464993&r1=1464992&r2=1464993&view=diff
> ==============================================================================
> --- subversion/trunk/subversion/libsvn_fs/fs-loader.c (original)
> +++ subversion/trunk/subversion/libsvn_fs/fs-loader.c Fri Apr 5 14:47:37 2013
> @@ -1590,3 +1590,24 @@ svn_fs_version(void)
> {
> SVN_VERSION_BODY;
> }
> +
> +
> +/** info **/
> +svn_error_t *
> +svn_fs_info(const svn_fs_info_t **info,
> + svn_fs_t *fs,
> + apr_pool_t *result_pool,
> + apr_pool_t *scratch_pool)
> +{
> + SVN__NOT_IMPLEMENTED();
> +}
> +
> +svn_fs_info_t *
> +svn_fs_info_dup(const svn_fs_info_t *info,
> + apr_pool_t *result_pool)
> +{
> + /* Not implemented. */
> + SVN_ERR_MALFUNCTION_NO_RETURN();
> + return NULL;
> +}
> +
>
> Modified: subversion/trunk/subversion/libsvn_repos/repos.c
> URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_repos/repos.c?rev=1464993&r1=1464992&r2=1464993&view=diff
> ==============================================================================
> --- subversion/trunk/subversion/libsvn_repos/repos.c (original)
> +++ subversion/trunk/subversion/libsvn_repos/repos.c Fri Apr 5 14:47:37 2013
> @@ -1677,6 +1677,15 @@ svn_repos_has_capability(svn_repos_t *re
> return SVN_NO_ERROR;
> }
>
> +svn_error_t *
> +svn_repos_capabilities(apr_hash_t **capabilities,
> + svn_repos_t *repos,
> + apr_pool_t *result_pool,
> + apr_pool_t *scratch_pool)
> +{
> + SVN__NOT_IMPLEMENTED();
> +}
> +
>
> svn_fs_t *
> svn_repos_fs(svn_repos_t *repos)
> @@ -2131,3 +2140,23 @@ svn_repos__fs_type(const char **fs_type,
> svn_dirent_join(repos_path, SVN_REPOS__DB_DIR, pool),
> pool);
> }
> +
> +
> +/** info **/
> +svn_error_t *
> +svn_repos_info(const svn_repos_info_t **info,
> + svn_repos_t *repos,
> + apr_pool_t *result_pool,
> + apr_pool_t *scratch_pool)
> +{
> + SVN__NOT_IMPLEMENTED();
> +}
> +
> +svn_repos_info_t *
> +svn_repos_info_dup(const svn_repos_info_t *info,
> + apr_pool_t *result_pool)
> +{
> + /* Not implemented. */
> + SVN_ERR_MALFUNCTION_NO_RETURN();
> + return NULL;
> +}
>
>
Received on 2013-04-05 16:52:47 CEST