- From: Geoffrey M. Clemm <geoffrey.clemm@rational.com>
- Date: Thu, 4 Jan 2001 15:19:43 -0500 (EST)
- To: ietf-dav-versioning@w3.org
From: Greg Stein <gstein@lyra.org> Just verifying an assumption... A baseline is a version resource, which would suggest that I can do a CHECKOUT on that resource, modify it, then check it back in. Well, you could, but it wouldn't do you much good because because you wouldn't be able to modify the DAV:version-set (it does not appear on a working resource). So you have to CHECKOUT a baseline selector, modify it, and then check that back in (the baseline selector uses its baseline-controlled collection to determine what the DAV:version-set will be). In my particular case, the CHECKOUT will be part of an activity, the baseline will *not* be auto-versioned, the checkin will occur as part of merging an activity, and the modifications that I'm considering is simply a PROPPATCH. If you want to modify the properties of the baseline, you would need to LOCK the baseline selector before doing the MERGE. The auto-versioning behavior would keep it checked-out until you released the lock, which gives you time to update the properties (it's probably a good thing to have the lock anyway, to prevent other clients from updating those properties while the baseline selector is checked out). I'm not sure where in the spec it says that "protected" properties are "not protected" on working resources, but I would presume the DAV:version-set and DAV:subbaseline-set properties would fall in this category. [ I don't need to change them, but others might ] A property is protected on a resource iff it is marked as "protected" when it is defined for that type of resource. So a property can be "protected" on one kind of resource, but not on another. I'll add some words to the document to emphasize this. Notice that the DAV:subbaseline-set property is not protected on a baseline selector (so you can PROPPATCH it). You can't PROPPATCH a DAV:version-set property on a baseline selector, because it doesn't have one. Now, one issue that I'm wondering about is the updating of the DAV:version-set at MERGE time. This might actually require a spec change. Normally, a baseline's version-set is updated when the MERGE changes the VCRs' DAV:checked-in property. Actually, a baseline's DAV:version-set is never modified. Rather, it is created when a baseline is created (by enumerating the DAV:checked-in versions of the baseline controlled collection). However, I think the order of operations during the merge would need to be something like: 1) check in all non-baseline working resources 2) update the DAV:version-set of the baseline working resource 3) check in the baseline working resource 4) merge the versions into the VCRs and the baseline selector Currently, it is: MERGE the activity into the (repository) collection: 1) check in all working resources 2) auto-checkout the baseline selector 3) merge the versions into the VCR's 4) auto-checkin the baseline selector, which creates a new baseline whose whose DAV:version-set identifies the VCR checked-in versions of the (repository) collection. Or if you want to modify the properties of the new baseline: LOCK the baseline selector of the (repository) collection MERGE the activity into the (repository) collection: 1) check in all working resources 2) auto-checkout the baseline selector 3) merge the versions into the VCR's PROPPATCH the properties of the locked baseline selector UNLOCK the baseline selector: 1) auto-checkin the baseline selector, which creates a new baseline whose whose DAV:version-set identifies the VCR checked-in versions of the (repository) collection. 2) remove the lock on the baseline selector I'm not sure what the right wording / effect would be. I think that it might be sufficient to say something similar to DAV:update-version-set in S10.12: that each (non-baseline) version checked in by the merge operation is added (or replaces) to the DAV:version-set of the baseline working resource. Obviously this would be ambiguous if multiple baselines were checked out into an activity and merged, but I'm okay with leaving that undefined. Note that you can't match up version histories to see which baseline version-set to update since newly-added resources would have no corresponding version (history) in the checked out baseline. For interoperability, it would be far better to have a single mechanism (baseline selectors and baseline-controlled collections) for creating baselines. We were forced into the client-workspace/server-workspace dichotomy because of significant implementation concerns, but we wouldn't want to extend that dichotomy any farther than we have to. So if it is at all reasonable to use baseline-controlled collections to create baselines, that would be much better. Does this present a problem for subversion? Specifically, I'm looking for a way to add/modify properties on baseline resources. The auto-baseline feature doesn't provide a way to do that, which means that I need to fall back to checking out the baseline. I think a couple sentences can handle what to do when a baseline is being checked in as part of an activity (merge). Can you live with the currently defined LOCK/UNLOCK mechanism for delaying baseline creation until after the properties are updated? Cheers, Geoff
Received on Thursday, 4 January 2001 15:20:37 UTC