List Info

Thread: UPDATE method and forking




UPDATE method and forking
user name
2006-03-15 18:43:39

If you don't want to use either workspaces or working resources,
then you would just use the base WebDAV functionality for handling
multiple clients concurrently updating the same resource, i.e. locking.

So in your original sequence, just wrap the sequence in an LOCK/UNLOCK
pair, i.e.:  

LOCK the version-controlled resource
> - Retrieve the current checked-in version. (PROPFIND)
> - Set it to the most recent version in a "branch". (PROPFIND, UPDATE)
> - Perform a check-out or anything else that can be done on a version
>   controlled resource. (CHECKOUT, GET, PUT, CHECKIN)
> - Set the checked-in version back to what it was. (UPDATE)

UNLOCK the version-controlled resource.

Cheers,
Geoff

Werner wrote on 03/15/2006 08:31:46 AM:
> I'm not referring to working resources and I know that normally
> workspaces should be used to work in parallel. However, the
> workspaces feature is optional and the checkout-in-place feature
> doesn't depend on it. The checkout-in-place feature provides
> forking and therefore the model should be consistent in the
> absence of the workspaces feature.
>
> According to me forking and workspaces are unrelated. The forking
> functionality stands on its own. When a fork is allowed for some
> version, it may have more than one successor. The only way to
> address a particular successor, for a check-out operation for example,
> is by setting the checked-in version of the VCR to it. This is a
> global state change.


> Geoffrey M Clemm wrote:
> >
> > I believe you are confusing the "checkout-in-place" feature and
> > the "working-resource" feature.  
> >
> > In the "checkout-in-place" feature, you make your changes
> > directly on the VCR.  If two clients want to be working
> > in parallel, they would have separate workspaces, and each
> > client would have its own VCR, so the VCR is not shared global
> > state, but rather is private state for the client that owns
> > that workspace.
> >
> > In the "working-resource" feature, you do apply the
> > CHECKOUT directly to a version (see section 9.3), so again,
> > there is no mutable global state for which there would
>; > be contention.
> >
> > The only time in which there is shared mutable state is when
> > two clients are sharing the same workspace.  In this case,
>; > the primary problem you face is the standard "lost update" problem
> > while you are authoring the content, and the solution is the
> > standard WebDAV solution: use the LOCK method.
> >
> > Cheers,
> > Geoff
>; >
> > Werner wrote on 03/15/2006 04:30:19 AM:
> >>
> >> The UPDATE method can be used to set the checked-in version of a
> >> version controlled resource to a version which has descendants.
> >> At that point a check-out may fork, resulting in the checked-in
> >> version to have more than one descendant.
> >>
> >> This way a tree can be built. If one wants to grow the different
> >> branches of such a tree, the UPDATE method should be used to set
> >> the checked-in version of the version controlled resource
> >> appropriately. This, however, changes global state, which could
> >> lead to races.
> >>
> >> The complete operation the client would do is the following sequence:
> >> - Retrieve the current checked-in version of the version controlled
> > resource.
> >> - Set it to the most recent version in a "branch".
> >> - Perform a check-out or anything else that can be done on a version
> >>   controlled resource.
> >> - Set the checked-in version back to what it was.
> >>
> >> For this to work in a multi-user environment, either the sequence
> >> should be executed atomically and in isolation, or methods such as
> >> check-out should be allowed to operate on versions as well.
>;
> --
> Werner Donné  --  Re BVBA
> Engelbeekstraat 8
> B-3300 Tienen
> tel: (+32) 486 425803   e-mail: werner.donnere.be
>;
UPDATE method and forking
user name
2006-03-16 10:12:06
Geoff,

I understand it can be done like that, but I have two
remarks:

1) Such a scenario should in fact be one transaction. The
proposed
   solution doesn't protect integrity. Currently the choice
is not
   to expose transaction demarcation to the client. That
implies
   the WebDAV model shouldn't expose scenarios which
require transactions
   either.

2) The locking mechanism in a versioning system is not
designed to
   implement transactional isolation. It is merely for
long-duration
   reservations of versions.

I agree that workspaces are the feature for working in
parallel, but
what is then the use of forking? Which problem does it
solve?

Regards,

Werner.

