| 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. |