On Mon, Jun 15, 2026 at 6:46 PM Nathan Hartman <[email protected]> wrote:
>
> On Mon, Jun 15, 2026 at 11:47 AM Branko Čibej <[email protected]> wrote:
> >
> > On 15. 6. 2026 16:55, Timofei Zhakov wrote:
> >
> > On Mon, Jun 15, 2026 at 8:48 AM Branko Čibej <[email protected]> wrote:
> >>
> >> On 14. 6. 2026 21:54, Timofei Zhakov wrote:
> >>
> >> On Sun, Jun 14, 2026 at 12:56 AM Branko Čibej <[email protected]> wrote:
> >>>
> >>> On 14. 6. 2026 00:25, Timofei Zhakov wrote:
> >>>
> >>> On Sat, Jun 13, 2026 at 9:58 PM Branko Čibej <[email protected]> wrote:
> >>>>
> >>>> On 13. 6. 2026 21:49, Timofei Zhakov wrote:
> >>>>
> >>>> First of all, I find it a bit weird that there is no easy way to recover 
> >>>> the real node kind (not the one in subversion but in the system's FS) 
> >>>> from svn_client_status6(). Although it is present in the WC API 
> >>>> (svn_wc_status3_t->actual_kind), it isn't in the client equivalent. 
> >>>> There is only a hacky way to use 
> >>>> svn_client_status_t->backwards_compatibility_baton which is a void* that 
> >>>> actually describes a svn_wc_status3_t so one could use the field from it 
> >>>> (if they really know what they're doing).
> >>>>
> >>>> subversion/include/svn_wc.h:svn_wc_status3_t:
> >>>> [[[
> >>>>   /** The actual kind of the node in the working copy. May differ from
> >>>>    * @a kind on obstructions, deletes, etc. #svn_node_unknown if 
> >>>> unavailable.
> >>>>    *
> >>>>    * @since New in 1.9 */
> >>>>   svn_node_kind_t actual_kind;
> >>>> ]]]
> >>>>
> >>>> I personally don't see a real reason to not have it so if nobody objects 
> >>>> I'd just add it there.
> >>>>
> >>>>
> >>>> One of Subversion's core design principles is that working copy info 
> >>>> should be abstracted from client operations. There was even an effort to 
> >>>> remove "everything" from the svn_wc.h header, but we can't do that 
> >>>> because of compatibility guarantees.
> >>>
> >>>
> >>> Exactly, let's not force them and give everything one could ask for from 
> >>> the client API directly.
> >>>
> >>>>
> >>>>
> >>>> Of course, over time we've added all sorts of loopholes to get at WC 
> >>>> data anyway – the "WC compatibility version" being the latest example. 
> >>>> Still, even so we're keeping this in the svn_client API. Though I do 
> >>>> have my doubts about exposing the WC format version in this way, I don't 
> >>>> see why it's necessary.
> >>>>
> >>>
> >>> I didn't say it's anywhere closely valid - it's a horribly wrong 
> >>> workaround that just exists and I wanted to mention it.
> >>>
> >>>>
> >>>>
> >>>> There is also an idea that I think we might consider to include last 
> >>>> modified time (actual_mtime) into the status structure of both WC and 
> >>>> client. We already have this information as an svn_io_dirent2_t when the 
> >>>> status is assembled in libsvn_wc/status.c so it doesn't cost us anything 
> >>>> to do and could potentially give users more idea about a node.
> >>>>
> >>>>
> >>>>
> >>>> Why do you need mtime etc. in the client status in the first place? 
> >>>> Clients can't use it to guess whether a file was modified, we have more 
> >>>> complex underlying mechanisms for that. So let's start by discussing 
> >>>> what you want to achieve before you modify the public API.
> >>>>
> >>>
> >>> Clients may want to display extra info about status items and this is one 
> >>> of them that we can make cheap to retrieve. I don't think there is that 
> >>> much it could possibly break to add a field with stuff we already have.
> >>>
> >>>
> >>>
> >>> We do tend to be more concerned about commit times than on-disk times, 
> >>> though we do have the meta-data-versioning branches that haven't been 
> >>> touched in ages. I would guess clients are more interested in whether a 
> >>> file is modified, not its exact modification time. I can't recall, do we 
> >>> have an example of this, a request from users, or similar? Or a concrete 
> >>> use case? 'svn status', 'svn info', 'svn ls' etc. have always, correctly 
> >>> IMO, been concerned about version control aspects.
> >>>
> >>
> >> Nothing really concrete yet, but I'm sure it would make API consumers 
> >> happy.
> >>
> >> For the record: we already have filesize in both (WC and client) 
> >> structures.
> >>
> >>
> >> Yes, I know.  Thought it's sometimes the on-disk size and sometimes the 
> >> in-repository size, depending on which structure (info or status) you look 
> >> at.
> >>
> >> I'd like to also throw it here onlist for discussion but perhaps it would 
> >> be great to show if a file is a directory in 'svn st' (and probably other 
> >> similar commands) by adding a slash to the end of a name.
> >>
> >>
> >> You're conflating 'svn status', 'svn info' and 'svn ls'. 'svn status' is 
> >> about the modification status of a node; not its local size or 
> >> modification time. 'svn info' does show the node kind. 'svn ls -v' appends 
> >> that '/' to directory names. You're also mixing API and command output.
> >>
> >> Even if we add modification time to the client API, it should be in 'ls' 
> >> and maybe 'info', not in 'status'. Please keep in mind that Subversion 
> >> isn't a general-purpose shell and we have to be careful not to mix 
> >> information relevant to version control with information that users and 
> >> clients naturally get elsewhere. Specifically, we shouldn't confuse users 
> >> or API consumers into thinking that the local modification time is 
> >> recorded in the repository.
> >>
> >> I think it's a common thing to do (although I just found that GNU 'ls' 
> >> doesn't do that).
> >>
> >>
> >> 'ls -F' does, and also appends a '*' to executable files. It's an often 
> >> used option, but not the default. Just as 'ls' doesn't show names that 
> >> start with a dot by default. A bit like the difference between 'svn ls' 
> >> and 'svn ls -v'. What you see in your Linux VM or WSL when you type 'ls' 
> >> in the terminal is usually not what you'd see if you typed '/bin/ls'.
> >>
> >> It instead colours them differently. Which I believe would be also a nice 
> >> thing if we do it in Subversion but is a completely different topic that I 
> >> really wish we considered at some point.
> >>
> >>
> >> GNU ls does not use colours by default. You have to add '--color=auto' or 
> >> '--color=yes' to get that. Those options are often added to bash aliases, 
> >> but they're not the default by any means.
> >>
> >
> >
> > I did not mix anything up. I think API and command-line changes could be 
> > completely unrelated to one another.
> >
> >
> > Sure, but you brought up command-line output changes in the context of 
> > discussing API changes.
> >
> >
> > This is information that clients may want to display just. How could you 
> > justify filesize but not mtime in 'svn status'?
>
>
> Did you mean 'svn ls' (rather than 'svn status')? (I'm not aware of
> 'svn status' showing filesize; it only shows the current and Last
> Changed Rev.)
>
> AFAICT 'svn ls -v' does show mtime -- that is, the "Last Changed Date"
> also shown in 'svn info'. I didn't look at how it gets this
> information.
>

True. It does not.

Please keep in mind that the API and the cmdline are two separate
products. The fact that sometimes they sometimes do the same thing is
a coincidence. Yes, we need API for certain features in the cmdline
but it's not an argument to not implement something in libsvn if it
didn't find its use in the cmdline.

>
>
> > I'm not trying to justify anything. I'm considering the consequences of 
> > changing the UI/API. We've made silly mistakes in the past in that respect, 
> > I've certainly made my share of them. I don't think we should keep making 
> > them as a sort of, I don't know, learning experience?...
> >
> >
> > To me, they sound almost the same - both describe information about the 
> > underlying file. Information that the status implementation already has and 
> > could easily expose from the API so they won't have to do extra work to 
> > retrieve those. Or actual_kind in libsvn_wc but not in libsvn_client - the 
> > same thing.
> >
> >
> > "Easily expose" and "should expose" are not the same thing. You seem to be 
> > missing my point entirely.
> >
> >
> > Okay, if apparently 'svn status' is not just filtered 'ls' why do you think 
> > it'd be such a horrible idea to add a '/' to the directories? Can we at 
> > least discuss it maybe - not just throw it away just because "it's a 
> > different thing"?
>
>
> (Of course, the quoting is all messed up so it's not obvious who wrote
> what, argh!!!)
>
> Just adding my opinion here: I don't think it's a horrible idea, but I
> do think we have different commands for different use cases.
>
> In my mind, 'svn status' (with or without --verbose) is for checking
> what changed in my working copy and/or on the server (with
> --show-updates); 'svn info' is for getting the kind of detailed info
> about a particular item (which outputs whether a particular item is a
> file or directory in "Node Kind"); 'svn ls' is a command I only use to
> browse a remote server when I need to find the correct URL for
> something -- I hope 'svnbrowse' will replace 'svn ls' for that use
> case!!
>
> Generally I like to err on the side of not changing things unless
> there's a really good reason. One thing that annoys me about much
> commercial software (and some open source software) is when they
> change things for the sake of change. I call it "It worked great. So
> we reinvented it. Again." I think stability is a good thing.


It is but a single stupid field that might probably be useful doesn't
hurt stability in any way.

>
>
> Now, if there's an actual problem it would solve, like eliminating a
> whole lot of contorted logic in applications, that would be a good
> reason to consider it.
>
> It sounds like 'svn info' provides most of what you want, except the
> file size. Now wait a minute, that's funny. 'svn info' takes a '-H'
> (--human-readable) switch. But it doesn't show file sizes. Am I
> confused?
>
>
> > How many automation scripts for how many users that we know nothing about 
> > do you propose to break because you feel that changing the output of an 
> > 'svn' command would be a good idea? (Ignore --xml because even though we 
> > know it's what people should use when automating the command line, we also 
> > know that they don't.)
>
>
> Probably because XML is hard. And I'm sure it didn't help that we had
> some bugs that produced invalid XML. :-/
>
>
> > Why do you think we have separate info, status and list commands if "it's 
> > all the same thing"?
> >
> > Those are the sort of questions you need to answer before proposing such a 
> > change to the API or UI. Note that backwards compatibility rules apply to 
> > the UI, too.
> >
> >
> > I don't know what "Subversion design principles" you're talking about that 
> > don't let us make our lives easier and programs faster...
>
>
> I was just thinking about this the other day. There's a lot of tacit
> knowledge about why things are the way they are, that isn't
> necessarily documented (unless you consider spelunking through the
> history and mailing list archives). I don't know if we'll ever be able
> to get it documented. At least we do have the list archives going back
> to the beginning (before Subversion became Apache Subversion).
>
>
> > The ones we've been tying to follow, not always with perfect success, for 
> > the last 25 years?
> >
> > Exposing something in the public API just because someone feels it would be 
> > convenient might not be the best idea, I hope you agree. We've had our 
> > share of exposing too much already. I prefer to be conservative with 
> > changes to our public interfaces, whether it's the API or the UI. I wasn't 
> > always that way but I hope I've learned my lesson.
> >
> >
> > -- Brane
> >
>
> Idea: Instead of changing an existing API, a completely new API could
> be added that provides all of the information about an item that you
> could possibly get from 'svn status', 'svn info', and 'svn ls'. If
> this is in support of 'svnbrowse' and other file manager-style
> applications, I can see where it might be useful to have a
> one-stop-shop API for getting anything and everything a user might
> want to know. But I'd caution to design it very, very carefully, since
> that would become another API that needs to be maintained forever...
>
> Cheers,
> Nathan



-- 
Timofei Zhakov

Reply via email to