On Sun, Apr 5, 2026 at 3:45 PM Branko Čibej <[email protected]> wrote:

> 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]> 
>> <[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.
>


Is a segfault ever a desired outcome? :-)


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


I think you meant 1.15.0.

svnbrowse would need to be introduced no earlier than 1.16.0, so the API
semantics could be merged into 1.15.0 or just wait until 1.16.0, I think.



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


Given that public APIs need to be maintained forever I agree with Brane
that we should scrutinize any potential new APIs carefully. I'm not against
adding them. I'm just saying we should think carefully first.

Cheers,
Nathan

Reply via email to