* subversion/libsvn_repos/repos.c
[svn.git] / notes / locking / ra_dav_strategy.txt
blobb10185db761661024ecf4d884242381d5576ceb4
1     How we will extend ra_dav/mod_dav_svn protocol for locking feature
2     ==================================================================
5 RA->lock()
7      * send http LOCK request with 2 custom headers:
9          - force flag
10          - working-revnum (for OOD check)
12      * mod_dav_svn should call authz_read func on path, if it exists.
14      * generate http LOCK response, which includes standard body that
15        describes almost all the svn_lock_t fields.
17          - add one custom response header:  creation-date
19      * what if older server?  just returns '405 Method not Allowed'.
22 RA->unlock()
24      * send http UNLOCK request with 1 custom header:
26          - force flag
28      * mod_dav_svn should call authz_read func on path, if it exists.
30      * generate http UNLOCK response:  success == "204 no content"
32      * what if older server?  just returns '405 Method not Allowed'.
34 ----
36 RA->get_lock()
38      * do a depth-0 PROPFIND for DAV:lockdiscovery property
40      * mod_dav_svn should call authz_read func on path, if it exists.
42      * response is the same as what comes back in a LOCK response  --
43        a standard property value that describes almost all the
44        svn_lock_t fields. 
46          - add one custom response header:  X-SVN-creation-date
48      * what if older server?  just returns '404 Not Found'.
51 RA->get_locks()
53      * custom REPORT request.
55      * mod_dav_svn should call svn_repos_fs_get_locks(), because it
56        automatically uses the authz_read func to screen out paths.
58      * custom response.
60      * what if older server?  return some sort of 4XX response and
61        error indicating the report-type is unknown.
62         
63      *** NOTE: a dumb client can achieve the exact same effect by
64          doing a depth-infinity PROPFIND for the 'DAV:lockdiscovery'
65          property.  But this causes mod_dav_svn to do an O(N)
66          traversal of the repository, running svn_fs_get_lock() on
67          each path!  Much, *much* slower than allowing fs_get_locks()
68          to do a partial-key database lookup!
72 RA->get_commit_editor2()
74      * stash the incoming hash of tokens.
76      * every time we do a CHECKOUT, PUT, COPY, DELETE, PROPPATCH of a
77        file path, look to see if there's a token available in the
78        hash.  If so, put it in the If: header of the request.
80      * send *all* tokens in the If: header of the final MERGE request.
82           -- also send either a new XML body element, or custom
83              header, indicating whether to 'keep_locks' or not.
85      * what if older server?  meaningless.  why would you have the
86        tokens in the first place.  And anyway, the If: tokens will be
87        ignored anyway if the server isn't paying attention to locking.