source: valtobtest/subversion-1.6.2/subversion/bindings/javahl/native/org_tigris_subversion_javahl_SVNAdmin.cpp @ 3

Last change on this file since 3 was 3, checked in by valtob, 15 years ago

subversion source 1.6.2 as test

File size: 11.7 KB
Line 
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
35JNIEXPORT jlong JNICALL
36Java_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
44JNIEXPORT void JNICALL
45Java_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
58JNIEXPORT void JNICALL
59Java_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
68JNIEXPORT void JNICALL
69Java_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
97JNIEXPORT void JNICALL
98Java_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
125JNIEXPORT void JNICALL
126Java_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
163JNIEXPORT void JNICALL
164Java_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
187JNIEXPORT void JNICALL
188Java_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
210JNIEXPORT void JNICALL
211Java_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
233JNIEXPORT void JNICALL
234Java_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
269JNIEXPORT void JNICALL
270Java_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
292JNIEXPORT jlong JNICALL
293Java_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
311JNIEXPORT void JNICALL
312Java_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(). */
336static void
337setRevProp(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
370JNIEXPORT void JNICALL
371Java_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
383JNIEXPORT void JNICALL
384Java_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
394JNIEXPORT void JNICALL
395Java_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
426JNIEXPORT jobjectArray JNICALL
427Java_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
445JNIEXPORT void JNICALL
446Java_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}
Note: See TracBrowser for help on using the repository browser.