Daniel Shahaf wrote on Wed, Apr 29, 2015 at 22:24:36 +0000: > Julian Foad wrote on Mon, Apr 27, 2015 at 20:58:34 +0100: > > Daniel Shahaf wrote: > > > Julian Foad wrote: > > >> On 17 April 2015, Daniel Shahaf wrote: > > > I suppose the answer depends on the properties, i.e., "interface", of > > > a branch operation. For example, is a copy of a branch a branch? (In > > > English: is 'bar' a branch after 'branch trunk foo; cp foo bar'? If it > > > is a branch, is its ancestor 'trunk' or 'foo'?) > > > > Although branches are "exposed" in Subversion by attaching them to > > paths, think of that like "mounting" a Unix file system on a path for > > the convenience of being able to address it through the existing > > addressing scheme (that is, paths, in both Unix and in Subversion). > > > > Food for thought. Thanks. (I'm still working on exactly how 'plain > > copying' fits in to the model.) > > Okay. So what you're saying so far is that the data model will have > distinct concepts for "copying" and "branching". Presumably both cases > will result in the new object's delta chain pointing to the old object's > (this would be an implementation detail), but some high-level operations > will behave differently if the object operated upon is a branch compared > to if it is a plain copy. The interesting question is what those > differences will be. > > Should "branching" be an atomic concept of the model, or a derived one? > That is, we could define "branch" as "a node created from an existing > node via the 'svnmover branch' API", or we could define branch in terms > of lower-level operations? > > An example of the latter would be to define branching as "a node Y is > a branch of node X if X is a copy-wise ancestor of Y and there has been > at least one merge between X and Y, in either direction".
By the way, if the data model has a first-class 'branch' operation, will it also have a first-class 'tag' operation? And where would the distinction between 'feature branches', 'stabilization branches', etc., live? That is: would the hypothetical "SCM-knowledgeable user not familiar with SVN" want to tell her SCM the merges pattern of each branch (which branches it may merge from/to), and have the SCM enforce that? Daniel (An "SCM-knowledgeable user not familiar with SVN" is the end-user with whom in mind the data model is designed)