- From: Clemm, Geoff <gclemm@rational.com>
- Date: Sat, 15 Sep 2001 11:59:25 -0400
- To: ietf-dav-versioning@w3.org
From: Roy Seto [mailto:Roy.Seto@oracle.com] I'm looking at the behavior of the MERGE method when it is rerun. I'd like clarification of the DAV:update-merge-set postcondition in Section 11.2 for this scenario. Specifically, if a merge target was already checked out before the second or later MERGE, and its DAV:merge-set or DAV:auto-merge-set already includes the merge source, does the merge target appear in a DAV:response XML element in the response body? Yes, this is required by the last sentence of the DAV:update-merge-set postcondition. I feel this is ambiguous in draft-18. The DAV:update-merge-set postcondition does apply to this merge target, because it was already checked out before the MERGE, and its DAV:checked-out version is not a descendant of the merge source (assuming a client has not moved the merge source from DAV:merge-set to DAV:predecessor-set between the MERGE requests). However, the state of the merge target does not actually change in the second MERGE request, since adding a source to a DAV:merge-set which already contains it doesn't change the DAV:merge-set property. The last sentence of DAV:update-merge-set applies to any target that matches this postcondition, i.e.: If the merge target was checked out by the MERGE (or was already checked out before the MERGE), and if the DAV:checked-out version of the merge target is not a descendant of the merge source ... There is no dependency on whether or not the the merge source is already in the DAV:merge-set or DAV:auto-merge-set. If this is not clear, I could move the "must be in a DAV:response" sentence up into the first sentence of this precondition, if you think that would be clearer. [restart example omitted] Alternative options I considered for supporting restart: - The client could do a PROPFIND Depth:infinity and look for resources which have nonempty DAV:merge-set or DAV:auto-merge-set properties, but it seems difficult to make this efficient. It also requires the client to detect the restart case and implement it with a different code path. Well, a client has to do this anyway, if the user doesn't remember what MERGE they performed. But I agree that this would be a challenge to make efficient. One approach is to play a little fast'n'loose with the PROPFIND semantics, and only have the PROPFIND return results with non-empty DAV:(auto-)merge-set properties, and just use an index on those properties to optimize the speed of the PROPFIND. - The client could do a DASL query to optimize the PROPFIND above if DASL were standardized. Yeah, that would be nice (:-). And of course, option 3 is to just use the DAV:merge-preview report to get the info you need. -- I have a similar question about the behavior of the DAV:merge-preview REPORT after the corresponding MERGE has already been done. If a merge target requires a merge, and its DAV:merge-set or DAV:auto-merge-set already includes the merge source, does the response body include it in a DAV:conflict-preview element? (For reasons similar to the DAV:update-merge-set case, I prefer that it must.) The merge-preview element contains all resources that "need to be merged". Whether or not something needs to be merged is not changed by that version already being in the DAV:merge-set. So DAV:merge-preview definitely works the way you want (and was intended to do so). Cheers, Geoff
Received on Saturday, 15 September 2001 12:00:05 UTC