Den sön 5 apr. 2026 kl 16:43 skrev Branko Čibej <[email protected]>:
> On 5. 4. 26 16:33, Timofei Zhakov wrote: > > On Sun, Apr 5, 2026 at 4:07 PM Branko Čibej <[email protected]> > <[email protected]> wrote: > > On 5. 4. 26 11:44, [email protected] wrote: > > Author: rinrab > Date: Sun Apr 5 09:44:54 2026 > New Revision: 1932855 > > Log: > Export a function for parsing a single opt_revision into the public API. We'll > probably use it in svnbrowse. Neither of other tools need it because they > primarly operate over a revision range for which there is a separate function > in the API. > > > Is making this public really necessary? A wrapper for > svn_opt_parse_revision() that checks that there was only one revision in the > argument is literally two lines of code that can be local in svnbrowse. > > Not exactly. It wraps parse_one_rev(). > > > I know this implementation does, but parse_one_rev() is static. > > > svn_opt_parse_revision() has extra code for revision ranges. It > technically is possible to use it and just check that the end is > missing (which svn does if revision ranges are not supported for the > specific subcommand), but I believe it's easier to have more specific > APIs. > > > Every new public API is another that needs to be maintained forever, > that's all I'm trying to say. I really don't think it's worth it for one > usage in our code. > > -- Brane > > I believe both Timofei and Brane have valid points here. Furthermore, they both know much more C than I do so maybe my suggestion is not correct, but: Would it be possible to re-write svn_opt_parse_revision so one could say "Please extract exactly ONE revision and not a range"? What if you could send 0 for end_revision? [[[ Index: libsvn_subr/opt_revision.c =================================================================== --- libsvn_subr/opt_revision.c (revision 1932860) +++ libsvn_subr/opt_revision.c (working copy) @@ -187,7 +187,7 @@ left_rev = apr_pstrdup(pool, arg); right_rev = parse_one_rev(start_revision, left_rev, pool); - if (right_rev && *right_rev == ':') + if (end_revision && right_rev && *right_rev == ':') { right_rev++; end = parse_one_rev(end_revision, right_rev, pool); ]]] Shouldn't this be functionally equivalent to svn_opt_parse_one_revision when passing 0 for end_revision? Except, of course, returning the error as an int instead of as an svn_error_t*. The latter may be a nice feature but it is orthogonal to the the question of parsing one or more revisions and could be an argument for svn_opt_parse_revision2(). Cheers, Daniel

