Julian Foad wrote on Wed, Sep 22, 2010 at 09:43:26 +0100: > Hyrum Wright wrote: > > On Tue, Sep 21, 2010 at 10:25 PM, Daniel Shahaf <d...@daniel.shahaf.name> > > wrote: > > > hwri...@apache.org wrote on Fri, Sep 17, 2010 at 20:04:53 -0000: > > >> * subversion/include/svn_client.h > > >> (svn_client_cat2): Rewrite docstring (see r997639). > [...] > > >> * > > >> * A brief word on operative and peg revisions. > > >> * > > >> + * If the kind of the peg revision is #svn_opt_revision_unspecified, > > >> then it > > >> + * defaults to #svn_opt_revision_head for URLs and > > >> #svn_opt_revision_working > > >> + * for local paths. > > >> + * > > >> * For deeper insight, please see the > > >> * <a > > >> href="http://svnbook.red-bean.com/nightly/en/svn.advanced.pegrevs.html"> > > >> * Peg and Operative Revisions</a> section of the Subversion Book. > > >> @@ -4687,26 +4691,30 @@ svn_client_ls(apr_hash_t **dirents, > > >> */ > > >> > > >> /** > > >> - * Output the content of file identified by @a path_or_url and @a > > >> - * revision to the stream @a out. The actual node revision selected > > >> - * is determined by the path as it exists in @a peg_revision. If @a > > >> - * peg_revision->kind is #svn_opt_revision_unspecified, then it defaults > > >> - * to #svn_opt_revision_head for URLs or #svn_opt_revision_working > > >> - * for WC targets. > > >> - * > > >> - * If @a path_or_url is not a local path, then if @a revision is of > > >> - * kind #svn_opt_revision_previous (or some other kind that requires > > >> - * a local path), an error will be returned, because the desired > > >> - * revision cannot be determined. > > >> - * > > >> - * Use the authentication baton cached in @a ctx to authenticate > > >> against the > > >> - * repository. > > >> + * Output the content of a file. > > >> + * > > >> + * @param[in] out The stream to which the content will be > > >> written. > > >> + * @param[in] path_or_url The path or URL of the file. > > >> + * @param[in] peg_revision The peg revision. > > >> + * @param[in] revision The operative revision. > > >> + * @param[in] ctx The standard client context, used for possible > > >> + * authentication. > > >> + * @param[in] pool Used for any temporary allocation. > > >> * > > >> - * Perform all allocations from @a pool. > > > > > > Sorry, but I like the old style better. I could read it and actually > > > understand what the function does; whereas text like > > > > > > * Output the content of a file. > > > > This is *exactly* what the function does, without all the extra fluff.
The function's name tells me that. > > Everything else is just modifying behavior, several pieces of which > > are common to many of our APIs, and so should have that documentation > > extracted and linked to. I'm just trying to save the effort of > > reading five paragraphs of prose to find out what a single boolean > > argument does. > > I appreciate the intent is to improve. However, I don't see how + * @param[in] peg_revision The peg revision. helps me know what to pass for the third formal parameter. > > The other problem is that the prose can make it hard to pick up on > > inconsistent behavior, when something (such as depth defaults) isn't > > the same between APIs. > > We could use @note for these situations. > Although the concise style appears to contain just as much information > when read in its entirety, I think we have indeed lost something > semantically in this translation. I think the reader of this > description is liable to think: > > "Output? To the screen, or what?" > "A file? Any old file, or what?" > > The reader then has to read the list of parameters to find out. In this > case the first param happens to say that a stream is used for output, > but the reader isn't sure that there isn't going to be another param > further down the list that says something like "The file to copy to, > which can be supplied instead of or as well as the stream." > > Similarly for the fact that it outputs a specified revision of a > (versioned) file; the lack of that piece of information makes the > interpretation of "a file" vague. Simply having a parameter documented > as "The revision" doesn't properly make the connection, although in a > relatively simple case like this the reader can infer that it's the > revision of the file to be output. > > The original sentence "Output ... file identified by @a path_or_url and > @a revision ... to a stream" made both of those implications clear. > > So perhaps we should aim to say: > > * Output the content of a specified revision of a file > * to a stream. > > The extra words here would not be fluff or "modifying behaviour", but > rather a more accurate description of the primary behaviour. And this > would give the word "the" something to attach to when we later refer to > "The peg revision", "The stream", and so on. > > Daniel, does that address your concerns? > Yes, I think. Here's a stab: /** * Write the content of a specified revision of a versioned node * to a given stream. * * @param[in] out The given stream, where the content will be written. * @param[in] path_or_url The path or URL of the node. * @param[in] peg_revision The revision to look up @a path_or_url at. * @param[in] revision The revision whose content is to be output. * @param[in] ctx The standard client context, used for possible * authentication (via @a ctx->auth_baton). * * @see <revs and pegrevs>, <authn>, <pools> */ svn_error_t * svn_client_cat2(svn_stream_t *out, const char *path_or_url, const svn_opt_revision_t *peg_revision, const svn_opt_revision_t *revision, svn_client_ctx_t *ctx, apr_pool_t *scratch_pool); (where we define "node" somewhere to mean "(repos_relpath, peg_revision) tuple".) > - Julian > > > > > * > > > * @param[in] out The stream to which the content will be > > > written. > > > * @param[in] path_or_url The path or URL of the file. > > > * @param[in] peg_revision The peg revision. > > > > > > tells me virtually nothing more than the signature does. > > > > That being said, improvements are welcome, or we can just revert what > > I've already done. > > > > -Hyrum > > > >