Branching Scenarios

Bradley_Sergeant@intersolv.com
Fri, 12 Feb 1999 14:35:55 -0500


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