Ok I see changes are not simple and it could be a bigger change, maybe breaking (relaxing) some current lock rules. But mind that even the current implementation has flaws - SVN-2507. So, my approach is to prefer simplicity and usability over holes-free implementation. From my point of view, it's important to have a tool to list all locks and unlock (delete) locks when it comes to issues after renaming / deleting files or directories. I.e. put the burden of such situations you have mentioned to the users, but give them a tool to fix that easily.
Just a few notes: * The problem with renames is already in the current SVN implementation, see SVN-2507 comment https://issues.apache.org/jira/browse/SVN-2507?focusedCommentId=14922961&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-14922961 * What happens with the remaining lock after file delete, see SVN-2507, if you create a directory with the same name? Or move/rename an existing one in place? * Git LFS allows you to lock / unlock any path and list all locks. (I am aware Git has different principles working with files and directories.) Cheers Andy On Tue, 3 Jun 2025 at 21:09, Branko Čibej <br...@apache.org> wrote: > > On 3. 6. 25 17:26, Ondra Medek wrote: > > Remarks to Andreas reply. First, I would like to quote Stefan Küng's > comment from SVN-2507: "First, remember that locking is often done by > non-technical people (e.g., designers working on images, non-devs > working on word docs, ...) so they're happy if they can use svn at > all." > > - So, the point is not to minimize conflicts. Our customers use svn > with locks to avoid conflicts at all. (And branches and merges as > well.) > - Different file naming is not a solution for us, because some file > names are fixed. E.g. you have a directory "projectA" and you may want > to add a fixed named file like "summary.xyz". The file may not exist > (then the result has no summary) or may exist there (then summary is > added to the result). > > Generally, it's not a blocker for us. We will add some workaround for > this to our app. And our customers using CLI would have to be more > cautious. I just still think if Subversion would allow locking and > unlocking for non-existing paths it would improve usability in such > scenarios. > > > The proposal is "locking and unlocking of non-existent paths". I suggest that > you expand on this with a high-level design, including UI/UX (command-line is > still UI) considerations, and what kind of API changes we'd need for, e.g., > Tortoisesvn to be able to take advantage of it; keeping in mind that: > > Subversion can only lock files, not directories. > Subversion will only allow the lock owner to commit/create the file. > What happens if someone renames some part of the parent path of the locked > nonexistent thing? > Similarly, what happens when a locked thing is accessed through a (local) > svn:external? If it's accessible in the working copy through a committed > symlink? > What happens if someone wants to create a directory with the same name? Or > move/rename an existing one in place? > > > So, yeah, all of this is not trivial. Consider that we tried to work out > locking of directories for literally years, and we couldn't come up with a > consistent model that didn't have more holes and edge-cases than solid > features. > > I'm not saying it can't be done, I fully encourage contributions to the > project. I'm just warning here that what seems like a simple new feature has > a lot of ramifications that need to be considered in advance. Every time we > did not and made "trivial" decisions, they came back to haunt us later. > > > -- Brane > > > > On Tue, 3 Jun 2025 at 16:00, Andreas Stieger <andreas.stie...@gmx.de> wrote: > > On 2025-06-03 10:59, Daniel Sahlberg wrote: > > I think the best option would be to teach `svn commit` to SET a lock > after commit (much like it can be told to not RELEASE the lock on an > already committed file). Then your workflow would be: > 1. Create a new empty file. > 2. Add it. > 3. Commit it, with the new --set-lock option. > > Except commit works on a PATH which may be a WC, and the committed item > is not necessarily the exhaustive list of items to be locked. Also this > still creates a revision which may no be desired. > > 4. Edit the file, adding whatever content you need. > 5. Commit it (possibly with --no-unlock if you'd like to repeat steps > 4 and 5). > > This seems to be a marginal improvement, if any. > > Let's look at this this way: This operation is a conflict in /any /scm, > even content-addressable ones with weaker file identities. In svn the > file identity is a strong one, hence the need for a tree conflict. Are > we dealing with a case of a feature request to cover difficult UX for > resolving tree conflicts? Mind you that even if we "fix" this the same > project will see issues when they start branching and merging. > > The initial question was 'how to use locks to prevent tree conflicts. > The premise was that locks are otherwise used in the project to > serialize changes for non-mergable content. If we rephrase it then we > may arrive at something better: How do we have fewer tree conflicts? I > would point to time or uuid based naming address this for a linear > development model. Alternatively I would suggest feature branches by > default, and serializing to the final file name (as copy) when > reintegrating. > > IMHO this belongs higher in the stack. > > Andreas > >