And another stab:

/**
 * Checkout a working copy from a repository.
 *
 * @param[out] result_rev
 *              If non-NULL, the value of the revision checked out form
 *              the repository [1].  (Useful when @a revision is of
 *              a kind other than #svn_opt_revision_number.)
 * @param[in] URL           The URL to checkout.
 * @param[in] peg_revision  The revision to look up URL at.
 * @param[in] revision  The revision of (URL,peg) to checkout. [2]
 * @param[in] path      Where to create the new working copy.
 * @param[in] depth
 *              Controls how many levels of file hierarchy to populate
 *              in the new working copy. If #svn_depth_unknown,
 *              then behave as for #svn_depth_infinity, except in the case
 *              of resuming a previous checkout of @a path (i.e., updating),
 *              in which case use the depth of the existing working copy.
 * @param[in] ignore_externals
 *              If @c TRUE, don't process externals definitions as part
 *              of this operation.
 *              @see SVN_PROP_EXTERNALS
 * @param[in] allow_unver_obstructions
 *              If @c TRUE, then tolerate existing
 *              unversioned items that obstruct incoming paths.  Only
 *              obstructions of the same type (file or dir) as the added
 *              item are tolerated.  The text of obstructing files is left
 *              as-is, effectively treating it as a user modification after
 *              the checkout.  Working properties of obstructing items are
 *              set equal to the base properties. <br>
(huh? "working props"? "base props"? come again?)
 *              If @c FALSE, then raise an error if there are any unversioned
 *              obstructing items.
 * @param[in] ctx
 *              The standard client context, used for authentication and
 *              notification.
 *
 * @return A pointer to an #svn_error_t of the type (this list is not
 *         exhaustive): <br>
 *         #SVN_ERR_UNSUPPORTED_FEATURE if @a URL refers to a file rather
 *           than a directory; <br>
 *         #SVN_ERR_RA_ILLEGAL_URL if @a URL does not exist; <br>
 *         #SVN_ERR_CLIENT_BAD_REVISION if @a revision is not one of
 *           #svn_opt_revision_number, #svn_opt_revision_head, or
 *           #svn_opt_revision_date. <br>
 *         If no error occurred, return #SVN_NO_ERROR.
 *
 * @since New in 1.5.
 *
 * @see #svn_depth_t <br> #svn_client_ctx_t <br> @ref clnt_revisions for
 *      a discussion of operative and peg revisions.
 */
svn_error_t *
svn_client_checkout3(svn_revnum_t *result_rev,
                     const char *URL,
                     const char *path,
                     const svn_opt_revision_t *peg_revision,
                     const svn_opt_revision_t *revision,
                     svn_depth_t depth,
                     svn_boolean_t ignore_externals,
                     svn_boolean_t allow_unver_obstructions,
                     svn_client_ctx_t *ctx,
                     apr_pool_t *scratch_pool);

[1] For the [out] parameter, can we have @param[out,optional] and
@param[out,mandatory] notations, or do we have to say "may be NULL"
in the prose?)

[2] How about introducing:

  struct svn_ra_node_t {
    const char *repos_relpath;
    svn_revnum_t peg;
  };

  struct svn_client_node_t {
    const char *path_or_URL;
    svn_opt_revision_t *peg;
  };

(that will also help make the docstrings clearer)

?

Reply via email to