Message-ID: <F3B2A0DB2FC1D211A511006097FFDDF53438AF@BEAVMAIL> From: Bradley Sergeant <Bradley.Sergeant@merant.com> To: ietf-dav-versioning@w3.org Date: Thu, 14 Oct 1999 09:56:27 -0700 Subject: RE: draft of CHECKOUT method ... <jra> Activities are effectively the name of predecessor/successor arcs in the revision history of a resource. When there is parallel development, a revision has potentially more than one successor, and therefore more than one arc. If activities are not used, then these arcs have no identity and cannot be manipulated by the client through the protocol. Activities provide a way to directly manage multiple lines of descent. I think parallel development without them will be possible, but more difficult, moving more responsibility onto the user without mechanisms in the protocol to help. We should realize that just because a particular repository manager doesn't support the concept of activities doesn't mean it would be impossible, or even hard, to implement them in the WebDAV interface to that repository manager. </jra> <bhs2> I'm not concerned about implementing activities. I want the basic protocol to work and make sense without them if they are optional. This was the point I was trying to make with the "activities are optional" stance. However, looks like this is drifting away from the original point of the mail ... </bhs2> <bhs2> The potential benefit to using the DAV:single-checkout element in DAV:coparams is that it allows the client to say he doesn't want to initiate parallel changes, even though others may be doing so with activities. The downside, which no one has yet mentioned, is that after the checkout happens a parallel guy still might come along and checkout the same revision and put the original client in a parallel situation anyway. To avoid this the client could instead set the DAV:single-checkout property on all the revisions he wants to exclusively checkout, then do the CHECKOUT, then remove the property. The lack of atomicity in this procedure makes it more complicated for the client than need be due to race conditions with other clients (requiring retries, testing for interim changes, etc.). Also, the risk (due to race conditions) is there of inadvertently removing a permanent DAV:single-checkout property applied by someone else. Instead, if their were a mechanism in CHECKOUT and CHECKIN to allow the client to do an exclusive checkout and then remove the exclusivity on check in then this would solve the problem. Note that this especially important where parallel development with activities is being used. There are times when folks want to lock things down for a set of complex changes and avoid the merge hassles. I think we need a simple way to do this. One way to do this would be to define a different element, let's say DAV:exclusive-checkout, to optionally include with DAV:coparams. If there are existing working resources for the selected revision then the checkout fails, if not then the checkout happens and a read-only property DAV:exclusive-checkout is set. This property has the same affect as DAV:single-checkout, but is set only by CHECKOUT and cleared only by CHECKIN. </bhs2> --Sarge