1 | /** |
---|
2 | * @copyright |
---|
3 | * ==================================================================== |
---|
4 | * Copyright (c) 2003-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 org_tigris_subversion_javahl_SVNAdmin.cpp |
---|
19 | * @brief Implementation of the native methods in the Java class SVNAdmin |
---|
20 | */ |
---|
21 | |
---|
22 | #include "../include/org_tigris_subversion_javahl_SVNAdmin.h" |
---|
23 | #include "JNIUtil.h" |
---|
24 | #include "JNIStackElement.h" |
---|
25 | #include "JNIStringHolder.h" |
---|
26 | #include "JNIByteArray.h" |
---|
27 | #include "SVNAdmin.h" |
---|
28 | #include "Revision.h" |
---|
29 | #include "Inputer.h" |
---|
30 | #include "Outputer.h" |
---|
31 | #include "MessageReceiver.h" |
---|
32 | #include "svn_props.h" |
---|
33 | #include "svn_private_config.h" |
---|
34 | |
---|
35 | JNIEXPORT jlong JNICALL |
---|
36 | Java_org_tigris_subversion_javahl_SVNAdmin_ctNative |
---|
37 | (JNIEnv *env, jobject jthis) |
---|
38 | { |
---|
39 | JNIEntry(SVNAdmin, ctNative); |
---|
40 | SVNAdmin *obj = new SVNAdmin; |
---|
41 | return obj->getCppAddr(); |
---|
42 | } |
---|
43 | |
---|
44 | JNIEXPORT void JNICALL |
---|
45 | Java_org_tigris_subversion_javahl_SVNAdmin_dispose |
---|
46 | (JNIEnv *env, jobject jthis) |
---|
47 | { |
---|
48 | JNIEntry(SVNAdmin, dispose); |
---|
49 | SVNAdmin *cl = SVNAdmin::getCppObject(jthis); |
---|
50 | if (cl == NULL) |
---|
51 | { |
---|
52 | JNIUtil::throwError(_("bad C++ this")); |
---|
53 | return; |
---|
54 | } |
---|
55 | cl->dispose(jthis); |
---|
56 | } |
---|
57 | |
---|
58 | JNIEXPORT void JNICALL |
---|
59 | Java_org_tigris_subversion_javahl_SVNAdmin_finalize |
---|
60 | (JNIEnv *env, jobject jthis) |
---|
61 | { |
---|
62 | JNIEntry(SVNAdmin, finalize); |
---|
63 | SVNAdmin *cl = SVNAdmin::getCppObject(jthis); |
---|
64 | if (cl != NULL) |
---|
65 | cl->finalize(); |
---|
66 | } |
---|
67 | |
---|
68 | JNIEXPORT void JNICALL |
---|
69 | Java_org_tigris_subversion_javahl_SVNAdmin_create |
---|
70 | (JNIEnv *env, jobject jthis, jstring jpath, jboolean jdisableFsyncCommit, |
---|
71 | jboolean jkeepLog, jstring jconfigpath, jstring jfstype) |
---|
72 | { |
---|
73 | JNIEntry(SVNAdmin, create); |
---|
74 | SVNAdmin *cl = SVNAdmin::getCppObject(jthis); |
---|
75 | if (cl == NULL) |
---|
76 | { |
---|
77 | JNIUtil::throwError(_("bad C++ this")); |
---|
78 | return; |
---|
79 | } |
---|
80 | |
---|
81 | JNIStringHolder path(jpath); |
---|
82 | if (JNIUtil::isExceptionThrown()) |
---|
83 | return; |
---|
84 | |
---|
85 | JNIStringHolder configpath(jconfigpath); |
---|
86 | if (JNIUtil::isExceptionThrown()) |
---|
87 | return; |
---|
88 | |
---|
89 | JNIStringHolder fstype(jfstype); |
---|
90 | if (JNIUtil::isExceptionThrown()) |
---|
91 | return; |
---|
92 | |
---|
93 | cl->create(path, jdisableFsyncCommit? true : false, jkeepLog? true : false, |
---|
94 | configpath, fstype); |
---|
95 | } |
---|
96 | |
---|
97 | JNIEXPORT void JNICALL |
---|
98 | Java_org_tigris_subversion_javahl_SVNAdmin_deltify |
---|
99 | (JNIEnv *env, jobject jthis, jstring jpath, jobject jrevisionStart, |
---|
100 | jobject jrevisionStop) |
---|
101 | { |
---|
102 | JNIEntry(SVNAdmin, deltify); |
---|
103 | SVNAdmin *cl = SVNAdmin::getCppObject(jthis); |
---|
104 | if (cl == NULL) |
---|
105 | { |
---|
106 | JNIUtil::throwError(_("bad C++ this")); |
---|
107 | return; |
---|
108 | } |
---|
109 | |
---|
110 | JNIStringHolder path(jpath); |
---|
111 | if (JNIUtil::isExceptionThrown()) |
---|
112 | return; |
---|
113 | |
---|
114 | Revision revisionStart(jrevisionStart); |
---|
115 | if (JNIUtil::isExceptionThrown()) |
---|
116 | return; |
---|
117 | |
---|
118 | Revision revisionEnd(jrevisionStop); |
---|
119 | if (JNIUtil::isExceptionThrown()) |
---|
120 | return; |
---|
121 | |
---|
122 | cl->deltify(path, revisionStart, revisionEnd); |
---|
123 | } |
---|
124 | |
---|
125 | JNIEXPORT void JNICALL |
---|
126 | Java_org_tigris_subversion_javahl_SVNAdmin_dump |
---|
127 | (JNIEnv *env, jobject jthis, jstring jpath, jobject jdataout, |
---|
128 | jobject jmessageout, jobject jrevisionStart, jobject jrevisionEnd, |
---|
129 | jboolean jincremental, jboolean juseDeltas) |
---|
130 | { |
---|
131 | JNIEntry(SVNAdmin, dump); |
---|
132 | SVNAdmin *cl = SVNAdmin::getCppObject(jthis); |
---|
133 | if (cl == NULL) |
---|
134 | { |
---|
135 | JNIUtil::throwError(_("bad C++ this")); |
---|
136 | return; |
---|
137 | } |
---|
138 | |
---|
139 | JNIStringHolder path(jpath); |
---|
140 | if (JNIUtil::isExceptionThrown()) |
---|
141 | return; |
---|
142 | |
---|
143 | Outputer dataOut(jdataout); |
---|
144 | if (JNIUtil::isExceptionThrown()) |
---|
145 | return; |
---|
146 | |
---|
147 | Outputer messageOut(jmessageout); |
---|
148 | if (JNIUtil::isExceptionThrown()) |
---|
149 | return; |
---|
150 | |
---|
151 | Revision revisionStart(jrevisionStart); |
---|
152 | if (JNIUtil::isExceptionThrown()) |
---|
153 | return; |
---|
154 | |
---|
155 | Revision revisionEnd(jrevisionEnd); |
---|
156 | if (JNIUtil::isExceptionThrown()) |
---|
157 | return; |
---|
158 | |
---|
159 | cl->dump(path, dataOut, messageOut, revisionStart, revisionEnd, |
---|
160 | jincremental ? true : false, juseDeltas ? true : false); |
---|
161 | } |
---|
162 | |
---|
163 | JNIEXPORT void JNICALL |
---|
164 | Java_org_tigris_subversion_javahl_SVNAdmin_hotcopy |
---|
165 | (JNIEnv *env, jobject jthis, jstring jpath, jstring jtargetPath, |
---|
166 | jboolean jcleanLogs) |
---|
167 | { |
---|
168 | JNIEntry(SVNAdmin, hotcopy); |
---|
169 | SVNAdmin *cl = SVNAdmin::getCppObject(jthis); |
---|
170 | if (cl == NULL) |
---|
171 | { |
---|
172 | JNIUtil::throwError(_("bad C++ this")); |
---|
173 | return; |
---|
174 | } |
---|
175 | |
---|
176 | JNIStringHolder path(jpath); |
---|
177 | if (JNIUtil::isExceptionThrown()) |
---|
178 | return; |
---|
179 | |
---|
180 | JNIStringHolder targetPath(jtargetPath); |
---|
181 | if (JNIUtil::isExceptionThrown()) |
---|
182 | return; |
---|
183 | |
---|
184 | cl->hotcopy(path, targetPath, jcleanLogs ? true : false); |
---|
185 | } |
---|
186 | |
---|
187 | JNIEXPORT void JNICALL |
---|
188 | Java_org_tigris_subversion_javahl_SVNAdmin_listDBLogs |
---|
189 | (JNIEnv *env, jobject jthis, jstring jpath, jobject jreceiver) |
---|
190 | { |
---|
191 | JNIEntry(SVNAdmin, listDBLogs); |
---|
192 | SVNAdmin *cl = SVNAdmin::getCppObject(jthis); |
---|
193 | if (cl == NULL) |
---|
194 | { |
---|
195 | JNIUtil::throwError(_("bad C++ this")); |
---|
196 | return; |
---|
197 | } |
---|
198 | |
---|
199 | JNIStringHolder path(jpath); |
---|
200 | if (JNIUtil::isExceptionThrown()) |
---|
201 | return; |
---|
202 | |
---|
203 | MessageReceiver mr(jreceiver); |
---|
204 | if (JNIUtil::isExceptionThrown()) |
---|
205 | return; |
---|
206 | |
---|
207 | cl->listDBLogs(path, mr); |
---|
208 | } |
---|
209 | |
---|
210 | JNIEXPORT void JNICALL |
---|
211 | Java_org_tigris_subversion_javahl_SVNAdmin_listUnusedDBLogs |
---|
212 | (JNIEnv *env, jobject jthis, jstring jpath, jobject jreceiver) |
---|
213 | { |
---|
214 | JNIEntry(SVNAdmin, listUnusedDBLogs); |
---|
215 | SVNAdmin *cl = SVNAdmin::getCppObject(jthis); |
---|
216 | if (cl == NULL) |
---|
217 | { |
---|
218 | JNIUtil::throwError(_("bad C++ this")); |
---|
219 | return; |
---|
220 | } |
---|
221 | |
---|
222 | JNIStringHolder path(jpath); |
---|
223 | if (JNIUtil::isExceptionThrown()) |
---|
224 | return; |
---|
225 | |
---|
226 | MessageReceiver mr(jreceiver); |
---|
227 | if (JNIUtil::isExceptionThrown()) |
---|
228 | return; |
---|
229 | |
---|
230 | cl->listUnusedDBLogs(path, mr); |
---|
231 | } |
---|
232 | |
---|
233 | JNIEXPORT void JNICALL |
---|
234 | Java_org_tigris_subversion_javahl_SVNAdmin_load |
---|
235 | (JNIEnv *env, jobject jthis, jstring jpath, jobject jinputData, |
---|
236 | jobject joutputMsg, jboolean jignoreUUID, jboolean jforceUUID, |
---|
237 | jboolean jusePreCommitHook, jboolean jusePostCommitHook, jstring jrelativePath) |
---|
238 | { |
---|
239 | JNIEntry(SVNAdmin, load); |
---|
240 | SVNAdmin *cl = SVNAdmin::getCppObject(jthis); |
---|
241 | if (cl == NULL) |
---|
242 | { |
---|
243 | JNIUtil::throwError(_("bad C++ this")); |
---|
244 | return; |
---|
245 | } |
---|
246 | |
---|
247 | JNIStringHolder path(jpath); |
---|
248 | if (JNIUtil::isExceptionThrown()) |
---|
249 | return; |
---|
250 | |
---|
251 | Inputer inputData(jinputData); |
---|
252 | if (JNIUtil::isExceptionThrown()) |
---|
253 | return; |
---|
254 | |
---|
255 | |
---|
256 | Outputer outputMsg(joutputMsg); |
---|
257 | if (JNIUtil::isExceptionThrown()) |
---|
258 | return; |
---|
259 | |
---|
260 | JNIStringHolder relativePath(jrelativePath); |
---|
261 | if (JNIUtil::isExceptionThrown()) |
---|
262 | return; |
---|
263 | |
---|
264 | cl->load(path, inputData, outputMsg, jignoreUUID ? true : false, |
---|
265 | jforceUUID ? true : false, jusePreCommitHook ? true : false, |
---|
266 | jusePostCommitHook ? true : false, relativePath); |
---|
267 | } |
---|
268 | |
---|
269 | JNIEXPORT void JNICALL |
---|
270 | Java_org_tigris_subversion_javahl_SVNAdmin_lstxns |
---|
271 | (JNIEnv *env, jobject jthis, jstring jpath, jobject jmessageReceiver) |
---|
272 | { |
---|
273 | JNIEntry(SVNAdmin, lstxns); |
---|
274 | SVNAdmin *cl = SVNAdmin::getCppObject(jthis); |
---|
275 | if (cl == NULL) |
---|
276 | { |
---|
277 | JNIUtil::throwError(_("bad C++ this")); |
---|
278 | return; |
---|
279 | } |
---|
280 | |
---|
281 | JNIStringHolder path(jpath); |
---|
282 | if (JNIUtil::isExceptionThrown()) |
---|
283 | return; |
---|
284 | |
---|
285 | MessageReceiver mr(jmessageReceiver); |
---|
286 | if (JNIUtil::isExceptionThrown()) |
---|
287 | return; |
---|
288 | |
---|
289 | cl->lstxns(path, mr); |
---|
290 | } |
---|
291 | |
---|
292 | JNIEXPORT jlong JNICALL |
---|
293 | Java_org_tigris_subversion_javahl_SVNAdmin_recover |
---|
294 | (JNIEnv *env, jobject jthis, jstring jpath) |
---|
295 | { |
---|
296 | JNIEntry(SVNAdmin, recover); |
---|
297 | SVNAdmin *cl = SVNAdmin::getCppObject(jthis); |
---|
298 | if (cl == NULL) |
---|
299 | { |
---|
300 | JNIUtil::throwError(_("bad C++ this")); |
---|
301 | return -1; |
---|
302 | } |
---|
303 | |
---|
304 | JNIStringHolder path(jpath); |
---|
305 | if (JNIUtil::isExceptionThrown()) |
---|
306 | return -1; |
---|
307 | |
---|
308 | return cl->recover(path); |
---|
309 | } |
---|
310 | |
---|
311 | JNIEXPORT void JNICALL |
---|
312 | Java_org_tigris_subversion_javahl_SVNAdmin_rmtxns |
---|
313 | (JNIEnv *env, jobject jthis, jstring jpath, jobjectArray jtransactions) |
---|
314 | { |
---|
315 | JNIEntry(SVNAdmin, rmtxns); |
---|
316 | SVNAdmin *cl = SVNAdmin::getCppObject(jthis); |
---|
317 | if (cl == NULL) |
---|
318 | { |
---|
319 | JNIUtil::throwError(_("bad C++ this")); |
---|
320 | return; |
---|
321 | } |
---|
322 | |
---|
323 | JNIStringHolder path(jpath); |
---|
324 | if (JNIUtil::isExceptionThrown()) |
---|
325 | return; |
---|
326 | |
---|
327 | Targets transactions(jtransactions); |
---|
328 | if (JNIUtil::isExceptionThrown()) |
---|
329 | return; |
---|
330 | |
---|
331 | transactions.setDoesNotContainsPath(); |
---|
332 | cl->rmtxns(path, transactions); |
---|
333 | } |
---|
334 | |
---|
335 | /* A helper function for setRevProp() and setLog(). */ |
---|
336 | static void |
---|
337 | setRevProp(jobject jthis, jstring jpath, jobject jrevision, |
---|
338 | jstring jpropName, jstring jpropValue, |
---|
339 | jboolean jusePreRevPropChangeHook, |
---|
340 | jboolean jusePostRevPropChangeHook) |
---|
341 | { |
---|
342 | SVNAdmin *cl = SVNAdmin::getCppObject(jthis); |
---|
343 | if (cl == NULL) |
---|
344 | { |
---|
345 | JNIUtil::throwError(_("bad C++ this")); |
---|
346 | return; |
---|
347 | } |
---|
348 | |
---|
349 | JNIStringHolder path(jpath); |
---|
350 | if (JNIUtil::isExceptionThrown()) |
---|
351 | return; |
---|
352 | |
---|
353 | Revision revision(jrevision); |
---|
354 | if (JNIUtil::isExceptionThrown()) |
---|
355 | return; |
---|
356 | |
---|
357 | JNIStringHolder propName(jpropName); |
---|
358 | if (JNIUtil::isExceptionThrown()) |
---|
359 | return; |
---|
360 | |
---|
361 | JNIStringHolder propValue(jpropValue); |
---|
362 | if (JNIUtil::isExceptionThrown()) |
---|
363 | return; |
---|
364 | |
---|
365 | cl->setRevProp(path, revision, propName, propValue, |
---|
366 | jusePreRevPropChangeHook ? true : false, |
---|
367 | jusePostRevPropChangeHook ? true : false); |
---|
368 | } |
---|
369 | |
---|
370 | JNIEXPORT void JNICALL |
---|
371 | Java_org_tigris_subversion_javahl_SVNAdmin_setLog |
---|
372 | (JNIEnv *env, jobject jthis, jstring jpath, jobject jrevision, |
---|
373 | jstring jmessage, jboolean jbypassHooks) |
---|
374 | { |
---|
375 | JNIEntry(SVNAdmin, setLog); |
---|
376 | jstring jlogPropName = env->NewStringUTF(SVN_PROP_REVISION_LOG); |
---|
377 | setRevProp(jthis, jpath, jrevision, jlogPropName, jmessage, |
---|
378 | !jbypassHooks, !jbypassHooks); |
---|
379 | env->DeleteLocalRef(jlogPropName); |
---|
380 | // No need to check for an exception here, because we return anyway |
---|
381 | } |
---|
382 | |
---|
383 | JNIEXPORT void JNICALL |
---|
384 | Java_org_tigris_subversion_javahl_SVNAdmin_setRevProp |
---|
385 | (JNIEnv *env, jobject jthis, jstring jpath, jobject jrevision, |
---|
386 | jstring jpropName, jstring jpropValue, jboolean jusePreRevPropChangeHook, |
---|
387 | jboolean jusePostRevPropChangeHook) |
---|
388 | { |
---|
389 | JNIEntry(SVNAdmin, setRevProp); |
---|
390 | setRevProp(jthis, jpath, jrevision, jpropName, jpropValue, |
---|
391 | jusePreRevPropChangeHook, jusePostRevPropChangeHook); |
---|
392 | } |
---|
393 | |
---|
394 | JNIEXPORT void JNICALL |
---|
395 | Java_org_tigris_subversion_javahl_SVNAdmin_verify |
---|
396 | (JNIEnv *env, jobject jthis, jstring jpath, jobject jmessageout, |
---|
397 | jobject jrevisionStart, jobject jrevisionEnd) |
---|
398 | { |
---|
399 | JNIEntry(SVNAdmin, verify); |
---|
400 | SVNAdmin *cl = SVNAdmin::getCppObject(jthis); |
---|
401 | if (cl == NULL) |
---|
402 | { |
---|
403 | JNIUtil::throwError(_("bad C++ this")); |
---|
404 | return; |
---|
405 | } |
---|
406 | |
---|
407 | JNIStringHolder path(jpath); |
---|
408 | if (JNIUtil::isExceptionThrown()) |
---|
409 | return; |
---|
410 | |
---|
411 | Outputer messageOut(jmessageout); |
---|
412 | if (JNIUtil::isExceptionThrown()) |
---|
413 | return; |
---|
414 | |
---|
415 | Revision revisionStart(jrevisionStart); |
---|
416 | if (JNIUtil::isExceptionThrown()) |
---|
417 | return; |
---|
418 | |
---|
419 | Revision revisionEnd(jrevisionEnd); |
---|
420 | if (JNIUtil::isExceptionThrown()) |
---|
421 | return; |
---|
422 | |
---|
423 | cl->verify(path, messageOut, revisionStart, revisionEnd); |
---|
424 | } |
---|
425 | |
---|
426 | JNIEXPORT jobjectArray JNICALL |
---|
427 | Java_org_tigris_subversion_javahl_SVNAdmin_lslocks |
---|
428 | (JNIEnv *env, jobject jthis, jstring jpath) |
---|
429 | { |
---|
430 | JNIEntry(SVNAdmin, lslocks); |
---|
431 | SVNAdmin *cl = SVNAdmin::getCppObject(jthis); |
---|
432 | if (cl == NULL) |
---|
433 | { |
---|
434 | JNIUtil::throwError(_("bad C++ this")); |
---|
435 | return NULL; |
---|
436 | } |
---|
437 | |
---|
438 | JNIStringHolder path(jpath); |
---|
439 | if (JNIUtil::isExceptionThrown()) |
---|
440 | return NULL; |
---|
441 | |
---|
442 | return cl->lslocks(path); |
---|
443 | } |
---|
444 | |
---|
445 | JNIEXPORT void JNICALL |
---|
446 | Java_org_tigris_subversion_javahl_SVNAdmin_rmlocks |
---|
447 | (JNIEnv *env, jobject jthis, jstring jpath, jobjectArray jlocks) |
---|
448 | { |
---|
449 | JNIEntry(SVNAdmin, rmlocks); |
---|
450 | SVNAdmin *cl = SVNAdmin::getCppObject(jthis); |
---|
451 | if (cl == NULL) |
---|
452 | { |
---|
453 | JNIUtil::throwError(_("bad C++ this")); |
---|
454 | return; |
---|
455 | } |
---|
456 | |
---|
457 | JNIStringHolder path(jpath); |
---|
458 | if (JNIUtil::isExceptionThrown()) |
---|
459 | return; |
---|
460 | |
---|
461 | Targets locks(jlocks); |
---|
462 | if (JNIUtil::isExceptionThrown()) |
---|
463 | return; |
---|
464 | |
---|
465 | locks.setDoesNotContainsPath(); |
---|
466 | cl->rmlocks(path, locks); |
---|
467 | } |
---|