The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
    How we will extend ra_dav/mod_dav_svn protocol for locking feature
    ==================================================================


RA->lock()

     * send http LOCK request with 2 custom headers:

         - force flag
         - working-revnum (for OOD check)

     * mod_dav_svn should call authz_read func on path, if it exists.

     * generate http LOCK response, which includes standard body that
       describes almost all the svn_lock_t fields.

         - add one custom response header:  creation-date

     * what if older server?  just returns '405 Method not Allowed'.


RA->unlock()

     * send http UNLOCK request with 1 custom header:

         - force flag

     * mod_dav_svn should call authz_read func on path, if it exists.

     * generate http UNLOCK response:  success == "204 no content"

     * what if older server?  just returns '405 Method not Allowed'.

----

RA->get_lock()

     * do a depth-0 PROPFIND for DAV:lockdiscovery property

     * mod_dav_svn should call authz_read func on path, if it exists.

     * response is the same as what comes back in a LOCK response  --
       a standard property value that describes almost all the
       svn_lock_t fields. 

         - add one custom response header:  X-SVN-creation-date

     * what if older server?  just returns '404 Not Found'.


RA->get_locks()

     * custom REPORT request.

     * mod_dav_svn should call svn_repos_fs_get_locks(), because it
       automatically uses the authz_read func to screen out paths.

     * custom response.

     * what if older server?  return some sort of 4XX response and
       error indicating the report-type is unknown.
        
     *** NOTE: a dumb client can achieve the exact same effect by
         doing a depth-infinity PROPFIND for the 'DAV:lockdiscovery'
         property.  But this causes mod_dav_svn to do an O(N)
         traversal of the repository, running svn_fs_get_lock() on
         each path!  Much, *much* slower than allowing fs_get_locks()
         to do a partial-key database lookup!



RA->get_commit_editor2()

     * stash the incoming hash of tokens.

     * every time we do a CHECKOUT, PUT, COPY, DELETE, PROPPATCH of a
       file path, look to see if there's a token available in the
       hash.  If so, put it in the If: header of the request.

     * send *all* tokens in the If: header of the final MERGE request.

          -- also send either a new XML body element, or custom
             header, indicating whether to 'keep_locks' or not.
 
     * what if older server?  meaningless.  why would you have the
       tokens in the first place.  And anyway, the If: tokens will be
       ignored anyway if the server isn't paying attention to locking.