
Here's the status of how well SVNAutoversioning works against various
DAV clients.  Feel free to update this as we learn more.

First, a general note: the one big feature we're lacking is support
for the LOCK and UNLOCK dav requests.  This pretty much means that you
won't be able to open a file (in write mode) directly from the dav
share; every client tries to LOCK in that case.  [Note: mod_dav_lock
in httpd-2.1 addresses this.]

The workaround, for now, is to copy (or drag) the file out of the
share, edit it, then copy (or drag) it back.


The basic set of tests
======================

1. Add new file     (PUT)
2. Add new folder   (MKCOL)
3. Rename a file    (MOVE)
4. Rename a folder  (MOVE)
5. Copy a file      (COPY)
6. Copy a folder    (COPY)
7. Delete a file    (DELETE)
8. Delete a folder  (DELETE)
9. Open remote file directly  (LOCK)
10. Copy/drag remote file to local disk (GET)
11. Copy/drag local file back on top of remote file. 
                            (PUT, or DELETE/PUT, or LOCK, PUT, UNLOCK)



Nautilus 2.X  (tested by sussman and ttimo)
============

1. Add new file     (PUT)

   Check:  but it does two PUTS instead of one.  First it PUTs an
   empty file, then PUTs data into it.  So we get two new revisions.

2. Add new folder   (MKCOL)

   Check.

3. Rename a file    (MOVE)

   Check.

4. Rename a folder  (MOVE)

   Check.

5. Copy a file      (COPY)

   Can't figure out how to make Nautilus issue a COPY command.  If I
   control-drag to copy, or if I right-click to copy/paste, it still
   ends up doing two PUTs, just like in test #1.

6. Copy a folder    (COPY)

   If I right-click to copy/paste, it creates *N* new revisions:  one
   MKCOL, followed by two PUTs per file, ugh.

7. Delete a file    (DELETE)

   Check.

8. Delete a folder  (DELETE)

   Ugh.  It creates N new revisions by issuing a separate DELETE
   request for every item in the subtree, then finishing with a DELETE
   on the dir itself.  Isn't just the final DELETE needed?  We should
   send a patch to Nautilus.

9. Open remote file directly  (LOCK)

   Opens file as read-only, but it never tries to just GET.  I wonder
   if this dav implementation is simply feature-incomplete.  Maybe it
   just opens files as read-only no matter what...?

10. Copy/drag remote file to local disk (GET)

   Check.

11. Copy/drag local file back on top of remote file. 
                            (PUT, or DELETE/PUT, or LOCK, PUT, UNLOCK)

   DELETEs old file, PUTs twice.  Yucky.




Win32 WebFolders (on Win2K-sp3)  (tested by sussman)
================

This works pretty well:  the details needs to be filled in below.

1. Add new file     (PUT)
2. Add new folder   (MKCOL)
3. Rename a file    (MOVE)
4. Rename a folder  (MOVE)
5. Copy a file      (COPY)
6. Copy a folder    (COPY)
7. Delete a file    (DELETE)
8. Delete a folder  (DELETE)
9. Open remote file directly  (LOCK)

LOCK is not supported by WebFolders.

10. Copy/drag remote file to local disk (GET)
11. Copy/drag local file back on top of remote file. 
                            (PUT, or DELETE/PUT, or LOCK, PUT, UNLOCK)




OS X   (fitz/thom/sabi/sussman/jerenkrantz)
====

OS X's DAV client requires LOCK to do write operations.

httpd-2.1 HEAD now has mod_dav_lock.  When used with DavGenericLockDB
(part of mod_dav_lock), all operations work as follows:

1. Add new file     (PUT)     - Works.
2. Add new folder   (MKCOL)   - Works.
3. Rename a file    (MOVE)    - Works.
4. Rename a folder  (MOVE)    - Works.
5. Copy a file      (COPY)    - Works.
6. Copy a folder    (COPY)    - Works.
7. Delete a file    (DELETE)  - Works.
8. Delete a folder  (DELETE)  - Works.
9. Open remote file directly  (LOCK) - Works.
10. Copy/drag remote file to local disk (GET) - Works.
11. Copy/drag local file back on top of remote file.  - Works.
                            (PUT, or DELETE/PUT, or LOCK, PUT, UNLOCK)

Note: The OS X DAV client isn't a speed demon.

Note: When using it as a file system and editing it directly (i.e. using
vi in the share), the client will PUT the new file as a temporary location,
DELETE the old file, MOVE the temp resource to the original file name.  This
probably isn't optimal on Apple's part.  It does wonders for the file
history.

Note: It seems to try to create ._<file> as well.  Implications of this
are not yet understood (fitz hinted at AppleDouble as the reason). 

Note: If you see a problem mounting the repository, you may need to enable
the default BrowserMatch directive in httpd-std.conf for WebDAVFS.
(It's included in the default httpd.conf now.)

Something like:

BrowserMatch "^WebDAVFS/1.[012]" redirect-carefully

Linux davfs2   (hadaka)
============

Apparently this doesn't work at all.  This client always attempts to
LOCK before any kind of write operation (PUT, PROPPATCH, etc.).  
Talk about paranoid!


