- From: Tim Ellison <Tim_Ellison@uk.ibm.com>
- Date: Thu, 13 Dec 2001 12:54:02 +0000
- To: "Ietf-Dav-Versioning (E-mail)" <ietf-dav-versioning@w3.org>
"Kirmse, Daniel" <daniel.kirmse@sap.com> wrote:
> HI,
>
> its getting complicated! First of all many thanks to everyone
> anwsering my questions so far! It helped me a lot.
>
> So next question:
>
> Scenario:
> Suppose a development environment where the development
> codeline is kept in a workspace. Within this Workspace
> there is a VCR /DEV/a.c the checked-in property points
> to version V1.
Ok, so there are two distinct resources, a version-controlled resource at
/DAV/a.c
and a version resource at some server-generated URL, let's say,
/versions/vh1/r23
The checked-in property of the version-controlled resource has a value
that is the URL of the version. This means, "the version-controlled
resource is checked-in (i.e. `immutable`) and it has identical (i.e. a
true copy of) content and dead properties as the version whose URL is in
the DAV:checked-in property" Note that the version-controlled resource
may have different live properties to the version resource.
> Now there is a checkout of the checked-in version of /DEV/a.c
> into a working-resource WR1.
Just to be pedantic, a version is not checked-in (or checked-out for that
matter), but applying CHECKOUT to a version creates a new working resource
with the same content and dead properties as the version.
> In my understanding of DeltaV the checked-in property of the
> VCR is not changed by this action.
Correct, the version-controlled resource is unaffected by the creation of
the working resource. It remains a checked-in version-controlled
resource.
> Now another checkout of the checked-in version into a working-
> resource WR2 is done (i.e. two developer working parallel on
> the same source). Rigth so far?
Sure (assuming liberal fork control) you can create more working resources
by applying CHECKOUT to the version resource.
> If not, is there a way in DeltaV to get done the behavior
> described below?
> Now WR1 is checked in. WR1 disappears the version history
> (VH) of /DEV/a.c contains a new version V2 that is a descendant
> of V1.
Correct.
> In my understanding the checked-in property of the
> VCR is set to V2 during this checkin. Still right?
Nope (we were doing so well up to this point :-)
The version-controlled resource is not updated since there is no tie
between the working resource created by checking out the version, and the
version-controlled resource. So in this scenario, the version-controlled
resource would still have the same content and dead properties as the
version V1.
If you did want to update the version-controlled resource there are two
ways to do this.
(1) Rather than check-out the version to create a working resource you
could have just checked-out the version-controlled resource 'in-place'.
You would then modify the version-controlled resource (PUT, PROPPATCH,
etc.) and check-in the version-controlled resource to create a new
version. However, modifying the resource in-place obviously means that
other clients would see your work in progress. In the trivial case this
is state that you didn't want to version because it was incomplete; but
more seriously it could be a state that is inconsistent because there is
no way to modify the properties and content simultaneously (imagine a
"FOOBAR:last-modified-by" property). So the alternative way is...
(2) send CHECKOUT to the version-controlled resource _with_ a
DAV:apply-to-version flag. Now you have a (hidden) working resource that
is coupled to the version-controlled resource, as evidenced by it's
DAV:auto-update property. Since the working resource is effectively
hidden from other clients, you can modify the content and properties,
numerous times, and finally CHECKIN the working resource. This check-in
will create the new version, delete the working resource, *and* update the
version-controlled resource identified by the DAV:auto-update property.
> Now WR2 is checked in. Checkin fork is forbidden. Because there
> is a descendent to V1 allready and the checkin fork is forbidden.
> So a merge must be forced (how?). After that done the checked-in
> property of the VCR points to the merged version of V2 and the
> checked in version of WR2. Right?
So now, hopefully, you see that you can't get into this mess<g>.
> Background:
> I have a development codeline. A file to edit is a VCR. I want
> the possibility of two (or more) developers working parallel
> with this file. But I want them to do a merge of their work at
> the second checkin (the checkin of the first developer causes
> no problems).
So you would have the DAV:checkin-fork property set to DAV:forbidden for
each version to force the second checking to fail, and force a merge.
> And I want the VCR point to the most current checked-in version
> of its VH automatically. Is this achieveable?
> I think it must be, since this is what can be done using
> Perforce.
Again, by checking out the version 'through' the version-controlled
resource, i.e. by using <DAV:apply-to-version/> you can get the
DAV:auto-update behaviour described above.
Regards,
Tim
Received on Thursday, 13 December 2001 08:18:55 UTC