- From: Greg Stein <gstein@lyra.org>
- Date: Wed, 3 Oct 2001 04:30:10 -0700
- To: "Clemm, Geoff" <gclemm@rational.com>
- Cc: ietf-dav-versioning@w3.org
On Tue, Oct 02, 2001 at 09:47:08AM -0400, Clemm, Geoff wrote: >... > I do believe Roy made a good case for making this behavior > be under client control, so I'd like to modify the marshalling > of the MERGE request so that there is a DAV:auto-activity-checkin > flag to MERGE that indicates whether or not the client wants this > auto-activity-checkin behavior. Does anyone object to this change? Not a problem here. > (I'd like to make the default to not do the checkin, since this > is more consistent with the non-activity semantics of MERGE, which > does not merge checked-out resources. Not a problem. >... > From: Greg Stein [mailto:gstein@lyra.org] > > On Mon, Oct 01, 2001 at 09:50:50AM -0400, Clemm, Geoff wrote: > > Greg: If you split your "commit" into an activity "CHECKIN" > > followed by a baseline "MERGE", I believe you would have the > > right framework for doing branching (in particular, > > We use cheap copies, not branching. > > A "cheap copy" is probably a better name for what I had in mind > anyway, so I'll use that term here instead of "branching". > > In particular, I noticed in the subversion "mapping to WebDAV" design Careful with that doc :-) it could stand some updating... > notes, that you were moving towards using something other than "COPY" > to marshal the creation of a "cheap copy". I believe that > BASELINE-CONTROL is the appropriate way to marshal this. The > DAV:baseline-collection property of a baseline exposes that "cheap > copy" in an interoperable way. Actually, I was planning to do a COPY from somewhere in a BC as the marshalling. For example: COPY /repos/svn/$svn/bc/567/trunk HTTP/1.0 Destination: /repos/svn/$svn/wrk/uuid/branches/gstein-work This contains the revision/path to copy, and the destination in a working collection to copy it to. > > a branch is just a CHECKIN that is not followed by a MERGE). > > This would have CHECKIN of an activity create a new > > subversion revision (aka a DeltaV baseline), but this revision > > wouldn't become the "current" one until you did the MERGE. > > Not supported. > > Isn't this just what a "cheap copy" is (i.e. a new revision that does > not replace the current one)? The copy occurs within a set of working resources. To get a revision, you must check in those resources. That revision is then "current". A cheap copy means that copying a tree does not duplicate the entire tree in the repository. Effectively, we create a symlink within the repository. A copy is unrelated to the revisions -- the latter is a feature of the entire repository, while copies of files/dirs are structural things *within* a repository. > And don't you provide a way to "merge" > one "cheap copy" into another (i.e. a MERGE)? We have code for merging two trees, but the user model for doing that (and the resulting marshalling for the feature) is not yet decided. [ we merge trees when you checkin an activity, and the changes get merged with the current revision ] > I assume the reason you don't want to always use a CHECKIN/MERGE sequence > is that your revisions, although cheap, I believe you've led yourself down the wrong path :-) Our cheap copies are not on a revision basis, but they are about copying files/dirs *within* the repository. A given checkin could have dozens of copy operations. The resulting repository looks like a standard tree, but we happen to represent it without a lot of duplication, and with history about the copy. > are expensive enough > you don't want to create them more often than is necessary > (i.e. only do the CHECKIN if the MERGE will succeed)? Revisions are cheap. There's no problem with spitting out hundreds of them (technically; that many could blow up people's brains) We can't do a CHECKIN/MERGE because the checkin operation automatically merges. Thus, we could not support a client that looks at those operations as a two step process. Our operation is a single "checkin and merge", and the current MERGE semantics models that. The basic issue here is that the model used by Subversion (and I suspect a goodly number of other systems) does not provide for checking in a new "head" revision and hiding it until somebody cares to make it visible. > > If so, I believe this would then remove your need for > > having CHECKIN be a side effect of MERGE. But this of course > > works only if subversion allows a new revision to be created that > > does not immediately become the current revision. But don't > > you have to do that to support branching? > > Effectively, we do: > > $ svn cp /trunk /branches/gstein-work > > Could that be marshalled as: > > <create baseline for /trunk> > BASELINE-CONTROL /branches/gstein-work > <D:version> <the-trunk-baseline> </D:version> No. We aren't copying baselines. We're copying the "/trunk" directory. The destination is a working resource, not something that would go under baseline control. > Hmm. I just realized that the original question made it seem like > some weird side effect. But in the case under discussion, you're > doing a MERGE on an *activity*. Thus, it makes perfect sense to > take all resources contained in that activity as the merge source. > > Yes, if the activity is "done". Roy's examples were for cases > where the activity has an interesting state you want to merge > into your workspace, even though the activity is not yet done. Sure... Roy's examples are quite valid. I think the original question was a misdirection. Cheers, -g -- Greg Stein, http://www.lyra.org/
Received on Wednesday, 3 October 2001 07:26:07 UTC