new "Advanced Versioning Semantics" section

From: Geoffrey M. Clemm (geoffrey.clemm@rational.com)
Date: Wed, Apr 26 2000

  • Next message: jamsden@us.ibm.com: "Re: Initializing a new workspace using an RSR"

    Date: Wed, 26 Apr 2000 00:08:54 -0400 (EDT)
    Message-Id: <200004260408.AAA02618@tantalum.atria.com>
    From: "Geoffrey M. Clemm" <geoffrey.clemm@rational.com>
    To: ietf-dav-versioning@w3.org
    Subject: new "Advanced Versioning Semantics" section
    
    
    OK, here's a stab at improving the advanced versioning semantics
    section.  Please let me know if this is in fact an improvement.  I've
    uploaded a new working draft (4.3) of the protocol to
    http://www.webdav.org/deltav site if you'd like to see this section in
    context.
    
    Cheers,
    Geoff
    
    
      8  ADVANCED VERSIONING SEMANTICS 
    
      8.1 Target Selection and Workspaces 
    
           Core versioning provides a label as a target selector that can be 
           used to select a consistent set of revisions, but provides no 
           mechanism for selecting a consistent set of working resources.  In 
           addition, core versioning provides no mechanism for a client to 
           determine whether a given label is already in use for some other 
           purpose. In order to address these issues, advanced versioning 
           introduces the concept of a "workspace" resource. 
    
           A workspace URL can be used wherever a label or working resource id 
           can appear. Unlike a label, a new workspace is registered with a 
           MKWORKSPACE request, thus ensuring that a client will not 
           mistakenly use a target selector already in use by another client.  
           Unlike a working resource id, which is allocated by the server for 
           a single versioned resource, a workspace can be used by a client to 
           identify multiple working resources.  This significantly simplifies 
           a client implementation by allowing the use of a single URL to 
           identify a consistent set of revisions and working resources.   
    
           A workspace is initially populated with SET-TARGET requests that 
           cause it to select a particular set of revisions.  A CHECKOUT 
           request that specifies that workspace in a Target-Selector header 
           creates a new working resource identified by that workspace.  A 
           subsequent CHECKIN request creates a new revision that is selected 
           by the workspace.   
    
           If no workspace is specified for a request, a server determined 
           "default workspace" is used. This is the workspace used by all 
           versioning-unaware clients.  A server can associate different 
           default workspaces with different URL's, and thereby expose 
           multiple workspaces to versioning unaware clients. 
    
           When a lock is applied to a versioned resource, the namespace 
           locking implied by that lock (i.e. the inability to MOVE or DELETE 
           that resource) holds only in the workspace specified for the lock 
           request. When no workspace is explicitly specified by the lock 
           request, the namespace locking applies to the default workspace. 
    
    
      8.2 Baselines 
    
           A workspace selects a volatile set of revisions.  When a workspace 
           is placed under version control, workspace revisions called 
           baselines can be created to capture the set of revisions selected 
           by the workspace at a particular moment.  This can be useful for a 
           variety of purposes such as publishing consistent revisions of 
           resources to deploy an application, or for recovering a specific 
           state for legal or maintenance reasons. 
    
    
      8.3 Parallel Development and Merging 
    
           When all clients are using the same workspace, a change made by one 
           client is immediately visible to all other clients.  In situations 
           where the work of one client would be disrupted by changes made by 
           other clients, it is desirable to allocate a separate workspace for 
           that client.  When that client is ready to see changes made by 
           clients in another workspace, it can "merge" that other workspace 
           into its workspace.  Since the revisions selected by a workspace 
           could change in the middle of the merge operation, it is common to 
           merge a baseline created by that other workspace, rather than just 
           the revisions currently selected by that other workspace. 
    
           In case the other workspace selects a revision of a versioned 
           resource that is on a different line of descent than the one 
           selected by the workspace (neither revision is an ancestor of the 
           other), the contents of those revisions must be merged.  For each 
           versioned resource with such a conflict, the merge request will 
           create a new working resource with the appropriate revisions as the 
           predecessors.  The client is responsible for modifying the contents 
           of the working resource so that it represents the logical merge of 
           the two revisions, and then checking in the working resource. 
    
           Normally, the "merge state" of a working resource created by a 
           merge request is "initial", indicating that the contents of the 
           working resource is just a copy of the revision originally selected 
           by the workspace.  In case the server is capable of performing part 
           of the merge automatically, it indicates that it has done so by 
           setting the merge state of the working resource to be 
           "intermediate".  If the server believes it has correctly merged the 
           revisions, it indicates that it has done so by setting the merge 
           state to be "final".  Even if the merge state is final, it is still 
           the responsibility of the client to verify that the merge is 
           correct, and then to checkin the working resource. 
    
           Another reason a client may choose to use a separate workspace is 
           to allow concurrent modification of the same versioned resource.  
           Each workspace has its own working resource for that versioned 
           resource, and the merge operation ensures that these concurrent 
           changes will be merged instead of one overwriting the other. 
    
    
      8.4 Activities 
    
           In some advanced versioning scenarios, several different logical 
           changes are performed in a single workspace, but another workspace 
           only wants a subset of those changes.  An "activity" resource 
           provides the mechanism for addressing this problem.  Each activity 
           represents a single logical change, although many resources might 
           need to be modified to effect that single logical change.  When a 
           working resource is created, the client specifies which activity 
           that working resource will contribute towards.  When a working 
           resource is checked in to create a new revision, the association 
           between the working resource and an activity is inherited by the 
           newly created revision.  The results of an activity can then be 
           merged into another workspace with a MERGE request. 
    
           Another use for an activity is to avoid merges.  Since only one 
           working resource of a versioned resource can be checked out in the 
           context of a given activity, two clients can avoid merging with 
           each other by selecting the same activity as the current activity 
           of their workspaces.  If one client attempts to check out a 
           versioned resource already checked out by the other client, the 
           checkout request will fail.  The client would then have to either 
           checkout the versioned resource in a different activity, or wait 
           until the other client checked in its working resource for that 
           versioned resource.