165 |
24 Aug 06 |
jari |
1 |
#ifndef _theplu_svndigest_svn_ |
165 |
24 Aug 06 |
jari |
2 |
#define _theplu_svndigest_svn_ |
165 |
24 Aug 06 |
jari |
3 |
|
91 |
23 Mar 06 |
jari |
// $Id$ |
91 |
23 Mar 06 |
jari |
5 |
|
91 |
23 Mar 06 |
jari |
6 |
/* |
978 |
12 Dec 09 |
peter |
Copyright (C) 2006 Jari Häkkinen |
978 |
12 Dec 09 |
peter |
Copyright (C) 2007, 2008 Jari Häkkinen, Peter Johansson |
1635 |
30 Mar 23 |
peter |
Copyright (C) 2009, 2010, 2012, 2023 Peter Johansson |
91 |
23 Mar 06 |
jari |
10 |
|
687 |
04 Aug 08 |
peter |
This file is part of svndigest, http://dev.thep.lu.se/svndigest |
91 |
23 Mar 06 |
jari |
12 |
|
149 |
12 Aug 06 |
jari |
svndigest is free software; you can redistribute it and/or modify it |
91 |
23 Mar 06 |
jari |
under the terms of the GNU General Public License as published by |
693 |
11 Sep 08 |
jari |
the Free Software Foundation; either version 3 of the License, or |
91 |
23 Mar 06 |
jari |
(at your option) any later version. |
91 |
23 Mar 06 |
jari |
17 |
|
149 |
12 Aug 06 |
jari |
svndigest is distributed in the hope that it will be useful, but |
91 |
23 Mar 06 |
jari |
WITHOUT ANY WARRANTY; without even the implied warranty of |
149 |
12 Aug 06 |
jari |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
91 |
23 Mar 06 |
jari |
General Public License for more details. |
91 |
23 Mar 06 |
jari |
22 |
|
91 |
23 Mar 06 |
jari |
You should have received a copy of the GNU General Public License |
693 |
11 Sep 08 |
jari |
along with svndigest. If not, see <http://www.gnu.org/licenses/>. |
91 |
23 Mar 06 |
jari |
25 |
*/ |
91 |
23 Mar 06 |
jari |
26 |
|
800 |
03 Jul 09 |
peter |
// Turning off warnings from using deprecated function, i.e., we are |
800 |
03 Jul 09 |
peter |
// using subversion 1.4 |
800 |
03 Jul 09 |
peter |
29 |
#ifndef SVN_DEPRECATED |
800 |
03 Jul 09 |
peter |
30 |
#define SVN_DEPRECATED |
800 |
03 Jul 09 |
peter |
31 |
#endif |
800 |
03 Jul 09 |
peter |
32 |
|
800 |
03 Jul 09 |
peter |
33 |
|
185 |
06 Sep 06 |
jari |
34 |
#include <map> |
91 |
23 Mar 06 |
jari |
35 |
#include <stdexcept> |
123 |
29 Jul 06 |
jari |
36 |
#include <string> |
123 |
29 Jul 06 |
jari |
37 |
#include <vector> |
91 |
23 Mar 06 |
jari |
38 |
|
164 |
23 Aug 06 |
jari |
39 |
#include <subversion-1/svn_client.h> |
164 |
23 Aug 06 |
jari |
40 |
#include <subversion-1/svn_types.h> |
91 |
23 Mar 06 |
jari |
41 |
|
91 |
23 Mar 06 |
jari |
42 |
namespace theplu { |
149 |
12 Aug 06 |
jari |
43 |
namespace svndigest { |
91 |
23 Mar 06 |
jari |
44 |
|
233 |
26 Mar 07 |
peter |
45 |
struct log_receiver_baton; |
233 |
26 Mar 07 |
peter |
46 |
|
91 |
23 Mar 06 |
jari |
47 |
/// |
140 |
04 Aug 06 |
jari |
/// If something goes wrong in the use of the different SVN classes, |
140 |
04 Aug 06 |
jari |
/// an SVNException is thrown. |
91 |
23 Mar 06 |
jari |
50 |
/// |
91 |
23 Mar 06 |
jari |
51 |
struct SVNException : public std::runtime_error |
1513 |
23 Sep 12 |
peter |
52 |
{ |
1215 |
09 Oct 10 |
peter |
53 |
SVNException(const std::string& msg, svn_error_t* error=NULL); |
91 |
23 Mar 06 |
jari |
54 |
|
1219 |
12 Oct 10 |
peter |
55 |
/** |
1219 |
12 Oct 10 |
peter |
Copy constructor |
1219 |
12 Oct 10 |
peter |
57 |
*/ |
1219 |
12 Oct 10 |
peter |
58 |
SVNException(const SVNException& other); |
1219 |
12 Oct 10 |
peter |
59 |
|
1219 |
12 Oct 10 |
peter |
60 |
/** |
1219 |
12 Oct 10 |
peter |
Destructor |
1219 |
12 Oct 10 |
peter |
62 |
*/ |
1215 |
09 Oct 10 |
peter |
63 |
virtual ~SVNException(void) throw(); |
1219 |
12 Oct 10 |
peter |
64 |
|
1215 |
09 Oct 10 |
peter |
65 |
/** |
1215 |
09 Oct 10 |
peter |
override base implementation |
1215 |
09 Oct 10 |
peter |
67 |
*/ |
1215 |
09 Oct 10 |
peter |
68 |
const char* what(void) const throw(); |
1215 |
09 Oct 10 |
peter |
69 |
|
1215 |
09 Oct 10 |
peter |
70 |
/** |
1215 |
09 Oct 10 |
peter |
access svn_error_t |
1215 |
09 Oct 10 |
peter |
72 |
*/ |
1215 |
09 Oct 10 |
peter |
73 |
const svn_error_t* error(void) const; |
1215 |
09 Oct 10 |
peter |
74 |
private: |
1215 |
09 Oct 10 |
peter |
75 |
svn_error_t* error_; |
1215 |
09 Oct 10 |
peter |
76 |
std::string msg_; |
1219 |
12 Oct 10 |
peter |
77 |
int* ref_count_; |
1219 |
12 Oct 10 |
peter |
78 |
|
1219 |
12 Oct 10 |
peter |
// assignment not allowed |
1219 |
12 Oct 10 |
peter |
80 |
SVNException& operator=(const SVNException&); |
1215 |
09 Oct 10 |
peter |
81 |
}; |
1215 |
09 Oct 10 |
peter |
82 |
|
318 |
18 May 07 |
jari |
83 |
/** |
318 |
18 May 07 |
jari |
\brief The SVN class is a front end to the subversion API. |
318 |
18 May 07 |
jari |
85 |
|
318 |
18 May 07 |
jari |
SVN provides one single global access point to the underlying |
318 |
18 May 07 |
jari |
subversion API and makes sure that there is only one point of |
318 |
18 May 07 |
jari |
access for the binary. |
318 |
18 May 07 |
jari |
89 |
|
318 |
18 May 07 |
jari |
The singleton SVN object should be initialized with |
318 |
18 May 07 |
jari |
SVN::instancs(const std::string& path), rather than |
318 |
18 May 07 |
jari |
SVN::instance(void), before using any other subversion related |
318 |
18 May 07 |
jari |
classes or calls. Best practice is to initilize the singleton |
318 |
18 May 07 |
jari |
object early in the main program. The logic behind this |
318 |
18 May 07 |
jari |
requirement is that all subverison related classes and calls |
318 |
18 May 07 |
jari |
expect that repository and WC access is properly set up at |
318 |
18 May 07 |
jari |
initialization. However, most functionality is available |
318 |
18 May 07 |
jari |
irrespectively which instance call is made. |
318 |
18 May 07 |
jari |
99 |
|
318 |
18 May 07 |
jari |
\see Design Patterns (the singleton pattern). Subversion API |
318 |
18 May 07 |
jari |
documents, SVN::instancs(void), SVN::instancs(const |
318 |
18 May 07 |
jari |
std::string&). |
318 |
18 May 07 |
jari |
103 |
*/ |
91 |
23 Mar 06 |
jari |
104 |
class SVN { |
91 |
23 Mar 06 |
jari |
105 |
public: |
91 |
23 Mar 06 |
jari |
106 |
|
91 |
23 Mar 06 |
jari |
107 |
enum vc_status { |
91 |
23 Mar 06 |
jari |
108 |
unversioned=0, |
91 |
23 Mar 06 |
jari |
109 |
uptodate, |
91 |
23 Mar 06 |
jari |
110 |
unresolved |
91 |
23 Mar 06 |
jari |
111 |
}; |
91 |
23 Mar 06 |
jari |
112 |
|
318 |
18 May 07 |
jari |
113 |
/** |
318 |
18 May 07 |
jari |
\brief Call the underlying svn_client_blame3 for \a path with |
318 |
18 May 07 |
jari |
\a receiver and \a baton. |
318 |
18 May 07 |
jari |
116 |
|
318 |
18 May 07 |
jari |
This function is called from SVNblame to do 'svn blame' on an |
318 |
18 May 07 |
jari |
item. The \a receiver and \a baton is defined in SVNblame and |
318 |
18 May 07 |
jari |
the \a receiver is called by the underlying subversion API for |
318 |
18 May 07 |
jari |
every line in \a path provided it the item is under subversion |
318 |
18 May 07 |
jari |
control. The \a baton is used to communicate anonymous |
318 |
18 May 07 |
jari |
information through the API to the \a receiver. If \a path is a |
318 |
18 May 07 |
jari |
binary object an error is returned, all other errors will |
318 |
18 May 07 |
jari |
generate an SVNException. |
318 |
18 May 07 |
jari |
125 |
|
318 |
18 May 07 |
jari |
\a path can be either a URL or an WC target. |
318 |
18 May 07 |
jari |
127 |
*/ |
1218 |
10 Oct 10 |
peter |
128 |
void client_blame(const std::string& path, |
1218 |
10 Oct 10 |
peter |
129 |
svn_client_blame_receiver_t receiver, |
1218 |
10 Oct 10 |
peter |
130 |
void *baton); |
138 |
03 Aug 06 |
jari |
131 |
|
318 |
18 May 07 |
jari |
132 |
/** |
501 |
19 Oct 07 |
peter |
\brief Same as function above with the extension that revision |
501 |
19 Oct 07 |
peter |
\a rev can be set. |
501 |
19 Oct 07 |
peter |
135 |
*/ |
1218 |
10 Oct 10 |
peter |
136 |
void client_blame(const std::string& path, |
1218 |
10 Oct 10 |
peter |
137 |
svn_client_blame_receiver_t receiver, |
1218 |
10 Oct 10 |
peter |
138 |
void *baton, svn_revnum_t rev); |
501 |
19 Oct 07 |
peter |
139 |
|
501 |
19 Oct 07 |
peter |
140 |
/** |
1547 |
20 Oct 12 |
peter |
\brief access the content of file \a path at revision \a rev |
1547 |
20 Oct 12 |
peter |
142 |
|
1547 |
20 Oct 12 |
peter |
Content of file \a path at revision \a rev is copied to \a |
1610 |
11 Feb 23 |
peter |
result. svn:keywords are not expanded. |
1547 |
20 Oct 12 |
peter |
145 |
*/ |
1547 |
20 Oct 12 |
peter |
146 |
void client_cat(const std::string& path, svn_revnum_t rev, |
1547 |
20 Oct 12 |
peter |
147 |
std::string& result); |
1547 |
20 Oct 12 |
peter |
148 |
|
1547 |
20 Oct 12 |
peter |
149 |
|
1547 |
20 Oct 12 |
peter |
150 |
|
1547 |
20 Oct 12 |
peter |
151 |
/** |
318 |
18 May 07 |
jari |
\brief Call the underlying svn_client_info for \a path with \a |
318 |
18 May 07 |
jari |
receiver and \a baton. |
318 |
18 May 07 |
jari |
154 |
|
318 |
18 May 07 |
jari |
This function is called from SVNinfo to do 'svn info' on an |
318 |
18 May 07 |
jari |
item. The \a receiver and \a baton is defined in SVNinfo and |
318 |
18 May 07 |
jari |
the \a receiver is called by the underlying subversion API if |
318 |
18 May 07 |
jari |
\a path is under subversion control. The \a baton is used to |
318 |
18 May 07 |
jari |
communicate anonymous information through the API to the \a |
318 |
18 May 07 |
jari |
receiver. |
318 |
18 May 07 |
jari |
161 |
|
318 |
18 May 07 |
jari |
\a path can be either a URL or an WC target. |
318 |
18 May 07 |
jari |
163 |
|
318 |
18 May 07 |
jari |
\see Subversion API documentation, SVNinfo |
318 |
18 May 07 |
jari |
165 |
*/ |
140 |
04 Aug 06 |
jari |
166 |
void client_info(const std::string& path, svn_info_receiver_t receiver, |
140 |
04 Aug 06 |
jari |
167 |
void *baton); |
129 |
02 Aug 06 |
jari |
168 |
|
185 |
06 Sep 06 |
jari |
169 |
/** |
318 |
18 May 07 |
jari |
\a path can be either a URL or an WC target. |
318 |
18 May 07 |
jari |
171 |
|
233 |
26 Mar 07 |
peter |
\todo doc |
233 |
26 Mar 07 |
peter |
173 |
*/ |
318 |
18 May 07 |
jari |
174 |
void client_log(const std::string& path, svn_log_message_receiver_t receiver, |
318 |
18 May 07 |
jari |
175 |
void *baton); |
233 |
26 Mar 07 |
peter |
176 |
|
233 |
26 Mar 07 |
peter |
177 |
/** |
318 |
18 May 07 |
jari |
\brief Get the subversion properties for \a path. |
185 |
06 Sep 06 |
jari |
179 |
|
185 |
06 Sep 06 |
jari |
The retrieved properties are stored in \a properties. To check |
185 |
06 Sep 06 |
jari |
whether \a is a binary item use SVNproperty::binary(void). |
318 |
18 May 07 |
jari |
182 |
|
318 |
18 May 07 |
jari |
\a path can be either a URL or an WC target. |
185 |
06 Sep 06 |
jari |
184 |
*/ |
185 |
06 Sep 06 |
jari |
185 |
void client_proplist(const std::string& path, |
185 |
06 Sep 06 |
jari |
186 |
std::map<std::string, std::string>& properties); |
185 |
06 Sep 06 |
jari |
187 |
|
318 |
18 May 07 |
jari |
188 |
/** |
318 |
18 May 07 |
jari |
\brief Get an instance of SVN. |
123 |
29 Jul 06 |
jari |
190 |
|
318 |
18 May 07 |
jari |
The singleton SVN object should be initialized with |
318 |
18 May 07 |
jari |
SVN::instancs(const std::string&) before usage of this |
318 |
18 May 07 |
jari |
function. Best practice is to initilize the singleton object |
318 |
18 May 07 |
jari |
early in the main program. The logic behind this requirement is |
318 |
18 May 07 |
jari |
that subverison related classes and calls may expect that |
318 |
18 May 07 |
jari |
repository and WC access is properly set up at initialization. |
91 |
23 Mar 06 |
jari |
197 |
|
318 |
18 May 07 |
jari |
\throw An SVNException if the singleton SVN onject is not |
318 |
18 May 07 |
jari |
already initilized. |
123 |
29 Jul 06 |
jari |
200 |
|
318 |
18 May 07 |
jari |
\see SVN::instancs(const std::string&) |
318 |
18 May 07 |
jari |
202 |
*/ |
318 |
18 May 07 |
jari |
203 |
static SVN* instance(void); |
91 |
23 Mar 06 |
jari |
204 |
|
318 |
18 May 07 |
jari |
205 |
/** |
318 |
18 May 07 |
jari |
\brief Get an instance of SVN setup against repository pointed |
318 |
18 May 07 |
jari |
to by \a path. |
318 |
18 May 07 |
jari |
208 |
|
318 |
18 May 07 |
jari |
The singleton SVN object should be initialized with this |
318 |
18 May 07 |
jari |
instance call before any subversion related classes or calls |
318 |
18 May 07 |
jari |
are made. Best practice is to initilize the singleton object |
318 |
18 May 07 |
jari |
early in the main program. The logic behind this requirement is |
318 |
18 May 07 |
jari |
that subverison related classes and calls may expect that |
318 |
18 May 07 |
jari |
repository and WC access is properly set up at initialization. |
318 |
18 May 07 |
jari |
215 |
|
318 |
18 May 07 |
jari |
\throw Throws an SVNException if initialization fails in the |
318 |
18 May 07 |
jari |
underlying subversion API calls, or if \a path is a URL. |
318 |
18 May 07 |
jari |
218 |
*/ |
318 |
18 May 07 |
jari |
219 |
static SVN* instance(const std::string& path); |
318 |
18 May 07 |
jari |
220 |
|
318 |
18 May 07 |
jari |
221 |
/** |
318 |
18 May 07 |
jari |
\brief Set up a repository access session. |
318 |
18 May 07 |
jari |
223 |
|
318 |
18 May 07 |
jari |
\throws SVNException if session setup fails, or if a session is |
318 |
18 May 07 |
jari |
already set up (i.e., repository cannot be changed during |
318 |
18 May 07 |
jari |
program lifetime). |
318 |
18 May 07 |
jari |
227 |
*/ |
318 |
18 May 07 |
jari |
// void setup_ra_session(const std::string& path); |
318 |
18 May 07 |
jari |
229 |
|
91 |
23 Mar 06 |
jari |
230 |
/// |
91 |
23 Mar 06 |
jari |
/// @brief Check if entry \a path is under version control |
91 |
23 Mar 06 |
jari |
232 |
/// |
91 |
23 Mar 06 |
jari |
/// @return True if \a path is under version control, false |
91 |
23 Mar 06 |
jari |
/// otherwise. |
91 |
23 Mar 06 |
jari |
235 |
/// |
91 |
23 Mar 06 |
jari |
236 |
vc_status version_controlled(const std::string& path); |
91 |
23 Mar 06 |
jari |
237 |
|
91 |
23 Mar 06 |
jari |
238 |
private: |
318 |
18 May 07 |
jari |
239 |
/** |
318 |
18 May 07 |
jari |
\brief Constructor |
91 |
23 Mar 06 |
jari |
241 |
|
318 |
18 May 07 |
jari |
The only way to create an object of SVN type is by calling |
318 |
18 May 07 |
jari |
SVN::instance(const std::string&). \a path must be a WC path, |
318 |
18 May 07 |
jari |
i.e., not a URL. |
318 |
18 May 07 |
jari |
245 |
*/ |
318 |
18 May 07 |
jari |
246 |
SVN(const std::string& path); |
318 |
18 May 07 |
jari |
247 |
|
91 |
23 Mar 06 |
jari |
248 |
/// |
91 |
23 Mar 06 |
jari |
/// @brief Copy Constructor, not implemented. |
91 |
23 Mar 06 |
jari |
250 |
/// |
91 |
23 Mar 06 |
jari |
251 |
SVN(const SVN&); |
579 |
18 Mar 08 |
peter |
252 |
SVN& operator=(const SVN&); |
91 |
23 Mar 06 |
jari |
253 |
|
271 |
02 May 07 |
jari |
254 |
/// |
271 |
02 May 07 |
jari |
/// @brief The destructor. |
271 |
02 May 07 |
jari |
256 |
/// |
271 |
02 May 07 |
jari |
257 |
virtual ~SVN(void); |
271 |
02 May 07 |
jari |
258 |
|
185 |
06 Sep 06 |
jari |
259 |
/** |
185 |
06 Sep 06 |
jari |
@brief Free resources when failing to reach end of |
185 |
06 Sep 06 |
jari |
constructor. |
191 |
07 Sep 06 |
jari |
262 |
|
191 |
07 Sep 06 |
jari |
cleanup_failed_init will free all resource acquired in the |
191 |
07 Sep 06 |
jari |
constructor and throw an SVNException with \a message as the |
191 |
07 Sep 06 |
jari |
message. |
191 |
07 Sep 06 |
jari |
266 |
|
191 |
07 Sep 06 |
jari |
@see SVNException |
185 |
06 Sep 06 |
jari |
268 |
*/ |
1217 |
10 Oct 10 |
peter |
269 |
void cleanup_failed_init(svn_error_t *err, const std::string& message); |
140 |
04 Aug 06 |
jari |
270 |
|
91 |
23 Mar 06 |
jari |
271 |
static SVN* instance_; |
91 |
23 Mar 06 |
jari |
272 |
|
123 |
29 Jul 06 |
jari |
// Subversion API stuff |
123 |
29 Jul 06 |
jari |
274 |
|
318 |
18 May 07 |
jari |
275 |
/** |
1547 |
20 Oct 12 |
peter |
the url is fech with svn info. The url is stored in a |
318 |
18 May 07 |
jari |
url_receiver_baton. The struct is filled in the url_receiver |
318 |
18 May 07 |
jari |
function. |
318 |
18 May 07 |
jari |
279 |
*/ |
1547 |
20 Oct 12 |
peter |
280 |
struct url_receiver_baton { |
1547 |
20 Oct 12 |
peter |
281 |
std::string root_url; |
1547 |
20 Oct 12 |
peter |
282 |
std::string url; |
318 |
18 May 07 |
jari |
283 |
}; |
123 |
29 Jul 06 |
jari |
284 |
|
318 |
18 May 07 |
jari |
285 |
/** |
318 |
18 May 07 |
jari |
url_receiver is the function passed to the underlying |
318 |
18 May 07 |
jari |
subversion API call svn_client_info. This function is called by |
318 |
18 May 07 |
jari |
the subversion API for every item matched by the conditions of |
318 |
18 May 07 |
jari |
the API call. |
318 |
18 May 07 |
jari |
290 |
|
318 |
18 May 07 |
jari |
\see Subversion API documentation |
318 |
18 May 07 |
jari |
292 |
*/ |
318 |
18 May 07 |
jari |
293 |
static svn_error_t* |
1547 |
20 Oct 12 |
peter |
294 |
url_receiver(void *baton, const char *path, |
1547 |
20 Oct 12 |
peter |
295 |
const svn_info_t *info, apr_pool_t *pool); |
318 |
18 May 07 |
jari |
296 |
|
1218 |
10 Oct 10 |
peter |
297 |
void client_blame_call(const std::string& path, |
1218 |
10 Oct 10 |
peter |
298 |
svn_client_blame_receiver_t receiver, |
1218 |
10 Oct 10 |
peter |
299 |
void *baton, svn_opt_revision_t& head); |
501 |
19 Oct 07 |
peter |
300 |
|
91 |
23 Mar 06 |
jari |
301 |
svn_wc_adm_access_t* adm_access_; |
91 |
23 Mar 06 |
jari |
302 |
apr_allocator_t* allocator_; |
91 |
23 Mar 06 |
jari |
303 |
svn_client_ctx_t* context_; |
91 |
23 Mar 06 |
jari |
304 |
apr_pool_t* pool_; |
123 |
29 Jul 06 |
jari |
305 |
svn_ra_session_t* ra_session_; |
1547 |
20 Oct 12 |
peter |
306 |
std::string abs_wc_root_path_; |
1547 |
20 Oct 12 |
peter |
307 |
std::string relative_url_; |
1544 |
13 Oct 12 |
peter |
308 |
|
1544 |
13 Oct 12 |
peter |
309 |
/** |
1544 |
13 Oct 12 |
peter |
Private class holding an apr_pool_t* and that takes care of |
1544 |
13 Oct 12 |
peter |
deallocation (in destructor) which decreases risk for memory |
1544 |
13 Oct 12 |
peter |
leaks especially in case of errors and when exceptions are |
1544 |
13 Oct 12 |
peter |
thrown. |
1544 |
13 Oct 12 |
peter |
314 |
*/ |
1544 |
13 Oct 12 |
peter |
315 |
class AprPool |
1544 |
13 Oct 12 |
peter |
316 |
{ |
1544 |
13 Oct 12 |
peter |
317 |
public: |
1544 |
13 Oct 12 |
peter |
318 |
/** |
1544 |
13 Oct 12 |
peter |
create a sub-pool of \a pool |
1544 |
13 Oct 12 |
peter |
320 |
*/ |
1544 |
13 Oct 12 |
peter |
321 |
AprPool(apr_pool_t* pool); |
1544 |
13 Oct 12 |
peter |
322 |
|
1544 |
13 Oct 12 |
peter |
323 |
/** |
1544 |
13 Oct 12 |
peter |
\brief destructor deallocates apr pool |
1544 |
13 Oct 12 |
peter |
325 |
*/ |
1544 |
13 Oct 12 |
peter |
326 |
~AprPool(void); |
1544 |
13 Oct 12 |
peter |
327 |
|
1544 |
13 Oct 12 |
peter |
328 |
/** |
1544 |
13 Oct 12 |
peter |
Access apr pool |
1544 |
13 Oct 12 |
peter |
330 |
*/ |
1544 |
13 Oct 12 |
peter |
331 |
apr_pool_t* get(void); |
1544 |
13 Oct 12 |
peter |
332 |
private: |
1544 |
13 Oct 12 |
peter |
333 |
apr_pool_t* pool_; |
1544 |
13 Oct 12 |
peter |
334 |
}; |
1544 |
13 Oct 12 |
peter |
335 |
|
91 |
23 Mar 06 |
jari |
336 |
}; |
91 |
23 Mar 06 |
jari |
337 |
|
149 |
12 Aug 06 |
jari |
338 |
}} // end of namespace svndigest and namespace theplu |
91 |
23 Mar 06 |
jari |
339 |
|
91 |
23 Mar 06 |
jari |
340 |
#endif |