blob: b10185db761661024ecf4d884242381d5576ceb4 [file] [log] [blame]
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.