- From: Geoffrey M. Clemm <geoffrey.clemm@rational.com>
- Date: Mon, 29 Jan 2001 15:52:58 -0500 (EST)
- To: ietf-dav-versioning@w3.org
From: Edgar@EdgarSchwarz.de I agree to the the sentiment somebody raised that DELTA-V is rather complex. So I also would like to see a companion document (E.g. the FAQ mentioned in a recent posting). Variants e.g. would need an entry there in the context of solving the "meaningful URL" scenario discussed in the mailing list. Will do. If you can add these as "questions" in the auto-faq that was recently put up on the deltav site, that would be great, and I'll get "answers" posted. Now my model and scenario for an application. I tried to make the example it as small as possible but still meaningful enough. The complete application has several variants. So a variant consists of of common and special components, where a component is defined by the members (not shown below) of a collection. The versioning protocol uses the term "configuration" for what you are calling a "component". So if you want to track "configuration versions" (i.e. "baselines"), you would put the appropriate collections under baseline control. In the deltav, we use the term "variant" for a set of version-controlled resources whose names are chosen by the server, whereas in your example below, your variants (app/sun and app/win) have been named by the client, so to avoid confusion with the deltav use of the term, it's best not to use the term "variant" to describe them. Now let's have a look at the version history world and the newest version of the component. To avoid any misunderstanding, DeltaV would say "the newest baseline of the baseline-controlled collection". Remember that the hierarchy of the version histories doesn't imply that a baseline (what I would have called just a version) of a collection belongs to a baseline of a parent collection. This relation could probably be realized by a subbaseline. Actually, what you have below is what deltav would call a hierarchy of "version-controlled resources" ... the version histories have random server assigned (non-human-meaningful) names. But I agree that the version-controlled resource hierarchy does not imply that a baseline of a baseline-controlled collection "belongs" to a baseline of a parent baseline-controlled collection, and I also agree that this relation is realized by the subbaseline relation. For components I added a version number. app#1 doc common#1 sun#1 win#1 gui sun#1 win#1 code common#1 sun#1 win#1 sun#1 win#1 The versioning protocol would call this a version-controlled resource hierarchy, with baseline-controlled collections annotated by the DAV:checked-out baseline of their version-controlled configuration. For the complete project with all components I say: app#1 = app/sun#1,app/win#1 Which is to say, baseline "app#1" has subbaselines "app/sun#1" and "app/win#1". The variants would be defined like this: app/win#1 = app/doc/common#1,app/doc/win#1,app/gui/win#1, app/code/common#1,app/code/win#1 app/sun#1 = app/doc/common#1,app/doc/sun#1,app/gui/sun#1, app/code/common#1,app/code/sun#1 I.e. the baselines app/win#1 and app/sun#1 have the specified subbaselines. Now somebody wants to work on the win part of the stuff (needs more bugfixes than SUN I guess :-). He is creating a workspace containing the stuff he needs (Mapping collections to the workspace according to developers taste. This feature avoids lenghty discussions on code structuring :-). As a side note, having the developers making up names for the components would make me worry about breakage of the inter-component #include and Makefile references, but maybe I just worry too much (:-). winbugws doc common (app/doc/common) win (app/doc/win) gui (app/gui/win) code common (app/code/common) win (app/code/win) app (app/win) So the developer has created a workspace called "winbugws", and has put the winbugws/doc/comm, winbugws/doc/win, winbugws/gui, winbugws/code/common, winbugws/code/win, and winbugws/app collections under baseline control, using the DAV:checked-in baseline from the specified baseline-controlled collections in the "team" tree of version-controlled resources described above. Suppose he changes some stuff in the win gui. This will mean there is a app/gui/win#2. So that must mean he made changes in winbugws/gui, checked out the version-controlled configuration of winbugws/gui, and then checked it back in to create the new baseline (i.e. app/gui/win#2). Now he would create an new win baseline: app/win#2 = app/doc/common#1,app/doc/win#1,app/gui/win#2, app/code/common#1,app/code/win#1 So that meant that he checked out the version-controlled configuration of winbugws/app, PROPPATCH'ed its DAV:subbaseline property to replace app/gui/win#1 with app/gui/win#2, and then checked it back in to create the new baseline, app/win#2. If somebody creates a new baseline of the complete project later only the win version number needs updating: app#2 = app/sun#1,app/win#2 Which means that he checked out the version controlled configuration of app, and PROPPATCH'ed its DAV:subbaseline property to replace app/win#1 with app/win#2, and then checked it back in to create the baseline app#2. That describes in short what I built with RCS and Unix scripts. The implementation isn't very efficient and restricted to one site. But the concept worked for a couple of thousand files, some dozens of developers and a lot of variants over a couple of years. Looks fine to me. I guess I can realize this concept with DELTA-V following the way Geoff described in an earlier reply. Geoff, perhaps you could add this scenario and it's tranlation to DELTA-V to the FAQ document ? Just a question. Sorry, that I want you to do additional work but you are the person who could do it best I think. This scenario is probably better located in the "scenario's" document rather than the FAQ, but I agree that this is a good scenario to document. Now finally some comments to the draft: As I understand it at the moment subbaselines are very important to port my model to DELTA-V. So I'm not happy to read in 10.2.2: "A server that supports the baseline option MAY choose to not support the DAV:subbaseline-set property". I would like to drop this sentence or at least change "MAY choose to not support" to "SHOULD support". Practically speaking, there isn't much difference between "MAY choose to not support" and "SHOULD support", but I'd be happy to make this change if nobody objects. Does anybody object? So the question is, do others also think my model makes sense and should be available to clients if the server supports baselines ? Or are subbaselines a heavy burden on servers or server writers, so they want to avoid them ? I don't think anyone disagrees with the concept of a sub-baseline. But I believe that there are a number of versioning systems that support baselines but that do not (yet) support sub-baselines, and so a client needs to be prepared for that situation (producing efficient, reliable, scalable subbaseline support is actually not that easy). 1.3.1 Configuration "Note that a collection (which is a single resource) is very different from a configuration (which is a set of resources)" In "Collection Resource" you state that "A collection ... consists of ..., a set of named bindings ... . Note that a binding is not a resource ...". Nevertheless this set of binding logically is equivalent to a set of resources. I disagree. Suppose we're at a family reunion and I ask you to give my grandmother a ride home. She has "bindings" to all of her children. Giving just my grandmother a ride home is very different from giving her, her four children, and her 28 grand-children a ride home (:-). So I'm not sure I see the big difference between collection and configuration. The difference is critical when apply an operation. Basically, it's the difference between a "Depth:0" operation and a "Depth:infinity" operation. In versioning, this is the difference between a "version" and a "baseline" of a collection. 10 Baseline Option "... A Configuration that contains a large number of resources can consume a large amount of space. This can make it prohibitively expensive to remember the state of an existing configuration by creating a copy of it's root collection. A 'Baseline' is ..." It doesn't sound good to me to create a new term based on assuming a dumb implementation (Naively creating a copy). Why not just use a "version of a collection"? This was just intended to provide motivation for why you need a "version" of a collection at all. Some reasons for distinguishing between a (depth:0) version of a collection and a (depth:infinity) baseline of a collection are given in the version-controlled collection section. Efficient implementation is the task of the implementation, not the protocol. But it is the task of the protocol to allow for efficient implementations, and to allow for a variety of implementations. So my main problem left with the latest draft is that I see two similar concepts: Configurations and Baselines to capture their state versus Version-Controlled-Collections and their versions. Yes, it's the difference between capturing the Depth:infinity state of a collection and the Depth:0 state of a collection. I admit that there are differences but nevertheless my feeling is that these two concepts should be merged somehow. I fear they will confuse future users of DELTA-V. So at least I would like to have the rationale to make them different made clear in the aforementioned FAQ. Fair enough. Another alternative perhaps would be 12. You describe some reasons for version controlled collections (Mentioning activities, workspaces and merging. So it seems there is some entanglement between options. Which probably is unavoidable I fear). Could you also mention the difference to configurations and baselines here ? That's a good suggestion. I'll see if I can reword section 12 to make that point there. Cheers, Geoff
Received on Monday, 29 January 2001 15:53:54 UTC