summaryrefslogtreecommitdiff
path: root/subversion/include/mod_dav_svn.h
blob: 223f2f1c61047a9b022c52185c46687e9c9740ae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/**
 * @copyright
 * ====================================================================
 *    Licensed to the Apache Software Foundation (ASF) under one
 *    or more contributor license agreements.  See the NOTICE file
 *    distributed with this work for additional information
 *    regarding copyright ownership.  The ASF licenses this file
 *    to you under the Apache License, Version 2.0 (the
 *    "License"); you may not use this file except in compliance
 *    with the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing,
 *    software distributed under the License is distributed on an
 *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 *    KIND, either express or implied.  See the License for the
 *    specific language governing permissions and limitations
 *    under the License.
 * ====================================================================
 * @endcopyright
 *
 * @file mod_dav_svn.h
 * @brief Subversion's backend for Apache's mod_dav module
 */


#ifndef MOD_DAV_SVN_H
#define MOD_DAV_SVN_H

#include <httpd.h>
#include <mod_dav.h>


#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */


/**
   Given an apache request @a r, a @a uri, and a @a root_path to the svn
   location block, process @a uri and return many things, allocated in
   @a pool:

   - @a cleaned_uri:    The uri with duplicate and trailing slashes removed.

   - @a trailing_slash: Whether the uri had a trailing slash on it.

   Three special substrings of the uri are returned for convenience:

   - @a repos_basename: The single path component that is the directory
                      which contains the repository.  (Don't confuse
                      this with the "repository name" as optionally
                      defined via the SVNReposName directive!)

   - @a relative_path:  The remaining imaginary path components.

   - @a repos_path:     The actual path within the repository filesystem, or
                      NULL if no part of the uri refers to a path in
                      the repository (e.g. "!svn/vcc/default" or
                      "!svn/bln/25").


   For example, consider the uri

       /svn/repos/proj1/!svn/blah/13//A/B/alpha

   In the SVNPath case, this function would receive a @a root_path of
   '/svn/repos/proj1', and in the SVNParentPath case would receive a
   @a root_path of '/svn/repos'.  But either way, we would get back:

     - @a cleaned_uri:    /svn/repos/proj1/!svn/blah/13/A/B/alpha
     - @a repos_basename: proj1
     - @a relative_path:  /!svn/blah/13/A/B/alpha
     - @a repos_path:     A/B/alpha
     - @a trailing_slash: FALSE

   NOTE: The returned dav_error will be also allocated in @a pool, not
         in @a r->pool.

   @since New in 1.9
*/
AP_MODULE_DECLARE(dav_error *) dav_svn_split_uri2(request_rec *r,
                                                  const char *uri_to_split,
                                                  const char *root_path,
                                                  const char **cleaned_uri,
                                                  int *trailing_slash,
                                                  const char **repos_basename,
                                                  const char **relative_path,
                                                  const char **repos_path,
                                                  apr_pool_t *pool);

/**
 * Same as dav_svn_split_uri2() but allocates the result in @a r->pool.
 */
AP_MODULE_DECLARE(dav_error *) dav_svn_split_uri(request_rec *r,
                                                 const char *uri,
                                                 const char *root_path,
                                                 const char **cleaned_uri,
                                                 int *trailing_slash,
                                                 const char **repos_basename,
                                                 const char **relative_path,
                                                 const char **repos_path);


/**
 * Given an apache request @a r and a @a root_path to the svn location
 * block, set @a *repos_path to the path of the repository on disk.
 * Perform all allocations in @a pool.
 *
 * NOTE: The returned dav_error will be also allocated in @a pool, not
 *       in @a r->pool.
 *
 * @since New in 1.9
 */
AP_MODULE_DECLARE(dav_error *) dav_svn_get_repos_path2(request_rec *r,
                                                       const char *root_path,
                                                       const char **repos_path,
                                                       apr_pool_t *pool);

/**
 * Same as dav_svn_get_repos_path2() but allocates the result in@a r->pool.
 */
AP_MODULE_DECLARE(dav_error *) dav_svn_get_repos_path(request_rec *r,
                                                      const char *root_path,
                                                      const char **repos_path);

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif /* MOD_DAV_SVN_H */