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.

danie...@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;
> +}
> 
> 

Reply via email to