Subversion
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
mod_dav_svn.h
Go to the documentation of this file.
1 /**
2  * @copyright
3  * ====================================================================
4  * Copyright (c) 2000-2007 CollabNet. All rights reserved.
5  *
6  * This software is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution. The terms
8  * are also available at http://subversion.tigris.org/license-1.html.
9  * If newer versions of this license are posted there, you may use a
10  * newer version instead, at your option.
11  *
12  * This software consists of voluntary contributions made by many
13  * individuals. For exact contribution history, see the revision
14  * history and logs, available at http://subversion.tigris.org/.
15  * ====================================================================
16  * @endcopyright
17  *
18  * @file mod_dav_svn.h
19  * @brief Subversion's backend for Apache's mod_dav module
20  */
21 
22 
23 #ifndef MOD_DAV_SVN_H
24 #define MOD_DAV_SVN_H
25 
26 #include <httpd.h>
27 #include <mod_dav.h>
28 
29 
30 #ifdef __cplusplus
31 extern "C" {
32 #endif /* __cplusplus */
33 
34 
35 /* Given an apache request R, a URI, and a ROOT_PATH to the svn
36  location block, process URI and return many things, allocated in
37  r->pool:
38 
39  * CLEANED_URI: The uri with duplicate and trailing slashes removed.
40 
41  * TRAILING_SLASH: Whether the uri had a trailing slash on it.
42 
43  Three special substrings of the uri are returned for convenience:
44 
45  * REPOS_NAME: The single path component that is the directory
46  which contains the repository.
47 
48  * RELATIVE_PATH: The remaining imaginary path components.
49 
50  * REPOS_PATH: The actual path within the repository filesystem, or
51  NULL if no part of the uri refers to a path in
52  the repository (e.g. "!svn/vcc/default" or
53  "!svn/bln/25").
54 
55 
56  For example, consider the uri
57 
58  /svn/repos/proj1/!svn/blah/13//A/B/alpha
59 
60  In the SVNPath case, this function would receive a ROOT_PATH of
61  '/svn/repos/proj1', and in the SVNParentPath case would receive a
62  ROOT_PATH of '/svn/repos'. But either way, we would get back:
63 
64  * CLEANED_URI: /svn/repos/proj1/!svn/blah/13/A/B/alpha
65  * REPOS_NAME: proj1
66  * RELATIVE_PATH: /!svn/blah/13/A/B/alpha
67  * REPOS_PATH: A/B/alpha
68  * TRAILING_SLASH: FALSE
69 */
70 AP_MODULE_DECLARE(dav_error *) dav_svn_split_uri(request_rec *r,
71  const char *uri,
72  const char *root_path,
73  const char **cleaned_uri,
74  int *trailing_slash,
75  const char **repos_name,
76  const char **relative_path,
77  const char **repos_path);
78 
79 
80 /* Given an apache request R and a ROOT_PATH to the svn location
81  block sets *REPOS_PATH to the path of the repository on disk.
82 */
83 AP_MODULE_DECLARE(dav_error *) dav_svn_get_repos_path(request_rec *r,
84  const char *root_path,
85  const char **repos_path);
86 
87 #ifdef __cplusplus
88 }
89 #endif /* __cplusplus */
90 
91 #endif /* MOD_DAV_SVN_H */