On Wed, Apr 1, 2026 at 1:12 AM Branko Čibej <[email protected]> wrote:

> On 1. 4. 26 00:53, Timofei Zhakov wrote:
>
> On Wed, Apr 1, 2026 at 12:48 AM Branko Čibej <[email protected]> wrote:
>
>> On 31. 3. 26 20:33, Nathan Hartman wrote:
>>
>> On Tue, Mar 31, 2026 at 2:02 PM Timofei Zhakov <[email protected]> wrote:
>>
>>> On Tue, Mar 31, 2026 at 7:12 PM Daniel Sahlberg <
>>> [email protected]> wrote:
>>>
>>>> Den tis 31 mars 2026 kl 18:03 skrev Timofei Zhakov <[email protected]>:
>>>>
>>>>> On Tue, Mar 31, 2026 at 5:47 PM Branko Čibej <[email protected]> wrote:
>>>>> >
>>>>> > On 31. 3. 26 17:44, Timofei Zhakov wrote:
>>>>> >
>>>>> > On Tue, Mar 31, 2026 at 5:40 PM Branko Čibej <[email protected]>
>>>>> wrote:
>>>>> >
>>>>> > On 30. 3. 26 21:59, Timofei Zhakov wrote:
>>>>> >
>>>>> > Hello all,
>>>>> >
>>>>> > The problem I would like to address is that actions like picking the
>>>>> right
>>>>> > branch in a repository are sometimes annoying with the current UI of
>>>>> the
>>>>> > command-line. Although all operations are really well-designed, the
>>>>> user still
>>>>> > needs to manually input the whole URL of a branch/or use the
>>>>> relative path
>>>>> > syntax.
>>>>> >
>>>>> > There is not enough user feedback. When interacting with a
>>>>> repository through
>>>>> > the CLI it feels like some abstract thing that exists somewhere on
>>>>> the remote
>>>>> > target - not a file-system tree. The current way we usually do that
>>>>> is one of
>>>>> > the following:
>>>>> >
>>>>> > 1. Imagine what we have on the server in our minds. It's often not
>>>>> that big of
>>>>> >    a deal to type 30 characters when switching/merging stuff.
>>>>> >
>>>>> > 2. Use the web interface (if any).
>>>>> >
>>>>> > 3. Use third-party tools like TortoiseSVN Repository Browser (and
>>>>> the whole
>>>>> >    ecosystem including branch picker in switch/merge which I believe
>>>>> is almost
>>>>> >    the same thing).
>>>>> >
>>>>> > 4. Borrow the right command with the exact path from another
>>>>> resource (like
>>>>> >    when first time checking out a new project).
>>>>> >
>>>>> > The 2 and 3 are not always possible as the standard web interface is
>>>>> very
>>>>> > limited in terms of functionality and not always do we have the
>>>>> pleasure to use
>>>>> > the GUI apps.
>>>>> >
>>>>> > What I believe we need to improve overall workflow with Subversion
>>>>> is a way to
>>>>> > browse repositories (without checking it out) directly in a
>>>>> terminal. Luckily
>>>>> > because of the way accessing remote targets is designed in
>>>>> Subversion, it's
>>>>> > possible to retrieve information of any arbitrary node without a
>>>>> need to fetch
>>>>> > it entirely.
>>>>> >
>>>>> > I would like to propose introducing a tool for browsing remote
>>>>> repositories
>>>>> > (svnbrowse). It will be a TUI (terminal user interface) like-ish
>>>>> application
>>>>> > where a user could navigate the repository like in a web browser.
>>>>> >
>>>>> > I have tried to implement it. A patch is attached below. I generally
>>>>> liked the
>>>>> > user experience it brings.
>>>>> >
>>>>> > There are also a few issues we might face when implementing this
>>>>> feature;
>>>>> >
>>>>> > 1. It currently loads items pretty slowly; Initially I used the
>>>>> svn_client API.
>>>>> >    However, it creates a new ra_session per each call. I believe it
>>>>> would
>>>>> >    be better to switch to using svn_ra directly.
>>>>> >
>>>>> > 2. We might load the tree recursively for faster navigation between
>>>>> >    directories. This would also allow fuzzy searching. But it makes
>>>>> the
>>>>> >    operation unbounded.
>>>>> >
>>>>> > 3. Should it work over a working copy or it's a web browser
>>>>> replacement? Using
>>>>> >    URL from a working copy makes it much more convenient to use as a
>>>>> user only
>>>>> >    needs to type 'svnbrowse' to get into it.
>>>>> >
>>>>> > 4. The revision issue; What revision do we use? If implementing it
>>>>> like in the
>>>>> >    rest of the commands (with --revision that defaults to HEAD), how
>>>>> often
>>>>> >    should we resolve it? The RA API (and the protocol) also allows
>>>>> fetching the
>>>>> >    contents of the HEAD directory (using svn_ra_get_dir2 with
>>>>> >    SVN_INVALID_REVNUM revision). However, there is no way to get the
>>>>> revnum
>>>>> >    back (without making an extra request).
>>>>> >
>>>>> > 5. Should it be a separate program or something like an option in
>>>>> >    'svn list --please-let-me-browse-it'. I personally think that it
>>>>> should not
>>>>> >    be in 'svn' command. By conceptual conventions of 'svn' there are
>>>>> minimal
>>>>> >    interactions and it can be used for scripting as well. I believe
>>>>> it would be
>>>>> >    much better to separate it into a different program.
>>>>> >
>>>>> > 6. I suggest limiting the scope to directory browsing as it's the
>>>>> simplest to
>>>>> >    implement but it improves the experience by a lot. Later on,
>>>>> adding file
>>>>> >    content browsing and log would be natural. Also it may act as an
>>>>> >    alternative to svnmucc if a commit operation was implemented.
>>>>> >
>>>>> > 7. Do we use ncurses (library that the majority of TUI apps use) or
>>>>> figure out
>>>>> >    something else?
>>>>> >
>>>>> > This list is not complete and I may have missed something; To
>>>>> conclude, there
>>>>> > are plenty of things to be done and many problems with on obvious
>>>>> solution.
>>>>> > Better we try something out and get some feedback and vision of what
>>>>> is to be
>>>>> > improved. The prototype represents the general wireframe of what it
>>>>> should
>>>>> > like. I made it in like an hour to get an overall impression.
>>>>> >
>>>>> > Please feel free to express your opinion about this idea. Dear
>>>>> svndev, it's
>>>>> > time to discuss some UI things >-<
>>>>> >
>>>>> >
>>>>> > So, if I'm reading this correctly, you're basically proposing a
>>>>> nicer interface for svnmucc? Or just the read-only part of it?
>>>>> >
>>>>> > I'm suggesting to start with a read-only browser with an opportunity
>>>>> > to implement a nicer interface for svnmucc in future.
>>>>> >
>>>>> > But I think the primary focus of the minimal-working prototype is the
>>>>> > read-only part.
>>>>> >
>>>>> >
>>>>> > Ack. Sounds nice. In return, I propose not doing this in C but in
>>>>> Python, preferably 3.10+. We have the bindings, and this is what Python is
>>>>> really good at if used correctly.
>>>>>
>>>>> I personally think that using anything besides C could potentially be
>>>>> bad for cross-platformability (is this a word?). It's not guaranteed
>>>>> that the platform that we are being run on has a Python interpreter
>>>>> which is especially common on Windows.
>>>>>
>>>>
>>>> Cross-platformability works for me!
>>>>
>>>> I can't remember if I added Python manually on my main computer but at
>>>> least it wasn't a big effort (possibly it is a Windows Store app). I don't
>>>> think Python would be a major blocker for any reasonably modern Windows
>>>> machine.
>>>>
>>>>
>>>
>>> I think we should ask ourselves "how do people usually install svn
>>> tools?". I think the most common way it's done on Windows is by checking
>>> the relevant option in TortoiseSVN installer. Is it really gonna include a
>>> Python interpreter into distribution? I assume it's generally a bad idea.
>>>
>>> If it doesn't, then the tools in Python would not work out of the box.
>>>
>>> It also requires something like an extra batch file to enable
>>> invocations by typing a direct command (like svnbrowse[.exe|bat]) in a
>>> terminal.
>>>
>>> I don't think it's worth it.
>>>
>>>
>>>>
>>>>> The rest of the command-line tools don't use Python so why should
>>>>> svnbrowse.
>>>>>
>>>>
>>>> I don't think this is a good argument. If a certain solution makes more
>>>> sense for a particular tool, we should go that way.
>>>>
>>>>
>>>>>
>>>>> Generally, with a good framework, it's not so hard to make such
>>>>> applications in C.
>>>>>
>>>>
>>>> Wasn't the a joke about 10 types of people, those who like C and those
>>>> who don't? Or maybe that was about something else?
>>>>
>>>> That said - I firmly believe that if this is a scratch for you to itch,
>>>> you should select the tool that makes the most sense to you. If you think C
>>>> makes the most sense - go for it!
>>>>
>>>>
>>> That's a good point, thanks! And not for me only, but for the rest of us
>>> that care also.
>>>
>>>
>>> --
>>> Timofei Zhakov
>>>
>>
>>
>> I'm also +1 for a svnbrowse utility!
>>
>> I'm okay with it being implemented in C for reasons that were already
>> spelled out: consistency with the other svn* binaries, less friction for
>> developers, packagers, and end users, etc.
>>
>> The 1.14.x release notes explain [1] that Python isn't required for
>> Subversion unless someone wants to build Subversion from sources, run the
>> test suite, or use something that requires the SWIG Python bindings.
>> Staying consistent with that as it affects our core tools is a good thing
>> IMHO.
>>
>>
>>
>> I don't see this as a core tool. *shrug*
>>
>>
>>
> Why not? Could you please elaborate that?
>
> It's still a tool that people might want to use just like svn or svnadmin.
>
>
> Our core tools are the ones you can't do without. That would be svnadmin,
> svnserve/mod_dav_svn on the server side; and svn on the client side. We
> have some others, like svnmucc and the language bindings, which are more of
> an optional extra. A text UI browser falls into that category, too.
>
> The difference is exactly between the "must have" and "would want to use"
> descriptions.
>

Yes, if you define it like that it's obviously not a "core tool".

I would say that all programs including svnmucc, svnsync, and even
svnversion and svnbench are in some way "core". Then svnbrowse would be one
of these.


>
> Here's why I suggested to write this in Python: we're barely exercising
> our Python bindings. We don't have tests for them. There are some example
> hook scripts, and mailer.py, and that's it. Having a tool that can both be
> useful for users and gives our Python bindings a real workout would be a
> very nice addition.
>
>
If we use a certain thing too little, on its own it's not a really strong
reason to use it in a new subproject.


> It's also a question of using the right tool for the job. C is not the
> right tool for writing interactive/event-driven user interfaces. Not saying
> it can't be done, but as someone who's had to do Win32 programming in raw
> C, I sure don't recommend it.
>
>
Yes we should use the right tool. Not because we don't exercise it enough,
but because it fits the requirements.

In this case I believe the use of C does in fact fit well enough.

There should be a certain balance. Because on the other side we people use
React.JS in their TUIs [1]. Problems in C is something you at least can
easily debug and actually understand where the problem is.

[1] https://deepwiki.com/chatgptprojects/claude-code/7-terminal-ui-(tui)

-- 
Timofei Zhakov

Reply via email to