From: jamsden@us.ibm.com To: ietf-dav-versioning@w3.org Message-ID: <85256783.006A5879.00@d54mta03.raleigh.ibm.com> Date: Tue, 1 Jun 1999 14:17:49 -0400 Subject: Review of dav-versioning-01.3 Section 1 Introduction: automatic versioning support for HTTP/1.1 and WebDAV class 1 and 2 clients 3rd item: its not files or branching, it's just basic parallel development. 4th item: configuration's aren't for parallel development. Should have said configurations and sophisticated parallel development. Section 1.1: should specify relationship to DAV class 1 and 2 servers too. Section 2 Concepts and Definitions: Terms and definitions should be taken from the goals document. Those given here are not as complete as the ones in the goals document, and we want to avoid redundancy, update anomolies, and inconsistencies. Introduction should be taken from the overview in the versioning document. use resources like index.html instead of foo.htm to make the examples more realistic and avoid windows 8.3 file restrictions. Section 2.2: the revision the method is applied to should be called the "selected revision", not target. Target is too overloaded. 2.4 The definition of revision name is missing. 2.5 Its just revision label in the goals document, it isn't necessary to introduce label-id as an alias. 2.6 Mutable property means something different than mutable revision. Any property of a mutable revision can be updated without creating a new revision with checkin overwrite, just like the contents. A mutable property is one that can be changed without checking out the revision at all. reviion->revision. 2.7 Comments similar to mutable object/property. Last sentence: created not create. 2.8 Working Resource: ...can be directly modified by a PUT or PROPPATCH request, or any request that changes the persistent state of the resource contents or properties. The pictures seemed to get moved around when the document was printed, and they crossed page boundaries. They should follow the definitions? 2.12 Workspace should include both a current label and current activity. They can be used together and this would allow a more seamless transition from level 1 to leve 2 versioning with activities. The current label can remain set and some checkouts can be done with activities and some without. Need to have consistent use of '-' in definitions and header names. Sometimes they are used in definitions and other times not. What's the convention? DAV class 2 didn't use '-' to separate words in property names. Perhaps it should have, but should we be consistent with the versioning headers? 2.13 Default Workspace: The default workspace must have "latest" in its revision selection rule (unless administrator changes it to something else). If so, then the DAV:current-label property doesn't need to be set. Not clear what it should be anyway, and if it is set, then this label would need to be in the RSR. Simple workspaces don't support RSRs. 2.17 Baselined-Collection: its not really a special type of versioned collection, all versioned collections can have baselines. 3.3 Discovery: can we use the DAV header and introduce class 3 and 4 instead of introducing a new header and leveling scheme? Can we use OPTIONS * to get properties on the server as opposed to a resource? 4.1.2 Immutable/Mutable Properties: how does this relate to live/dead properties. Note that some of the versioning properties should not be copied at all, and should definately not be copied live to the destination. This property meta-data could be specified as attributes of the property. Yaron, is this OK? 4.2.4 DAV:workspaces: why does a revision have to know workspaces? To know where it is checked out? 4.2 Revision Properties: missing a reference to the associated versioned resource this resource is a revision of? 4.2.5 Locking a revision was supposed to do what DAV:single-checkout does. Do we need both? Single-checkout is a property of the resource while locking a revision is access control. So we probably do need both. 4.2.11 DAV:vresource-id: use URL of the resource this is a revision of instead? This would allow down-level clients to access the resource without knowing about ids. Indicate it is assigned by the server and cannot be changed or used as any revision label. Same for section 4.3.6. 4.4.1 DAV:current, use DAV:current-label and add DAV:current-activity (for level 2 versioning). 4.4.2 DAV:revision-selection-rule: Use "revision selector" instead of "elements" to be more specific. Last paragraph: what other revision selectors might be possible? Will this introduce interoperability issues? How would the support be discovered? The servers can support whatever they want, but the interoperability problem comes from the client being able to specify server specific revision selectors. If its just an extensible XML document, this isn't too bad, but clients won't want to expose the XML directly. 5.1.1 GET (and most of the other methods), missing preconditions, semantics, postconditions, detected errors. Also revision selection semantics aren't described anywhere. 5.1.3 PUT: ..."When PUT is applied to a null resource that is an internal member of a working resource for a versioned collection...". Should we stop using the term "internal member" and just use member since there is no distincation anymore between internal and external members? 5.1.4 PROPPATCH: should use DAV:auto-version just like PUT. This would only apply to immutable properties as mutable properties can be modified without checking out the revision. 5.1.5 DELETE: there is nothing to delete after an UNCHECKOUT as it deletes the working resource itself. 5.1.6 COPY: The revision copied should be the specified revision or the revision selected by the workspace. "tip revision" is not defined. If no version-selector is specified, the default workspace is used. Is there a way to copy or move the whole versioned resource? To another server? 5.1.7 MOVE: Why can't a specific revision be moved? What else could be moved for a versioned resource? Even latest is a specific revision. MOVE is best effort which means the source wouldn't have to get deleted, but the binding in its parent collection might be removed if it is unversioned, or checked out. 5.1.8 LOCK: Locks are access control, not authorization. The owner of the lock should be able to perform the operation, but not others if its an exclusive lock. See the section on locking in the Versioning overview: Lock a versioned resource - only the lock owners can checkout any revision in any activity of that versioned resource. Lock a revision - only the lock owners can check out that revision in any activity. Lock an activity - only the lock owners can checkout a revision in that activity. Lock a workspace - only the lock owner can checkout revisions in that workspace or modify the workspace current label, current activity, or revision selection rule. 5.2.1 MKRESOURCE: what is this method for? Creating resources with a specific resource type that cannot be changed? How about allowing resource type to be changed only if it is not set? Or let it be changed to anything and the user gets what he asks for? (Doesn't work for resource types WebDAV needs for its own purposes though). How is it different than PROPPATCH or DELETE followed by PROPPATCH? What does it have to do with versioning? If PROPPATCH doesn't create a resource that doesn't exist, should we just add a header to this method rather than create a new method? 5.2.2 CHECKOUT: Use lock on a revision instead of DAV:single-checkout. Doesn't say it fails if its already checked out. Seems strange to have simple versioning systems implicitly create anonymous branches with no merge support without even issuing a warning. Does CHECKOUT fail of any if the policies specified in the DAV:checkin-policy cannot be satisfied? DAV:checkin-policy might be a good candidate for simplification. 5.2.3 CHECKIN: doesn't describe checkin mutable to create a mutable revision. Doesn't say anything about checkin immutable when the predecessor is mutable. Doesn't describe checkin with overwrite. Checkpoint revision isn't defined. There's no header to specify create a checkpoint. This overloads checkin to do something that isn't a checkin, that is, something that releases the revision so other users can check it out. Consider using a separate method for this function. 5.3.1 Version-Selector: can any revision selector be used? Label, activity, configuration, or workspace? If so what's the precedence order if the names collide. A label could be the same as a workspace name. 6.1.1 Is this the same as 4.2.4? Says what the representation is, but doesn't say what its for. The workspaces this revision is checked out in? Isn't this a revision property, not resource? 6.2.1 Dav:history-resource-id: isn't this needed for version-management too? Should it be a URL instead of an id to make it more useful to down-level clients? 6.2.2 DAV:merge-predecdessors: this one contains bindings while other similar properties contain ids. What does it mean to register a merge, do the updates, and then delete the merge predecessor? Isn't some history lost? After thinking about it, this doesn't seem like a problem after all. The history of the change is still captured in the new revision, and deleting the merge predecessor worst case will only cause the merge conflict to re-appear. 6.4.1 Need both DAV:current-label and DAV:current-activity. 6.5.3 This means that two people can't work on different resources in the same activity in using different workspaces. Why is this restriction required? It seems to significantly limit the value of activities. 6.6.1 DAV:roots: are these cust comments indicating what URL segments were bound to the revisions when the configuration was created, or is something done with them? 6.7.1: DAV:baselines: why is this plural? Doesn't the versioned collection only have one baseline which is a versioned configuration. Its the configuration that has multiple revisions, not the collection that has multiple baselines? ... is a configuration revision whose DAV:roots contains a revision of this collection as its only member. DAV:scope no longer applies. 6.8.1 DAV:versioned-collection: isn't this information in the DAV:roots property? 6.9.3 remove the last sentence about escaping reserved characters. 6.10.1 DAV:history-resources: This seems to be implying a specific server organization. Didn't we say this would be a distinguished collection maintained by the server, say /repo/histories, /repo/activities, etc.? Is this a server property, not repository? 7.1.8 CHECKIN: Separate out baseline creation so that a baseline can be created without having the collection checked out? 7.2.1 GET-CONFLICTS -> CONFLICTS 7. Need DTDs for all these elements.