Subject: Re: Bindings, Locks, and MOVE

From: [email-masked]
Date: Thu, 16 Sep 1999 13:20:19 -0400

From: [email-masked]

   <jc/> Geoff, please check me if I'm wrong... but I think kevin is
   talking about COPY/MOVE'ing ***TO** the multiply bound resource, not
   from.  As currently written, the COPY/MOVE does a delete on the
   destination right up front... so the binding to a shared object is
   lost.  A PUT to either URI of the resource doesn't break their ability
   to share the resource.

   <gmc>
   Ooops!  Jason is completely right.  Sorry about the bandwidth wastage.
   So I'd like to retract my earlier posting, and just agree with Kevin
   that a COPY that preserves destination bindings is a useful operation
   that is currently not provided by the protocol.

   As a form of penance, I will propose a solution to this problem:

   Add "DAV:merge" as a new potential value of the Overwrite header
   when used with the COPY request.

   The semantics COPY with Overwrite=DAV:merge is to "merge" the source
   resource into the destination resource.  In case of non-collection
   resources, this is just the equivalent of a PUT and a PROPPATCH into
   the Destination.  In case of collection resources, it means
   recursively PUT/PROPPATCH from the members of the source collection
   into the corresponding member of the destination collection.

   Any takers?
   </gmc>
<jlc>
I'm a taker.  I think this is good.  Very good.  But I'm not sure if I want to
add something that seems entirely new when we have less than three weeks before
our deadline.  Let's see how things
go.  (BTW, I can also envision a MOVE version of this... but that's messier and
a tangent.)

Anyway, just to clarify...  for a given source resource.... given what is at
it's
intended destination, what action must occur...

\  orig
 \ Dest
 S\
 r \
 c  \
     \     empty      |     non-Coll     |   Collection
      +---------------+------------------+----------------
      |NC->E          |NC->NC            |NC->C
non   |               |                  |
Coll  |   copy it     |     ?replace?    |       ?
      |               | (bind new copy?) |
      |               |                  |
     -+---------------+------------------+----------------
      |C->E           |C->NC             |C->C
      |               |                  |
Coll  |   copy it     |         ?        |   copy members
      |   & members   |                  |     only
      |               |                  |
      |               |                  |

I've also labeled each box for reference: NC->E, etc.

J.

---

From: "Geoffrey M. Clemm" <[email-masked]>
Date: Fri, 17 Sep 1999 00:24:37 -0400

From: [email-masked]

   <gmc>

   <jlc> 

    S\ Dest
    r \
    c  \

   </jlc>

<gmc>
NC->NC is a combined PUT/PROPPATCH.  All bindings to the destination
continue to be valid.

C->NC replaces NC with a copy of C.  Any bindings to NC are now bindings
to the copy of C.  If the server cannot do this rebinding, it must fail
the COPY request.

NC->C replaces C with a copy of NC.  Any bindings to C are now bindings
to the copy of NC.  If the server cannot do this rebinding, it must fail
the COPY request.

C->C Recursively perform the merge MOVE from every member of the source
collection to the corresponding member of the destination collection.
</gmc>

Cheers,
Geoff