Geoffrey M Clemm wrote:
> 
> If you don't want to use either workspaces or working
resources,
> then you would just use the base WebDAV functionality
for handling
> multiple clients concurrently updating the same
resource, i.e. locking.
> 
> So in your original sequence, just wrap the sequence in
an LOCK/UNLOCK
> pair, i.e.:  
> 
> LOCK the version-controlled resource
>> - Retrieve the current checked-in version.
(PROPFIND)
>> - Set it to the most recent version in a
"branch". (PROPFIND, UPDATE)
>> - Perform a check-out or anything else that can be
done on a version
>>   controlled resource. (CHECKOUT, GET, PUT,
CHECKIN)
>> - Set the checked-in version back to what it was.
(UPDATE)
> UNLOCK the version-controlled resource.
> 
> Cheers,
> Geoff
> 
> Werner wrote on 03/15/2006 08:31:46 AM:
>> I'm not referring to working resources and I know
that normally
>> workspaces should be used to work in parallel.
However, the
>> workspaces feature is optional and the
checkout-in-place feature
>> doesn't depend on it. The checkout-in-place
feature provides
>> forking and therefore the model should be
consistent in the
>> absence of the workspaces feature.
>>
>> According to me forking and workspaces are
unrelated. The forking
>> functionality stands on its own. When a fork is
allowed for some
>> version, it may have more than one successor. The
only way to
>> address a particular successor, for a check-out
operation for example,
>> is by setting the checked-in version of the VCR to
it. This is a
>> global state change.
> 
> 
>> Geoffrey M Clemm wrote:
>> >
>> > I believe you are confusing the
"checkout-in-place" feature and
>> > the "working-resource" feature.  
>> >
>> > In the "checkout-in-place"
feature, you make your changes
>> > directly on the VCR.  If two clients want to
be working
>> > in parallel, they would have separate
workspaces, and each
>> > client would have its own VCR, so the VCR is
not shared global
>> > state, but rather is private state for the
client that owns
>> > that workspace.
>> >
>> > In the "working-resource" feature,
you do apply the
>> > CHECKOUT directly to a version (see section
9.3), so again,
>> > there is no mutable global state for which
there would
>> > be contention.
>> >
>> > The only time in which there is shared mutable
state is when
>> > two clients are sharing the same workspace. 
In this case,
>> > the primary problem you face is the standard
"lost update" problem
>> > while you are authoring the content, and the
solution is the
>> > standard WebDAV solution: use the LOCK method.
>> >
>> > Cheers,
>> > Geoff
>> >
>> > Werner wrote on 03/15/2006 04:30:19 AM:
>> >>
>> >> The UPDATE method can be used to set the
checked-in version of a
>> >> version controlled resource to a version
which has descendants.
>> >> At that point a check-out may fork,
resulting in the checked-in
>> >> version to have more than one descendant.
>> >>
>> >> This way a tree can be built. If one wants
to grow the different
>> >> branches of such a tree, the UPDATE method
should be used to set
>> >> the checked-in version of the version
controlled resource
>> >> appropriately. This, however, changes
global state, which could
>> >> lead to races.
>> >>
>> >> The complete operation the client would do
is the following sequence:
>> >> - Retrieve the current checked-in version
of the version controlled
>> > resource.
>> >> - Set it to the most recent version in a
"branch".
>> >> - Perform a check-out or anything else
that can be done on a version
>> >>   controlled resource.
>> >> - Set the checked-in version back to what
it was.
>> >>
>> >> For this to work in a multi-user
environment, either the sequence
>> >> should be executed atomically and in
isolation, or methods such as
>> >> check-out should be allowed to operate on
versions as well.
>>
>> --
>> Werner Donné  --  Re BVBA
>> Engelbeekstraat 8
>> B-3300 Tienen
>> tel: (+32) 486 425803   e-mail: werner.donnere.be
>>

-- 
Werner Donné  --  Re
Engelbeekstraat 8
B-3300 Tienen
tel: (+32) 486 425803	e-mail: werner.donnere.be

UPDATE method and forking
user name
2006-03-16 12:29:10

(1) Why does this scenario have to be in one transaction?  In particular,
why isn't it sufficient just to wrap the sequence of operations in
a LOCK/UNLOCK?  

