Re: RFC: Standardizing a 'svn:branch' (boolean) property
From: Julian Foad <julianfoad_at_btopenworld.com>
Date: Tue, 17 Jul 2012 20:08:33 +0100 (BST)
Bert Huijben wrote:
I wasn't going to respond to this thread but I got sucked in :-)
I think the idea of simply tagging certain nodes in certain revisions as "this is a branch root" is ridiculously weak. I agree it would *work* to the extent of being able to implement some simple UI hints such as
"You want to merge 'update-editor.c' but it isn't marked as a branch root, but 'trunk' is, so merge at that level instead?"
But it seems so hacky and limited.
Limited for example in that I would want to be able to ask not only "is this a branch root" (or "where are the branch roots between this path and ^/"), but also "where will I find the other branches of this (project|branched-thing)?" Maybe the other branches of *this* (project|branched-thing) are mixed up with branches of other (projects|branched-things).
Hacky in that I have seen hardly any semantics mentioned. What does it mean to say that a node is a "branch root"? Does it mean "somebody has done a merge to or from this node in the past"? "Somebody thinks they might want to merge to or from this node in the future"? "This node shares a common copy-from ancestor with one or more (unspecified) other nodes in the repository"?
If more and more people keep doing merges over time, sometimes using the "wrong" root (on purpose or by accident), and sometimes press the "Please mark this as a branch root for future use" button, then over time you'll find that "update-editor.c", "libsvn_wc", "subversion" and "trunk" all have that property set. Then where are we?
[Bert responded: "Same as where we are right now."]
If we can set this property on an already-existing trunk or branch, then what about old versions -- does it not matter to anybody that the old versions are not marked? It would matter to me if I were writing a client that includes any kind of history browsing.
On IRC just now [1], Bert talked about storage and transmission of "this is a branch root" data, arguing that a versioned prop is good because the client can see the value immediately and that the 'enversion'[2] way, which is using revprops, is not good because of the difficulty of reliably caching revprops on the client for fast look-up. To me, those are valid implementation concerns but almost orthogonal to the design issue of what semantics we should be providing.
Bert said, "Then just lets see if we can get better than the current 'we don't know if there is a root'. Currently Subclipse has 'subclipse:tags' property, AnkhSVN has 'vsroject-root' [...].
I suppose the other way to respond is that this idea doesn't seem suitable as a core piece of Subversion design, but it doesn't need to be: it's a client-specific feature. You can certainly define a common name for a branch-root boolean property, to be shared by several svn clients. Talk to those other clients' teams and choose a name. The name should not start with "svn:".
I know it would be nice and convenient if it was defined centrally here, but ... I dunno, others may disagree, but I think we need a much more rigorous definition before I'd be happy to consider it.
- Julian
[1] IRC conversation starting at <http://colabti.org/irclogger/irclogger_log/svn-dev?date=2012-07-17#l106>.
-- Certified & Supported Apache Subversion Downloads: http://www.wandisco.com/subversion/downloadReceived on 2012-07-17 21:09:09 CEST |
This is an archived mail posted to the Subversion Dev mailing list.
This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.