On 5. 4. 26 21:37, Daniel Sahlberg wrote:
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]> 
<mailto:[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?

I thought of that of course. It seamlessly extends the semantics of the function, but it also creates a non-obvious ABI incompatibility: previously, sending a NULL revision parameter would cause a segfault.

On the other hand, expanding the domain of a parameter should be a valid change for a minor revision (not a patch). So if you decide to do this, the change should be merged into 1.5.0.

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().

... which amounts to adding another public API. :)

-- Brane

Reply via email to