(2) I agree that the locking mechanism is not designed to implement
transactional isolation.  That is what workspaces and working resources
are designed for.  If (for unexplained reasons you don't want to
use the versioning features that were designed for transactional
isolation, it should come as no surprise that you have difficulty
achieving transactional isolation.  Some clients don't want/need
transactional isolation (they just want history to be kept, for example),
which is why workspaces and working resources are optional features
(we define these two different ways of achieving transactional isolation
because some repositories can only support one, while other repositories
can only support the other, and we could find no way of unifying these
two different ways under a single feature).

As for the why support forking, it is an (undesireable, but inevitable)
side-effect of parallel development.  So we don't define it as an
independent feature, but we "deal with it" for those features that
support parallel development (i.e., workspaces and working resources).
In particular, it is what tells you that parallel development has
occurred on a particular resource, and that therefore a merge is
required (the need for a merge when forking occurs is why it is
"undesireable").

So creating forks in a non-parallel development context makes no sense ...
you are just making trouble for yourself.  Which is why forking only
occurs as a side effect of parallel development, and not as a feature that
you explicitly invoke.

Cheers,
Geoff



Werner Donné <werner.donnere.be> wrote on 03/16/2006 05:12:06 AM:
> Geoff,
&gt;
> I understand it can be done like that, but I have two remarks:
>
> 1) Such a scenario should in fact be one transaction. The proposed
>    solution doesn't protect integrity. Currently the choice is not
>    to expose transaction demarcation to the client. That implies
>    the WebDAV model shouldn't expose scenarios which require transactions
>    either.
>
> 2) The locking mechanism in a versioning system is not designed to
>    implement transactional isolation. It is merely for long-duration
>    reservations of versions.
>
> I agree that workspaces are the feature for working in parallel, but
> what is then the use of forking? Which problem does it solve?
&gt;
> Regards,
>
> Werner.
&gt;
> Geoffrey M Clemm wrote:
&gt; >
> > If you don't want to use either workspaces or working resources,
> > then you would just use the base WebDAV functionality for handling
> > multiple clients concurrently updating the same resource, i.e. locking.
> >
> > So in your original sequence, just wrap the sequence in an LOCK/UNLOCK
> > pair, i.e.:  
&gt; >
> > LOCK the version-controlled resource
> >> - Retrieve the current checked-in version. (PROPFIND)
> >> - Set it to the most recent version in a "branch". (PROPFIND, UPDATE)
&gt; >> - Perform a check-out or anything else that can be done on a version
&gt; >>   controlled resource. (CHECKOUT, GET, PUT, CHECKIN)
> >> - Set the checked-in version back to what it was. (UPDATE)
> > UNLOCK the version-controlled resource.
> >
> > Cheers,
&gt; > Geoff
>; >
> > Werner wrote on 03/15/2006 08:31:46 AM:
> >> I'm not referring to working resources and I know that normally
> >> workspaces should be used to work in parallel. However, the
> >> workspaces feature is optional and the checkout-in-place feature
> >> doesn't depend on it. The checkout-in-place feature provides
> >> forking and therefore the model should be consistent in the
> >> absence of the workspaces feature.
> >>
> >> According to me forking and workspaces are unrelated. The forking
> >> functionality stands on its own. When a fork is allowed for some
> >> version, it may have more than one successor. The only way to
&gt; >> address a particular successor, for a check-out operation for example,
> >> is by setting the checked-in version of the VCR to it. This is a
> >> global state change.
&gt; >
> >
> >> Geoffrey M Clemm wrote:
&gt; >> >
> >> > I believe you are confusing the "checkout-in-place" feature and
> >> > the "working-resource" feature.  
&gt; >> >
> >> > In the "checkout-in-place" feature, you make your changes
&gt; >> > directly on the VCR.  If two clients want to be working
> >> > in parallel, they would have separate workspaces, and each
> >> > client would have its own VCR, so the VCR is not shared global
> >> > state, but rather is private state for the client that owns
> >> > that workspace.
> >> >
> >> > In the "working-resource" feature, you do apply the
> >> > CHECKOUT directly to a version (see section 9.3), so again,
> >> > there is no mutable global state for which there would
>; >> > be contention.
> >> >
> >> > The only time in which there is shared mutable state is when
> >> > two clients are sharing the same workspace.  In this case,
>; >> > the primary problem you face is the standard "lost update&quot; problem
&gt; >> > while you are authoring the content, and the solution is the
> >> > standard WebDAV solution: use the LOCK method.
&gt; >> >
> >> > Cheers,
&gt; >> > Geoff
>; >> >
> >> > Werner wrote on 03/15/2006 04:30:19 AM:
> >> >>
> >> >> The UPDATE method can be used to set the checked-in version of a
> >> >> version controlled resource to a version which has descendants.
>; >> >> At that point a check-out may fork, resulting in the checked-in
> >> >> version to have more than one descendant.
> >> >>
> >> >> This way a tree can be built. If one wants to grow the different
> >> >> branches of such a tree, the UPDATE method should be used to set
> >> >> the checked-in version of the version controlled resource
> >> >> appropriately. This, however, changes global state, which could
>; >> >> lead to races.
&gt; >> >>
> >> >> The complete operation the client would do is the following sequence:
> >> >> - Retrieve the current checked-in version of the version controlled
> >> > resource.
> >> >> - Set it to the most recent version in a "branch".
> >> >> - Perform a check-out or anything else that can be done on a version
&gt; >> >>   controlled resource.
> >> >> - Set the checked-in version back to what it was.
> >> >>
> >> >> For this to work in a multi-user environment, either the sequence
> >> >> should be executed atomically and in isolation, or methods such as
> >> >> check-out should be allowed to operate on versions as well.
>; >>
> >> --
> >> Werner Donné  --  Re BVBA
> >> Engelbeekstraat 8
> >> B-3300 Tienen
&gt; >> tel: (+32) 486 425803   e-mail: werner.donnere.be
>; >>
>
> --
> Werner Donné  --  Re
> Engelbeekstraat 8
> B-3300 Tienen
&gt; tel: (+32) 486 425803   e-mail: werner.donnere.be
UPDATE method and forking
user name
2006-03-16 13:01:57
Geoffrey M Clemm wrote:
> 
> (1) Why does this scenario have to be in one
transaction?  In particular,
> why isn't it sufficient just to wrap the sequence of
operations in
> a LOCK/UNLOCK?  

