Date: Sun, 21 Feb 1999 13:37:46 -0500 Message-Id: <9902211837.AA03560@tantalum> From: "Geoffrey M. Clemm" <gclemm@tantalum.atria.com> To: Bradley_Sergeant@intersolv.com Cc: ietf-dav-versioning@w3.org, jamsden@us.ibm.com In-Reply-To: <0028AFBF.@intersolv.com> (Bradley_Sergeant@intersolv.com) Subject: Re: Branching Scenarios Suppose we defined a DAV:branch property that can be assigned to an activity. This is just a way for a client to say what "branch" they want products of that activity to go on. A server can just ignore this property, if it doesn't support or isn't interested in branches (e.g. a change-set system). Let's see how this plays out against Brad's scenarios: From: Bradley_Sergeant@intersolv.com Case 1: Version V1 of a product ZOO has reached its feature complete milestone (FC), which for this project means it has all its intended features, but still has bugs to be fixed. At this point some developers will continue fixing bugs in version V1, but others will move on to work on the next version (V2). The V1 code is on the mainline. So V1 activities had their DAV:branch property set to "mainline". Because further changes to V1 are intended to be minimized and the V2 work is a natural evolution of the V1 work, V2 work will continue on the mainline. So V2 activities will have their DAV:branch property set to "mainline". Also, it is important that all bug fixes for V1 also be immediately reflected in the V2 work. So V1 bug fixes also will be reflected on the mainline. If a resource needs to be changed for a V1 fix and it has already been fixed modified on the mainline for V2, then the V1 change is made on a branch and also on the mainline. Otherwise, if no V2 changes have yet been made to the resource the V1 change is only made on the mainline. Thus the V2 version of ZOO is just the tip of the mainline, whereas the V1 version must be obtained from a fixed configuration (via a fixed label, or whatever mechanism is used) and this configuration must be updated with each bug fix to V1. A simple approach is to just set the DAV:branch of V1 bug fix activities to be "V1-bug-fix", and then require that all V1 bug fix activites be merged to the mainline. Then the RSR for V2 is just LATEST(mainline) and the RSR for V1 is just LATEST(V1-bug-fix) else V1-Config This produces the effect you want, but isn't *identical* to the branching you describe above. To produce something identical, you could just add another property, say DAV:secondary-branch. Then you would set the DAV:branch of a V1 bug fix to be "mainline" and the DAV:secondary-branch to be "V1-bug-fix". Your server would put things on the DAV:branch if it could, and otherwise put it on the DAV:secondary-branch. In this case, the RSR for V1 is more complicated (to capture the changes you made on the mainline that are for V1). Because of the resulting complication in the V1 RSR, I'd recommend the first approach, but that's up to the user/client. Case 2: Version V1 of product ZOO has been released and version V2 development is well underway. A key customer has contracted to have a specific enhancement made to V1 specifically for them, the resulting version is referred to as V1-A. The V1-A enhancement is superseded by different features that will be available with the V2 release, but the customer does not wish to wait for V2 to complete. All work on V1-A will not be used in V2. Therefore all V1-A changes are made on branches newly created just for V1-A. Just set the DAV:branch property of V1-A activities to be the "V1-A". I don't see how this can be done without some indication being given as to which branching policy is desired for each Activity. Agreed. Such an indication could be in the form of a property on the Activity or an option in the creation of the activity. We've got a fine extensibility mechanism in the form of properties ... I say, use it. What else would the "option on creation" map to? You could try to bundle all this into the "resource-type" property, but I see no reason to do so. Alternatively or in addition, an administrator might specify which branching policies were allowed for a set of resources. The indication of which policy to use could be abstract and general, e.g. Principle vs. Supporting activity. Or the indication could be an implementation specific property. A third idea would be to see if a few specific types of activities could be defined to meet known needs and leave the door open for adding new ones later. I believe there are just two suggestions here: have this additional information stored in the resource-type, or store it in new properties. The latter seems far more flexible, with no disadvantages, so I'd vote for that. None of these choices fills me with glee. I'm probably missing something. Help me out. What's wrong with a couple of conventional properties, that allow a client to store a choice in a standard place accessible by interested clients and servers? Cheers, Geoff