From: Bradley_Sergeant@intersolv.com Date: Fri, 12 Feb 1999 14:35:55 -0500 Message-ID: <0028AFBF.@intersolv.com> To: ietf-dav-versioning@w3.org, jamsden@us.ibm.com Subject: Branching Scenarios I'm interested to see how two commonly used branching techniques/policies would be accomplished using the proposed WebDAV versioning model. I'll outline the ideas and describe the basic scenarios. I'll describe the scenarios using software development nomenclature and assume use of a branching SCM system. The topic of this post is if and how such scenarios would be supported assuming they apply to web content management. Note that both Case 1 and Case 2 represent SCM process choices that are commonly used. For good or bad they represent two ways that parallel development is managed at Company X. 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. 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. 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. 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. So, how would a WebDAV server that supports versioning (using the current proposal) support these two cases? TRY1: An ACTIVITY is directly related to a branch. Creating a new activity means creating a new branch. This branching policy supports case 2, but I don't see how it can easily support case 1. In Case 2 the desire behavior is obtained by continuing V2 using the V1 Activity and creating a new activity for V1-A. In case 1 the V2 activity does not want to create a new branch, so it must continue to use the V1 activity. Then V1 bug fixes would have to go into a new activity forcing a new branch with every change, but is just case 2 and does not match the branching policy of case 1. TRY2: An Activity uses the following branch policy: * if the selected revision to be checkout is the latest then check it out on the same branch it is on. * if the selected revision is not the latest, then check it out on a new branch associated with the activity. The TRY2 branching policy works for Case 1. The V1 activity continues to be used even after the V2 activity is created. Only resources that have been modified by V2 cause V1 to branch. Because V1 does not work off of latest, it will not cause V2 to branch, but all changes to V1 on the original branch will be picked up by V2 and non of the others. However TRY2 does not provide the desired behavior for CASE 2. Creating a new Activity for V1-A does not necessarily result in a new branch. Understand, the point here is not to find some way to manage cases 1 and 2 using the Activity mechanism, but to find a way to do it and preserve the branching policies of Company X. This is important to Company X because they want to continue using their SCM procedures and have their new WebDAV server fit into this existing system. I don't see how this can be done without some indication being given as to which branching policy is desired for each Activity. Such an indication could be in the form of a property on the Activity or an option in the creation of the activity. 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. None of these choices fills me with glee. I'm probably missing something. Help me out. --Sarge