Because anything in between can go wrong, leaving the system
in an
inconsistent state. It can't be the responsibility of the
client to
keep the state consistent. That is a co-operative and hence
unreliable
design.

> 
> (2) I agree that the locking mechanism is not designed
to implement
> transactional isolation.  That is what workspaces and
working resources
> are designed for.  If (for unexplained reasons  you don't
want to
> use the versioning features that were designed for
transactional
> isolation, it should come as no surprise that you have
difficulty
> achieving transactional isolation.  Some clients don't
want/need
> transactional isolation (they just want history to be
kept, for example),
> which is why workspaces and working resources are
optional features
> (we define these two different ways of achieving
transactional isolation
> because some repositories can only support one, while
other repositories
> can only support the other, and we could find no way of
unifying these
> two different ways under a single feature).

This is obviously not at all about what I want or don't
want to use. I'm
reasoning about the WebDAV model. I haven't said I was
against workspaces.

> 
> As for the why support forking, it is an (undesireable,
but inevitable)
> side-effect of parallel development.  So we don't
define it as an
> independent feature, but we "deal with it"
for those features that
> support parallel development (i.e., workspaces and
working resources).
> In particular, it is what tells you that parallel
development has
> occurred on a particular resource, and that therefore a
merge is
> required (the need for a merge when forking occurs is
why it is
> "undesireable").
> 
> So creating forks in a non-parallel development context
makes no sense ...
> you are just making trouble for yourself.  Which is why
forking only
> occurs as a side effect of parallel development, and
not as a feature that
> you explicitly invoke.

Which is what I reckoned and it is an encapsulation flaw.
Clearly, forking
on its own is useless, but it is exposed through the WebDAV
interface with
elements such as "checkin-fork",
"checkout-fork", "fork-ok". There is
no
reason for this, nor for the UPDATE method to be allowed to
change the
checked-in version, which is the source of the problem.
Creating a new
VCR in a workspace from a given version obviously requires
forking, but
that is merely an internal implementation matter.

> 
> Cheers,
> Geoff
> 

Regards,

Werner.

> 
> 
> Werner Donné <werner.donnere.be> wrote on
03/16/2006 05:12:06 AM:
>> Geoff,
>>
>> I understand it can be done like that, but I have
two remarks:
>>
>> 1) Such a scenario should in fact be one
transaction. The proposed
>>    solution doesn't protect integrity. Currently
the choice is not
>>    to expose transaction demarcation to the client.
That implies
>>    the WebDAV model shouldn't expose scenarios
which require transactions
>>    either.
>>
>> 2) The locking mechanism in a versioning system is
not designed to
>>    implement transactional isolation. It is merely
for long-duration
>>    reservations of versions.
>>
>> I agree that workspaces are the feature for working
in parallel, but
>> what is then the use of forking? Which problem does
it solve?
>>
>> Regards,
>>
>> Werner.
>>
>> Geoffrey M Clemm wrote:
>> >
>> > If you don't want to use either workspaces or
working resources,
>> > then you would just use the base WebDAV
functionality for handling
>> > multiple clients concurrently updating the
same resource, i.e. locking.
>> >
>> > So in your original sequence, just wrap the
sequence in an LOCK/UNLOCK
>> > pair, i.e.:  
>> >
>> > LOCK the version-controlled resource
>> >> - Retrieve the current checked-in version.
(PROPFIND)
>> >> - Set it to the most recent version in a
"branch". (PROPFIND, UPDATE)
>> >> - Perform a check-out or anything else
that can be done on a version
>> >>   controlled resource. (CHECKOUT, GET,
PUT, CHECKIN)
>> >> - Set the checked-in version back to what
it was. (UPDATE)
>> > UNLOCK the version-controlled resource.
>> >
>> > Cheers,
>> > Geoff
>> >
>> > Werner wrote on 03/15/2006 08:31:46 AM:
>> >> I'm not referring to working resources
and I know that normally
>> >> workspaces should be used to work in
parallel. However, the
>> >> workspaces feature is optional and the
checkout-in-place feature
>> >> doesn't depend on it. The
checkout-in-place feature provides
>> >> forking and therefore the model should be
consistent in the
>> >> absence of the workspaces feature.
>> >>
>> >> According to me forking and workspaces are
unrelated. The forking
>> >> functionality stands on its own. When a
fork is allowed for some
>> >> version, it may have more than one
successor. The only way to
>> >> address a particular successor, for a
check-out operation for example,
>> >> is by setting the checked-in version of
the VCR to it. This is a
>> >> global state change.
>> >
>> >
>> >> Geoffrey M Clemm wrote:
>> >> >
>> >> > I believe you are confusing the
"checkout-in-place" feature and
>> >> > the "working-resource"
feature.  
>> >> >
>> >> > In the
"checkout-in-place" feature, you make your
changes
>> >> > directly on the VCR.  If two clients
want to be working
>> >> > in parallel, they would have separate
workspaces, and each
>> >> > client would have its own VCR, so the
VCR is not shared global
>> >> > state, but rather is private state
for the client that owns
>> >> > that workspace.
>> >> >
>> >> > In the "working-resource"
feature, you do apply the
>> >> > CHECKOUT directly to a version (see
section 9.3), so again,
>> >> > there is no mutable global state for
which there would
>> >> > be contention.
>> >> >
>> >> > The only time in which there is
shared mutable state is when
>> >> > two clients are sharing the same
workspace.  In this case,
>> >> > the primary problem you face is the
standard "lost update" problem
>> >> > while you are authoring the content,
and the solution is the
>> >> > standard WebDAV solution: use the
LOCK method.
>> >> >
>> >> > Cheers,
>> >> > Geoff
>> >> >
>> >> > Werner wrote on 03/15/2006 04:30:19
AM:
>> >> >>
>> >> >> The UPDATE method can be used to
set the checked-in version of a
>> >> >> version controlled resource to a
version which has descendants.
>> >> >> At that point a check-out may
fork, resulting in the checked-in
>> >> >> version to have more than one
descendant.
>> >> >>
>> >> >> This way a tree can be built. If
one wants to grow the different
>> >> >> branches of such a tree, the
UPDATE method should be used to set
>> >> >> the checked-in version of the
version controlled resource
>> >> >> appropriately. This, however,
changes global state, which could
>> >> >> lead to races.
>> >> >>
>> >> >> The complete operation the client
would do is the following
> sequence:
>> >> >> - Retrieve the current checked-in
version of the version controlled
>> >> > resource.
>> >> >> - Set it to the most recent
version in a "branch".
>> >> >> - Perform a check-out or anything
else that can be done on a version
>> >> >>   controlled resource.
>> >> >> - Set the checked-in version back
to what it was.
>> >> >>
>> >> >> For this to work in a multi-user
environment, either the sequence
>> >> >> should be executed atomically and
in isolation, or methods such as
>> >> >> check-out should be allowed to
operate on versions as well.
>> >>
>> >> --
>> >> Werner Donné  --  Re BVBA
>> >> Engelbeekstraat 8
>> >> B-3300 Tienen
>> >> tel: (+32) 486 425803   e-mail:
werner.donnere.be
>> >>
>>
>> --
>> Werner Donné  --  Re
>> Engelbeekstraat 8
>> B-3300 Tienen
>> tel: (+32) 486 425803   e-mail: werner.donnere.be

