Subject: About COPY Overwrite:T Depth:0

From: "Javier Godoy" <[email-masked]>
Date: Wed, 14 Dec 2011 21:17:32 -0300

RFC 4918 section 9.8.4 defines overwrite with Depth:infinity (When a
collection is overwritten, the membership of the destination collection after
the successful COPY request MUST be the  same membership as the source
collection immediately before the COPY), but the exact meaning of an overwrite
copy with Depth:0 is not defined.

I would like to know what is the expected behavior of a COPY with Overwrite:T
and Depth:0? i.e. whether /dst/bar exists or not, after the following methods
are executed in order:

MKCOL /src
MKCOL /src/foo
MKCOL /dst
MKCOL /dst/bar
COPY /src to /dst with Depth:0 and Overwrite:F

>From RFC 4918, section 9.8.3: A COPY of "Depth: 0" only instructs that the
collection and its properties, but not resources identified by its internal
member URLs, are to be copied.

The Litmus test suite (v0.13) does not check this behavior. There is a fork of
Litmus that expects the resource to exists after the Depth:0 copy (test
depth_zero_copy in http://github.com/tolsen/litmus/), but the test suite of
PerlDAV v0.45 takes the opposite approach (test 6_dav_copy_move.t). What is
the correct interpretation?

Best Regards

Javier

---

From: Werner Baumann <[email-masked]>
Date: Sun, 18 Dec 2011 22:11:47 +0100

Copy with Depth: 0 is one of the fancy ideas of RFC 4918 that was never
seriously defined, just as Collection is mostly undefined.
Copy - with or without Overwrite - of collections only makes sense with
Depths: infinity. Depth 0 or 1 will work when the depth of the tree is
0 or 1 in which case you could use Depth infinity as well. Otherwise
you will get orphaned members or mappings to non-existent members. Or
you create a copy of a collection that isn't a copy because it has a
different list of direct members.

Cheers
Werner

---

From: Julian Reschke <[email-masked]>
Date: Sun, 18 Dec 2011 22:58:31 +0100

> seriously defined, just as Collection is mostly undefined.

Well, it's seriously defined, but maybe it needs to be clarified.

WRT collections: what exactly is the problem?

> 0 or 1 in which case you could use Depth infinity as well. Otherwise

Depth: 1 isn't defined in 4918.

> different list of direct members.

I'm losing you.

The spec says:

"A COPY of "Depth: 0" only instructs that the collection and its 
properties, but not resources identified by its internal member URLs, 
are to be copied."

The problem I can see is that if you read this literally, you'd copy the 
bindings to the member resources, which is unlikely to be intended. 
Sounds like an erratum to me.

Do you see other problems?

Best regards, Julian

---

From: "Javier Godoy" <[email-masked]>
Date: Wed, 21 Dec 2011 08:14:19 -0300

On 2011-12-18 18:58, Julian Reschke wrote:

> properties, but not resources identified by its internal member URLs, are to
> be copied."
>
> bindings to the member resources, which is unlikely to be intended. Sounds
> like an erratum to me.
>

It follows that the requirement in Section 9.8.4 does not hold if Depth is 0:
"when a collection is overwritten, the membership of the destination
collection after the successful COPY request MUST be the same membership as
the source collection immediately before the COPY."

I agree it looks like an erratum.

Best Regards

Javier

---

From: Manfred Baedke <[email-masked]>
Date: Wed, 21 Dec 2011 13:19:30 +0100

On 21.12.11 12:14, Javier Godoy wrote:
>> are to
Not necessarily. I think this is intented to prevent a non-empty 
collection from being overridden by an empty collection. The COPY with 
Depth:0 must fail then.

Regards,
Manfred

-- 
Manfred Baedke

<green/>bytes GmbH
Hafenweg 16
D-48155 Mnster
Germany
Amtsgericht Mnster: HRB5782