-- 
Werner Donné  --  Re
Engelbeekstraat 8
B-3300 Tienen
tel: (+32) 486 425803	e-mail: werner.donnere.be

UPDATE method and forking
user name
2006-03-16 14:11:55

Werner Donné <werner.donnere.be> wrote on 03/16/2006 08:01:57 AM:

>; Geoffrey M Clemm wrote:
&gt; >
> > (1) Why does this scenario have to be in one transaction?  In particular,
> > why isn't it sufficient just to wrap the sequence of operations in
> > a LOCK/UNLOCK?  
&gt;
> Because anything in between can go wrong, leaving the system in an
> inconsistent state. It can't be the responsibility of the client to
> keep the state consistent. That is a co-operative and hence unreliable
> design.


The only thing that can go wrong is that the client neglects to perform
an UNLOCK, which is why there are timeout and administrative override mechanisms
in the locking protocol.  But I agree that many clients would rather not
deal with locks, which is why we introduced the workspace feature.  So lets
focus on whether or not the workspace feature provides what you need.

> > (2) I agree that the locking mechanism is not designed to implement
> > transactional isolation.  That is what workspaces and working resources
&gt; > are designed for.  If (for unexplained reasons you don't want to
> > use the versioning features that were designed for transactional
> > isolation, it should come as no surprise that you have difficulty
> > achieving transactional isolation.  Some clients don't want/need
> > transactional isolation (they just want history to be kept, for example),
> > which is why workspaces and working resources are optional features
> > (we define these two different ways of achieving transactional isolation
> > because some repositories can only support one, while other repositories
> > can only support the other, and we could find no way of unifying these
> > two different ways under a single feature).
>
> This is obviously not at all about what I want or don't want to use.

> I'm reasoning about the WebDAV model. I haven't said I was against workspaces.

Well, to be honest, it is not at all clear to me what you do or do not
want to do (.  The purpose of the WebDAV model is provide a uniform
protocol for accessing the various authoring features provided by
a wide variety of repositories.  So the interesting questions are
"how do I as a client use the protocol to achieve this interesting
use case for a user" and "how do I as a repository use the protocol
to expose this particular feature of my repository to a client&quot;.
Without one of those questions in hand, one cannot have a productive
discussion about the WebDAV model.

> > As for the why support forking, it is an (undesireable, but inevitable)
> > side-effect of parallel development.  So we don't define it as an
> > independent feature, but we "deal with it" for those features that
> > support parallel development (i.e., workspaces and working resources).
> > In particular, it is what tells you that parallel development has
> > occurred on a particular resource, and that therefore a merge is
> > required (the need for a merge when forking occurs is why it is
>; > "undesireable&quot;).
> >
> > So creating forks in a non-parallel development context makes no sense ...
> > you are just making trouble for yourself.  Which is why forking only
> > occurs as a side effect of parallel development, and not as a feature that
> > you explicitly invoke.
&gt;
> Which is what I reckoned and it is an encapsulation flaw. Clearly, forking
>; on its own is useless, but it is exposed through the WebDAV interface with
> elements such as "checkin-fork&quot;, "checkout-fork&quot;, ";fork-ok&quot;. There is no
> reason for this, nor for the UPDATE method to be allowed to change the
> checked-in version, which is the source of the problem.


The way WebDAV (and HTTP) achieves interoperability is by having a client
use a single uniform protocol against a wide variety of servers.  So the
client always uses the UPDATE method to "restore" a version from history,
whether it is working with a server that supports working resources, supports
workspaces, supports both, or supports neither.  Changing the checked-in
version is important when the server supports either workspaces or
working resources, so you have clients uniformly use the UPDATE method.
This means that a client is aware of checkin-fork, checkout-fork, and
fork-ok behavior, so that in behaves properly when it is applied to a
server that supports either workspaces or working resources.

> Creating a new
> VCR in a workspace from a given version obviously requires forking, but
> that is merely an internal implementation matter.


No, it's part of the explicit user model, because when you invoke the MERGE
method, the result of the MERGE method is affected by whether or not there has
been any branching, so the client needs to understand when a branch will occur,
and when it won't.  

Cheers,
Geoff
 


[1-5]

about | contact  Other archives ( Real Estate discussion Medical topics )