You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2010/08/10 20:06:33 UTC
svn commit: r984153 [5/39] - in /subversion/branches/ignore-mergeinfo: ./
build/ build/ac-macros/ build/generator/ build/generator/templates/
build/hudson/ build/hudson/jobs/subversion-1.6.x-solaris/
build/hudson/jobs/subversion-1.6.x-ubuntu/ build/hud...
Modified: subversion/branches/ignore-mergeinfo/notes/obliterate/hooks/post-obliterate.tmpl
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/notes/obliterate/hooks/post-obliterate.tmpl?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/notes/obliterate/hooks/post-obliterate.tmpl (original)
+++ subversion/branches/ignore-mergeinfo/notes/obliterate/hooks/post-obliterate.tmpl Tue Aug 10 18:06:17 2010
@@ -39,8 +39,8 @@
# Here is an example hook script, for a Unix /bin/sh interpreter.
# For more examples and pre-written hooks, see those in
# the Subversion repository at
-# http://svn.collab.net/repos/svn/trunk/tools/hook-scripts/ and
-# http://svn.collab.net/repos/svn/trunk/contrib/hook-scripts/
+# http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/ and
+# http://svn.apache.org/repos/asf/subversion/trunk/contrib/hook-scripts/
REPOS="$1"
Modified: subversion/branches/ignore-mergeinfo/notes/obliterate/hooks/pre-obliterate.tmpl
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/notes/obliterate/hooks/pre-obliterate.tmpl?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/notes/obliterate/hooks/pre-obliterate.tmpl (original)
+++ subversion/branches/ignore-mergeinfo/notes/obliterate/hooks/pre-obliterate.tmpl Tue Aug 10 18:06:17 2010
@@ -52,8 +52,8 @@
# Here is an example hook script, for a Unix /bin/sh interpreter.
# For more examples and pre-written hooks, see those in
# the Subversion repository at
-# http://svn.collab.net/repos/svn/trunk/tools/hook-scripts/ and
-# http://svn.collab.net/repos/svn/trunk/contrib/hook-scripts/
+# http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/ and
+# http://svn.apache.org/repos/asf/subversion/trunk/contrib/hook-scripts/
REPOS="$1"
Modified: subversion/branches/ignore-mergeinfo/notes/obliterate/plan-milestones.html
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/notes/obliterate/plan-milestones.html?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/notes/obliterate/plan-milestones.html (original)
+++ subversion/branches/ignore-mergeinfo/notes/obliterate/plan-milestones.html Tue Aug 10 18:06:17 2010
@@ -66,7 +66,8 @@
<th>November 2009</th>
<th>Milestone 1</th>
<th>Milestone 2</th>
- <th>Milestone 3</th>
+ <th>Milestone 3a</th>
+ <th>Milestone 3b</th>
<th>Not planned</th>
</tr>
<tr>
@@ -82,6 +83,9 @@
Obliteration of any node-rev. Some user docs.
</td>
<td>
+ Support FSFS.
+ </td>
+ <td>
Support for large-scale deployment.
</td>
<td>
@@ -94,6 +98,9 @@
<td class="done">
<p>single node (PATH@REV)</p>
</td>
+ <td class="done">
+ <p></p>
+ </td>
<td>
<p></p>
</td>
@@ -107,6 +114,7 @@
<td>
<p>GUI</p>
<p>find all copies of the specified nodes</p>
+ <p>dry-run mode</p>
</td>
</tr>
<tr>
@@ -115,7 +123,7 @@
<p>pre-oblit hook designed</p>
<p>pre-oblit hook template generated on repository creation</p>
</td>
- <td>
+ <td class="done">
<p>call the pre-oblit hook</p>
</td>
<td>
@@ -127,6 +135,9 @@
<td>
<p></p>
</td>
+ <td>
+ <p></p>
+ </td>
</tr>
<tr>
<th>CORE (history change)<br/><a href="design-repos.html#history"
@@ -136,20 +147,23 @@
<p>skeleton of txn-replacement functions created (doesn't work)</p>
</td>
<td>
- <p>in FSFS: oblit the last revision of a node's history</p>
+ <p class="done">oblit the last revision of a node's history (in BDB)</p>
<p>(to do: understand & doc the DAG node-copy-ids)</p>
- <p>(to design: refine <a href="design-repos.html"
+ <p class="done">(to design: refine <a href="design-repos.html"
>oblit txn replacement</a>)</p>
- <p>(to design: FSFS rev-file replacement: offset mapping)</p>
</td>
<td>
<p>oblit any rev of a node's history</p>
<p>(to design: adjusting of back-refs)</p>
<p>(to design: forward-refs for efficient searching - see <a href=
- "http://svn.collab.net/repos/svn/branches/fs-successor-ids/BRANCH-README"
+ "http://svn.apache.org/repos/asf/subversion/branches/fs-successor-ids/BRANCH-README"
>fs-successor-ids</a> branch for BDB)</p>
</td>
<td>
+ <p>FSFS implementation</p>
+ <p>(to design: FSFS rev-file replacement: offset mapping)</p>
+ </td>
+ <td>
<p>forward-refs for efficient searching</p>
<p>efficient revision-range support (foo@1:500000)
</p>
@@ -164,6 +178,9 @@
<td class="done">
<p></p>
</td>
+ <td class="done">
+ <p></p>
+ </td>
<td>
<p></p>
</td>
@@ -171,7 +188,7 @@
<p></p>
</td>
<td>
- <p>space recovery</p>
+ <p>space recovery (FSFS)</p>
</td>
<td>
<p></p>
@@ -183,13 +200,16 @@
<p>post-oblit hook designed</p>
<p>post-oblit hook template generated on repository creation</p>
</td>
- <td>
+ <td class="done">
<p></p>
</td>
<td>
<p>call post-oblit hook</p>
</td>
<td>
+ <p></p>
+ </td>
+ <td>
<p>server log file</p>
</td>
<td>
@@ -201,13 +221,16 @@
<td class="done">
<p></p>
</td>
- <td>
+ <td class="done">
<p></p>
</td>
<td>
<p>discover & doc the WC behaviour & how to survive it</p>
</td>
<td>
+ <p></p>
+ </td>
+ <td>
<p>design WC behaviour improvements</p>
<p>obliteration discovery protocol</p>
</td>
@@ -220,13 +243,16 @@
<td class="done">
<p>skeleton of one automated test (doesn't work)</p>
</td>
- <td>
+ <td class="done">
<p>some automated tests</p>
</td>
<td>
<p>automated tests for most parts</p>
</td>
<td>
+ <p></p>
+ </td>
+ <td>
<p>complete automated tests</p>
<p>stress test (manually checked)</p>
</td>
@@ -248,6 +274,9 @@
<p>some user docs</p>
</td>
<td>
+ <p></p>
+ </td>
+ <td>
<p>user documentation</p>
</td>
<td>
Modified: subversion/branches/ignore-mergeinfo/notes/subversion-design.html
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/notes/subversion-design.html?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/notes/subversion-design.html (original)
+++ subversion/branches/ignore-mergeinfo/notes/subversion-design.html Tue Aug 10 18:06:17 2010
@@ -2255,7 +2255,7 @@ write/Makefile:6
<p>For a detailed description of exactly how Greg Stein
<em class="email">gstein@lyra.org</em> is mapping the WebDAV DeltaV spec to
- Subversion, see his paper: <a href="http://svn.collab.net/repos/svn/trunk/www/webdav-usage.html">http://svn.collab.net/repos/svn/trunk/www/webdav-usage.html</a>
+ Subversion, see his paper: <a href="http://svn.apache.org/repos/asf/subversion/trunk/www/webdav-usage.html">http://svn.apache.org/repos/asf/subversion/trunk/www/webdav-usage.html</a>
</p>
<p>For more information on WebDAV and the DeltaV extensions, see
@@ -2273,7 +2273,7 @@ write/Makefile:6
<p>The client library <tt class="literal">libsvn_ra_svn</tt> and standalone
server program <tt class="literal">svnserve</tt> implement a custom protocol
- over TCP. This protocol is documented at <a href="http://svn.collab.net/repos/svn/trunk/subversion/libsvn_ra_svn/protocol">http://svn.collab.net/repos/svn/trunk/subversion/libsvn_ra_svn/protocol</a>.</p>
+ over TCP. This protocol is documented at <a href="http://svn.apache.org/repos/asf/subversion/trunk/subversion/libsvn_ra_svn/protocol">http://svn.apache.org/repos/asf/subversion/trunk/subversion/libsvn_ra_svn/protocol</a>.</p>
</div> <!-- protocol.svn (h3) -->
</div> <!-- protocol (h2) -->
Modified: subversion/branches/ignore-mergeinfo/notes/wc-ng/design
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/notes/wc-ng/design?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/notes/wc-ng/design (original)
+++ subversion/branches/ignore-mergeinfo/notes/wc-ng/design Tue Aug 10 18:06:17 2010
@@ -56,6 +56,11 @@ defined. When explicitly considering wh
working copy at one time or another, the following trees can be
found:
+ ###
+ ### WARNING: the following descriptions don't correspond to either
+ ### the WC-NG DB concepts or the command-line user concepts.
+ ###
+
* BASE: The tree of nodes from the repository, against which local changes
are made. Also known as "pristine". Each node is as it was in the
repository at a particular revision and URL, as recorded per node in
Modified: subversion/branches/ignore-mergeinfo/packages/python-windows/setup.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/packages/python-windows/setup.py?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/packages/python-windows/setup.py (original)
+++ subversion/branches/ignore-mergeinfo/packages/python-windows/setup.py Tue Aug 10 18:06:17 2010
@@ -27,8 +27,8 @@ from svn.core import SVN_VER_NUMBER
setup (name = "svn-python",
description = "Subversion Python Bindings",
- maintainer = "Subversion Developers <de...@subversion.tigris.org>",
- url = "http://subversion.tigris.org",
+ maintainer = "Subversion Developers <de...@subversion.apache.org>",
+ url = "http://subversion.apache.org",
version = SVN_VER_NUMBER,
packages = ["libsvn", "svn"],
package_data = {"libsvn": ["*.dll", "*.pyd"]})
Modified: subversion/branches/ignore-mergeinfo/packages/solaris/pkginfo.in
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/packages/solaris/pkginfo.in?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/packages/solaris/pkginfo.in (original)
+++ subversion/branches/ignore-mergeinfo/packages/solaris/pkginfo.in Tue Aug 10 18:06:17 2010
@@ -4,8 +4,8 @@ ARCH="@target_cpu@"
VERSION=@PACKAGE_VERSION@
CATEGORY="application"
VENDOR="Subversion Project"
-EMAIL="dev@subversion.tigris.org"
-PSTAMP="dev@subversion.tigris.org"
+EMAIL="dev@subversion.apache.org"
+PSTAMP="dev@subversion.apache.org"
BASEDIR="@prefix@"
CLASSES="none"
Modified: subversion/branches/ignore-mergeinfo/packages/windows-WiX/BuildSubversion/WixDialog/loc/en-us/Pre.rtf
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/packages/windows-WiX/BuildSubversion/WixDialog/loc/en-us/Pre.rtf?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
Binary files - no diff available.
Modified: subversion/branches/ignore-mergeinfo/packages/windows-innosetup/Pre.rtf
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/packages/windows-innosetup/Pre.rtf?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/packages/windows-innosetup/Pre.rtf (original)
+++ subversion/branches/ignore-mergeinfo/packages/windows-innosetup/Pre.rtf Tue Aug 10 18:06:17 2010
@@ -12,7 +12,7 @@ Subversion is a compelling replacement f
\
See:\
http://subversion.tigris.org/ and\
- http://svn.collab.net/repos/svn/trunk/CHANGES for more info.\
+ http://svn.apache.org/repos/asf/subversion/trunk/CHANGES for more info.\
\
Subversion is using some external programs and libraries included in this package.\
The proper licenses are in the licenses folder in the application path created after this installation.\
Modified: subversion/branches/ignore-mergeinfo/subversion/bindings/ctypes-python/csvn/core/functions.py.in
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/bindings/ctypes-python/csvn/core/functions.py.in?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/bindings/ctypes-python/csvn/core/functions.py.in (original)
+++ subversion/branches/ignore-mergeinfo/subversion/bindings/ctypes-python/csvn/core/functions.py.in Tue Aug 10 18:06:17 2010
@@ -65,6 +65,11 @@ def SVN_ERR(ret):
raise SubversionException(err)
return ret
+# If a error is returned from a Subversion function,
+# raise an exception
+def _svn_errcheck(result, func, args):
+ return SVN_ERR(result)
+
# As of ctypes 1.0, ctypes does not support custom error-checking
# functions on callbacks, nor does it support custom datatypes on
# callbacks, so ctypesgen sets the return values for callbacks
Modified: subversion/branches/ignore-mergeinfo/subversion/bindings/ctypes-python/setup.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/bindings/ctypes-python/setup.py?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/bindings/ctypes-python/setup.py (original)
+++ subversion/branches/ignore-mergeinfo/subversion/bindings/ctypes-python/setup.py Tue Aug 10 18:06:17 2010
@@ -254,10 +254,10 @@ class build(_build):
sys.exit(2)
if not self.dry_run:
+ r = re.compile(r"(\s+\w+)\.restype = POINTER\(svn_error_t\)")
out = open("svn_all2.py", "w")
for line in open("svn_all.py"):
- line = line.replace("restype = POINTER(svn_error_t)",
- "restype = SVN_ERR")
+ line = r.sub("\\1.restype = POINTER(svn_error_t)\n\\1.errcheck = _svn_errcheck", line)
if not line.startswith("FILE ="):
out.write(line)
@@ -470,8 +470,8 @@ setup(cmdclass={'build': build, 'clean':
version='0.1',
description='Python bindings for the Subversion version control system.',
author='The Subversion Team',
- author_email='dev@subversion.tigris.org',
- url='http://subversion.tigris.org',
+ author_email='dev@subversion.apache.org',
+ url='http://subversion.apache.org',
packages=['csvn', 'csvn.core', 'csvn.ext'],
license='Apache License, Version 2.0',
)
Modified: subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/BlameCallback.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/BlameCallback.cpp?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/BlameCallback.cpp (original)
+++ subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/BlameCallback.cpp Tue Aug 10 18:06:17 2010
@@ -25,7 +25,7 @@
*/
#include "BlameCallback.h"
-#include "ProplistCallback.h"
+#include "CreateJ.h"
#include "JNIUtil.h"
#include "svn_time.h"
/**
@@ -79,69 +79,54 @@ BlameCallback::singleLine(apr_int64_t li
{
JNIEnv *env = JNIUtil::getEnv();
+ // Create a local frame for our references
+ env->PushLocalFrame(LOCAL_FRAME_SIZE);
+ if (JNIUtil::isJavaExceptionThrown())
+ return SVN_NO_ERROR;
+
// The method id will not change during the time this library is
// loaded, so it can be cached.
static jmethodID mid = 0;
if (mid == 0)
{
- jclass clazz = env->FindClass(JAVA_PACKAGE"/BlameCallback3");
+ jclass clazz = env->FindClass(JAVA_PACKAGE"/callback/BlameCallback");
if (JNIUtil::isJavaExceptionThrown())
- return SVN_NO_ERROR;
+ POP_AND_RETURN(SVN_NO_ERROR);
mid = env->GetMethodID(clazz, "singleLine",
"(JJLjava/util/Map;JLjava/util/Map;"
"Ljava/lang/String;Ljava/lang/String;Z)V");
if (JNIUtil::isJavaExceptionThrown() || mid == 0)
- return SVN_NO_ERROR;
-
- env->DeleteLocalRef(clazz);
- if (JNIUtil::isJavaExceptionThrown())
- return SVN_NO_ERROR;
+ POP_AND_RETURN(SVN_NO_ERROR);
}
// convert the parameters to their Java relatives
- jobject jrevProps = ProplistCallback::makeMapFromHash(revProps, pool);
+ jobject jrevProps = CreateJ::PropertyMap(revProps, pool);
if (JNIUtil::isJavaExceptionThrown())
- return SVN_NO_ERROR;
+ POP_AND_RETURN(SVN_NO_ERROR);
jobject jmergedRevProps = NULL;
if (mergedRevProps != NULL)
{
- jmergedRevProps = ProplistCallback::makeMapFromHash(mergedRevProps, pool);
+ jmergedRevProps = CreateJ::PropertyMap(mergedRevProps, pool);
if (JNIUtil::isJavaExceptionThrown())
- return SVN_NO_ERROR;
+ POP_AND_RETURN(SVN_NO_ERROR);
}
jstring jmergedPath = JNIUtil::makeJString(mergedPath);
if (JNIUtil::isJavaExceptionThrown())
- return SVN_NO_ERROR;
+ POP_AND_RETURN(SVN_NO_ERROR);
jstring jline = JNIUtil::makeJString(line);
if (JNIUtil::isJavaExceptionThrown())
- return SVN_NO_ERROR;
+ POP_AND_RETURN(SVN_NO_ERROR);
// call the Java method
env->CallVoidMethod(m_callback, mid, (jlong)line_no, (jlong)revision,
jrevProps, (jlong)mergedRevision, jmergedRevProps,
jmergedPath, jline, (jboolean)localChange);
- if (JNIUtil::isJavaExceptionThrown())
- return SVN_NO_ERROR;
-
- // cleanup the temporary Java objects
- env->DeleteLocalRef(jrevProps);
- if (JNIUtil::isJavaExceptionThrown())
- return SVN_NO_ERROR;
-
- env->DeleteLocalRef(jmergedRevProps);
- if (JNIUtil::isJavaExceptionThrown())
- return SVN_NO_ERROR;
-
- env->DeleteLocalRef(jmergedPath);
- if (JNIUtil::isJavaExceptionThrown())
- return SVN_NO_ERROR;
-
- env->DeleteLocalRef(jline);
// No need to check for an exception here, because we return anyway.
+ env->PopLocalFrame(NULL);
return SVN_NO_ERROR;
}
Modified: subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/ChangelistCallback.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/ChangelistCallback.cpp?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/ChangelistCallback.cpp (original)
+++ subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/ChangelistCallback.cpp Tue Aug 10 18:06:17 2010
@@ -72,7 +72,7 @@ ChangelistCallback::doChangelist(const c
// it can be cached.
if (mid == 0)
{
- jclass clazz = env->FindClass(JAVA_PACKAGE"/ChangelistCallback");
+ jclass clazz = env->FindClass(JAVA_PACKAGE"/callback/ChangelistCallback");
if (JNIUtil::isJavaExceptionThrown())
return;
Modified: subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/CommitMessage.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/CommitMessage.cpp?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/CommitMessage.cpp (original)
+++ subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/CommitMessage.cpp Tue Aug 10 18:06:17 2010
@@ -25,10 +25,12 @@
*/
#include "CommitMessage.h"
+#include "CreateJ.h"
+#include "EnumMapper.h"
#include "JNIUtil.h"
#include <apr_tables.h>
#include "svn_client.h"
-#include "../include/org_tigris_subversion_javahl_CommitItemStateFlags.h"
+#include "../include/org_apache_subversion_javahl_CommitItemStateFlags.h"
CommitMessage::CommitMessage(jobject jcommitMessage)
{
@@ -95,11 +97,6 @@ CommitMessage::getCommitMessage(const ap
if (JNIUtil::isExceptionThrown())
return NULL;
- int count = commit_items->nelts;
- jobjectArray jitems = env->NewObjectArray(count, clazz, NULL);
- if (JNIUtil::isExceptionThrown())
- return NULL;
-
// Java method ids will not change during the time this library is
// loaded, so they can be cached.
@@ -109,7 +106,8 @@ CommitMessage::getCommitMessage(const ap
{
midConstructor = env->GetMethodID(clazz, "<init>",
"(Ljava/lang/String;"
- "IILjava/lang/String;"
+ "L"JAVA_PACKAGE"/NodeKind;"
+ "ILjava/lang/String;"
"Ljava/lang/String;J)V");
if (JNIUtil::isExceptionThrown())
return NULL;
@@ -124,8 +122,7 @@ CommitMessage::getCommitMessage(const ap
return NULL;
midCallback = env->GetMethodID(clazz2, "getLogMessage",
- "([L"JAVA_PACKAGE"/CommitItem;)"
- "Ljava/lang/String;");
+ "(Ljava/util/Set;)Ljava/lang/String;");
if (JNIUtil::isJavaExceptionThrown())
return NULL;
@@ -135,7 +132,8 @@ CommitMessage::getCommitMessage(const ap
}
// create a Java CommitItem for each of the passed in commit items
- for (int i = 0; i < count; ++i)
+ std::vector<jobject> jitems;
+ for (int i = 0; i < commit_items->nelts; ++i)
{
svn_client_commit_item3_t *item =
APR_ARRAY_IDX(commit_items, i, svn_client_commit_item3_t *);
@@ -143,28 +141,34 @@ CommitMessage::getCommitMessage(const ap
// convert the commit item members to the match Java members
jstring jpath = JNIUtil::makeJString(item->path);
- jint jnodeKind = item->kind;
+ jobject jnodeKind = EnumMapper::mapNodeKind(item->kind);
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
jint jstateFlags = 0;
if (item->state_flags & SVN_CLIENT_COMMIT_ITEM_ADD)
jstateFlags |=
- org_tigris_subversion_javahl_CommitItemStateFlags_Add;
+ org_apache_subversion_javahl_CommitItemStateFlags_Add;
if (item->state_flags & SVN_CLIENT_COMMIT_ITEM_DELETE)
jstateFlags |=
- org_tigris_subversion_javahl_CommitItemStateFlags_Delete;
+ org_apache_subversion_javahl_CommitItemStateFlags_Delete;
if (item->state_flags & SVN_CLIENT_COMMIT_ITEM_TEXT_MODS)
jstateFlags |=
- org_tigris_subversion_javahl_CommitItemStateFlags_TextMods;
+ org_apache_subversion_javahl_CommitItemStateFlags_TextMods;
if (item->state_flags & SVN_CLIENT_COMMIT_ITEM_PROP_MODS)
jstateFlags |=
- org_tigris_subversion_javahl_CommitItemStateFlags_PropMods;
+ org_apache_subversion_javahl_CommitItemStateFlags_PropMods;
if (item->state_flags & SVN_CLIENT_COMMIT_ITEM_IS_COPY)
jstateFlags |=
- org_tigris_subversion_javahl_CommitItemStateFlags_IsCopy;
+ org_apache_subversion_javahl_CommitItemStateFlags_IsCopy;
jstring jurl = JNIUtil::makeJString(item->url);
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
jstring jcopyUrl = JNIUtil::makeJString(item->copyfrom_url);
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
jlong jcopyRevision = item->revision;
@@ -180,6 +184,9 @@ CommitMessage::getCommitMessage(const ap
if (JNIUtil::isJavaExceptionThrown())
return NULL;
+ env->DeleteLocalRef(jnodeKind);
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
env->DeleteLocalRef(jurl);
if (JNIUtil::isJavaExceptionThrown())
@@ -190,10 +197,9 @@ CommitMessage::getCommitMessage(const ap
return NULL;
// store the Java object into the array
- env->SetObjectArrayElement(jitems, i, jitem);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ jitems.push_back(jitem);
}
+
env->DeleteLocalRef(clazz);
if (JNIUtil::isJavaExceptionThrown())
return NULL;
@@ -201,12 +207,7 @@ CommitMessage::getCommitMessage(const ap
// call the Java callback method
jstring jmessage = (jstring)env->CallObjectMethod(m_jcommitMessage,
midCallback,
- jitems);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
-
- // release the Java object array
- env->DeleteLocalRef(jitems);
+ CreateJ::Set(jitems));
if (JNIUtil::isJavaExceptionThrown())
return NULL;
Modified: subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/ConflictResolverCallback.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/ConflictResolverCallback.cpp?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/ConflictResolverCallback.cpp (original)
+++ subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/ConflictResolverCallback.cpp Tue Aug 10 18:06:17 2010
@@ -26,7 +26,6 @@
#include "svn_error.h"
-#include "../include/org_tigris_subversion_javahl_ConflictResult.h"
#include "JNIUtil.h"
#include "JNIStringHolder.h"
#include "EnumMapper.h"
@@ -57,7 +56,7 @@ ConflictResolverCallback::makeCConflictR
// Sanity check that the object implements the ConflictResolverCallback
// Java interface.
- jclass clazz = env->FindClass(JAVA_PACKAGE "/ConflictResolverCallback");
+ jclass clazz = env->FindClass(JAVA_PACKAGE "/callback/ConflictResolverCallback");
if (JNIUtil::isJavaExceptionThrown())
return NULL;
@@ -99,31 +98,32 @@ ConflictResolverCallback::resolve(svn_wc
{
JNIEnv *env = JNIUtil::getEnv();
+ // Create a local frame for our references
+ env->PushLocalFrame(LOCAL_FRAME_SIZE);
+ if (JNIUtil::isJavaExceptionThrown())
+ return SVN_NO_ERROR;
+
// As Java method IDs will not change during the time this library
// is loaded, they can be cached.
static jmethodID mid = 0;
if (mid == 0)
{
// Initialize the callback method ID.
- jclass clazz = env->FindClass(JAVA_PACKAGE "/ConflictResolverCallback");
+ jclass clazz = env->FindClass(JAVA_PACKAGE "/callback/ConflictResolverCallback");
if (JNIUtil::isJavaExceptionThrown())
- return SVN_NO_ERROR;
+ POP_AND_RETURN(SVN_NO_ERROR);
mid = env->GetMethodID(clazz, "resolve",
"(L" JAVA_PACKAGE "/ConflictDescriptor;)"
"L" JAVA_PACKAGE "/ConflictResult;");
if (JNIUtil::isJavaExceptionThrown() || mid == 0)
- return SVN_NO_ERROR;
-
- env->DeleteLocalRef(clazz);
- if (JNIUtil::isJavaExceptionThrown())
- return SVN_NO_ERROR;
+ POP_AND_RETURN(SVN_NO_ERROR);
}
// Create an instance of the conflict descriptor.
jobject jdesc = CreateJ::ConflictDescriptor(desc);
if (JNIUtil::isJavaExceptionThrown())
- return SVN_NO_ERROR;
+ POP_AND_RETURN(SVN_NO_ERROR);
// Invoke the Java conflict resolver callback method using the descriptor.
jobject jresult = env->CallObjectMethod(m_conflictResolver, mid, jdesc);
@@ -132,17 +132,20 @@ ConflictResolverCallback::resolve(svn_wc
// If an exception is thrown by our conflict resolver, remove it
// from the JNI env, and convert it into a Subversion error.
const char *msg = JNIUtil::thrownExceptionToCString();
- return svn_error_create(SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE, NULL, msg);
+ svn_error_t *err = svn_error_create(SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE,
+ NULL, msg);
+ env->PopLocalFrame(NULL);
+ return err;
}
*result = javaResultToC(jresult, pool);
if (*result == NULL)
- // Unable to convert the result into a C representation.
- return svn_error_create(SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE, NULL, NULL);
-
- env->DeleteLocalRef(jdesc);
- if (JNIUtil::isJavaExceptionThrown())
- return SVN_NO_ERROR;
+ {
+ // Unable to convert the result into a C representation.
+ env->PopLocalFrame(NULL);
+ return svn_error_create(SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE, NULL, NULL);
+ }
+ env->PopLocalFrame(NULL);
return SVN_NO_ERROR;
}
@@ -150,6 +153,12 @@ svn_wc_conflict_result_t *
ConflictResolverCallback::javaResultToC(jobject jresult, apr_pool_t *pool)
{
JNIEnv *env = JNIUtil::getEnv();
+
+ // Create a local frame for our references
+ env->PushLocalFrame(LOCAL_FRAME_SIZE);
+ if (JNIUtil::isJavaExceptionThrown())
+ return SVN_NO_ERROR;
+
static jmethodID getChoice = 0;
static jmethodID getMergedPath = 0;
@@ -158,63 +167,41 @@ ConflictResolverCallback::javaResultToC(
{
clazz = env->FindClass(JAVA_PACKAGE "/ConflictResult");
if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ POP_AND_RETURN_NULL;
}
if (getChoice == 0)
{
- getChoice = env->GetMethodID(clazz, "getChoice", "()I");
+ getChoice = env->GetMethodID(clazz, "getChoice",
+ "()L"JAVA_PACKAGE"/ConflictResult$Choice;");
if (JNIUtil::isJavaExceptionThrown() || getChoice == 0)
- return NULL;
+ POP_AND_RETURN_NULL;
}
if (getMergedPath == 0)
{
getMergedPath = env->GetMethodID(clazz, "getMergedPath",
"()Ljava/lang/String;");
if (JNIUtil::isJavaExceptionThrown() || getMergedPath == 0)
- return NULL;
+ POP_AND_RETURN_NULL;
}
- if (clazz)
- {
- env->DeleteLocalRef(clazz);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- }
-
- jint jchoice = env->CallIntMethod(jresult, getChoice);
+ jobject jchoice = env->CallObjectMethod(jresult, getChoice);
if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ POP_AND_RETURN_NULL;
- jstring jmergedPath =
- (jstring) env->CallObjectMethod(jresult, getMergedPath);
+ jstring jmergedPath = (jstring) env->CallObjectMethod(jresult, getMergedPath);
if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ POP_AND_RETURN_NULL;
+
JNIStringHolder mergedPath(jmergedPath);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
- return svn_wc_create_conflict_result(javaChoiceToC(jchoice),
+ svn_wc_conflict_result_t *result =
+ svn_wc_create_conflict_result(EnumMapper::toConflictChoice(jchoice),
mergedPath.pstrdup(pool),
pool);
-}
-svn_wc_conflict_choice_t ConflictResolverCallback::javaChoiceToC(jint jchoice)
-{
- switch (jchoice)
- {
- case org_tigris_subversion_javahl_ConflictResult_postpone:
- default:
- return svn_wc_conflict_choose_postpone;
- case org_tigris_subversion_javahl_ConflictResult_chooseBase:
- return svn_wc_conflict_choose_base;
- case org_tigris_subversion_javahl_ConflictResult_chooseTheirsFull:
- return svn_wc_conflict_choose_theirs_full;
- case org_tigris_subversion_javahl_ConflictResult_chooseMineFull:
- return svn_wc_conflict_choose_mine_full;
- case org_tigris_subversion_javahl_ConflictResult_chooseTheirsConflict:
- return svn_wc_conflict_choose_theirs_conflict;
- case org_tigris_subversion_javahl_ConflictResult_chooseMineConflict:
- return svn_wc_conflict_choose_mine_conflict;
- case org_tigris_subversion_javahl_ConflictResult_chooseMerged:
- return svn_wc_conflict_choose_merged;
- }
+ env->PopLocalFrame(NULL);
+ return result;
}
Modified: subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/ConflictResolverCallback.h
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/ConflictResolverCallback.h?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/ConflictResolverCallback.h (original)
+++ subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/ConflictResolverCallback.h Tue Aug 10 18:06:17 2010
@@ -91,12 +91,6 @@ class ConflictResolverCallback
*/
static svn_wc_conflict_result_t * javaResultToC(jobject result,
apr_pool_t *pool);
-
- /**
- * Convert the Java conflict resolution @a choice into the
- * appropriate C enum value.
- */
- static svn_wc_conflict_choice_t javaChoiceToC(jint choice);
};
#endif // CONFLICTRESOLVERCALLBACK_H
Modified: subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/CopySources.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/CopySources.cpp?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/CopySources.cpp (original)
+++ subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/CopySources.cpp Tue Aug 10 18:06:17 2010
@@ -33,16 +33,13 @@
#include "Revision.h"
#include "CopySources.h"
-CopySources::CopySources(jobjectArray jcopySources)
+CopySources::CopySources(Array ©Sources)
+ : m_copySources(copySources)
{
- m_copySources = jcopySources;
}
CopySources::~CopySources()
{
- // m_copySources does not need to be destroyed, because it is a
- // parameter to the Java SVNClient.copy() method, and thus not
- // explicitly managed.
}
jobject
@@ -50,17 +47,22 @@ CopySources::makeJCopySource(const char
{
JNIEnv *env = JNIUtil::getEnv();
- jobject jpath = JNIUtil::makeJString(path);
+ // Create a local frame for our references
+ env->PushLocalFrame(LOCAL_FRAME_SIZE);
if (JNIUtil::isJavaExceptionThrown())
return NULL;
+ jobject jpath = JNIUtil::makeJString(path);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
jobject jrevision = Revision::makeJRevision(rev);
if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ POP_AND_RETURN_NULL;
jclass clazz = env->FindClass(JAVA_PACKAGE "/CopySource");
if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ POP_AND_RETURN_NULL;
static jmethodID ctor = 0;
if (ctor == 0)
@@ -70,129 +72,107 @@ CopySources::makeJCopySource(const char
"L" JAVA_PACKAGE "/Revision;"
"L" JAVA_PACKAGE "/Revision;)V");
if (JNIUtil::isExceptionThrown())
- return NULL;
+ POP_AND_RETURN_NULL;
}
jobject jcopySource = env->NewObject(clazz, ctor, jpath, jrevision, NULL);
if (JNIUtil::isJavaExceptionThrown())
- return NULL;
-
- env->DeleteLocalRef(jpath);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ POP_AND_RETURN_NULL;
- env->DeleteLocalRef(jrevision);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
-
- return jcopySource;
+ return env->PopLocalFrame(jcopySource);
}
apr_array_header_t *
CopySources::array(SVN::Pool &pool)
{
apr_pool_t *p = pool.pool();
- if (m_copySources == NULL)
- return apr_array_make(p, 0, sizeof(svn_client_copy_source_t *));
JNIEnv *env = JNIUtil::getEnv();
- jint nbrSources = env->GetArrayLength(m_copySources);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
-
jclass clazz = env->FindClass(JAVA_PACKAGE "/CopySource");
if (JNIUtil::isJavaExceptionThrown())
return NULL;
+ std::vector<jobject> sources = m_copySources.vector();
+
apr_array_header_t *copySources =
- apr_array_make(p, nbrSources, sizeof(svn_client_copy_source_t *));
- for (int i = 0; i < nbrSources; ++i)
+ apr_array_make(p, sources.size(), sizeof(svn_client_copy_source_t *));
+ for (std::vector<jobject>::const_iterator it = sources.begin();
+ it < sources.end(); ++it)
{
- jobject copySource = env->GetObjectArrayElement(m_copySources, i);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ svn_client_copy_source_t *src =
+ (svn_client_copy_source_t *) apr_palloc(p, sizeof(*src));
- if (env->IsInstanceOf(copySource, clazz))
+ // Extract the path or URL from the copy source.
+ static jmethodID getPath = 0;
+ if (getPath == 0)
{
- svn_client_copy_source_t *src =
- (svn_client_copy_source_t *) apr_palloc(p, sizeof(*src));
-
- // Extract the path or URL from the copy source.
- static jmethodID getPath = 0;
- if (getPath == 0)
- {
- getPath = env->GetMethodID(clazz, "getPath",
- "()Ljava/lang/String;");
- if (JNIUtil::isJavaExceptionThrown() || getPath == 0)
- return NULL;
- }
- jstring jpath = (jstring)
- env->CallObjectMethod(copySource, getPath);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
-
- JNIStringHolder path(jpath);
- if (JNIUtil::isJavaExceptionThrown())
+ getPath = env->GetMethodID(clazz, "getPath",
+ "()Ljava/lang/String;");
+ if (JNIUtil::isJavaExceptionThrown() || getPath == 0)
return NULL;
+ }
+ jstring jpath = (jstring)
+ env->CallObjectMethod(*it, getPath);
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
- src->path = apr_pstrdup(p, (const char *) path);
- SVN_JNI_ERR(JNIUtil::preprocessPath(src->path, pool.pool()),
- NULL);
- env->DeleteLocalRef(jpath);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ JNIStringHolder path(jpath);
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
- // Extract source revision from the copy source.
- static jmethodID getRevision = 0;
- if (getRevision == 0)
- {
- getRevision = env->GetMethodID(clazz, "getRevision",
- "()L"JAVA_PACKAGE"/Revision;");
- if (JNIUtil::isJavaExceptionThrown() || getRevision == 0)
- return NULL;
- }
- jobject jrev = env->CallObjectMethod(copySource, getRevision);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ src->path = apr_pstrdup(p, (const char *) path);
+ SVN_JNI_ERR(JNIUtil::preprocessPath(src->path, pool.pool()),
+ NULL);
+ env->DeleteLocalRef(jpath);
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
- // TODO: Default this to svn_opt_revision_undefined (or HEAD)
- Revision rev(jrev);
- src->revision = (const svn_opt_revision_t *)
- apr_palloc(p, sizeof(*src->revision));
- memcpy((void *) src->revision, rev.revision(),
- sizeof(*src->revision));
- env->DeleteLocalRef(jrev);
- if (JNIUtil::isJavaExceptionThrown())
+ // Extract source revision from the copy source.
+ static jmethodID getRevision = 0;
+ if (getRevision == 0)
+ {
+ getRevision = env->GetMethodID(clazz, "getRevision",
+ "()L"JAVA_PACKAGE"/Revision;");
+ if (JNIUtil::isJavaExceptionThrown() || getRevision == 0)
return NULL;
+ }
+ jobject jrev = env->CallObjectMethod(*it, getRevision);
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
- // Extract pegRevision from the copy source.
- static jmethodID getPegRevision = 0;
- if (getPegRevision == 0)
- {
- getPegRevision = env->GetMethodID(clazz, "getPegRevision",
- "()L"JAVA_PACKAGE"/Revision;");
- if (JNIUtil::isJavaExceptionThrown() || getPegRevision == 0)
- return NULL;
- }
- jobject jPegRev = env->CallObjectMethod(copySource,
- getPegRevision);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ // TODO: Default this to svn_opt_revision_undefined (or HEAD)
+ Revision rev(jrev);
+ src->revision = (const svn_opt_revision_t *)
+ apr_palloc(p, sizeof(*src->revision));
+ memcpy((void *) src->revision, rev.revision(),
+ sizeof(*src->revision));
+ env->DeleteLocalRef(jrev);
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
- Revision pegRev(jPegRev, true);
- src->peg_revision = (const svn_opt_revision_t *)
- apr_palloc(p, sizeof(*src->peg_revision));
- memcpy((void *) src->peg_revision, pegRev.revision(),
- sizeof(*src->peg_revision));
- env->DeleteLocalRef(jPegRev);
- if (JNIUtil::isJavaExceptionThrown())
+ // Extract pegRevision from the copy source.
+ static jmethodID getPegRevision = 0;
+ if (getPegRevision == 0)
+ {
+ getPegRevision = env->GetMethodID(clazz, "getPegRevision",
+ "()L"JAVA_PACKAGE"/Revision;");
+ if (JNIUtil::isJavaExceptionThrown() || getPegRevision == 0)
return NULL;
-
- APR_ARRAY_PUSH(copySources, svn_client_copy_source_t *) = src;
}
- env->DeleteLocalRef(copySource);
+ jobject jPegRev = env->CallObjectMethod(*it, getPegRevision);
if (JNIUtil::isJavaExceptionThrown())
return NULL;
+
+ Revision pegRev(jPegRev, true);
+ src->peg_revision = (const svn_opt_revision_t *)
+ apr_palloc(p, sizeof(*src->peg_revision));
+ memcpy((void *) src->peg_revision, pegRev.revision(),
+ sizeof(*src->peg_revision));
+ env->DeleteLocalRef(jPegRev);
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
+
+ APR_ARRAY_PUSH(copySources, svn_client_copy_source_t *) = src;
}
env->DeleteLocalRef(clazz);
Modified: subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/CopySources.h
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/CopySources.h?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/CopySources.h (original)
+++ subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/CopySources.h Tue Aug 10 18:06:17 2010
@@ -30,7 +30,8 @@
#include <jni.h>
#include <apr_tables.h>
-class SVN::Pool;
+#include "Pool.h"
+#include "Array.h"
/**
* A container for our copy sources, which can convert them into an
@@ -43,7 +44,7 @@ class CopySources
* Create a CopySources object.
* @param jobjectArray An array of CopySource Java objects.
*/
- CopySources(jobjectArray copySources);
+ CopySources(Array ©Sources);
/**
* Destroy a CopySources object
@@ -69,7 +70,7 @@ class CopySources
/**
* A local reference to the Java CopySources peer.
*/
- jobjectArray m_copySources;
+ Array &m_copySources;
};
#endif /* COPY_SOURCES_H */
Modified: subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/CreateJ.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/CreateJ.cpp?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/CreateJ.cpp (original)
+++ subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/CreateJ.cpp Tue Aug 10 18:06:17 2010
@@ -31,6 +31,7 @@
#include "EnumMapper.h"
#include "RevisionRange.h"
#include "CreateJ.h"
+#include "../include/org_apache_subversion_javahl_Revision.h"
jobject
CreateJ::ConflictDescriptor(const svn_wc_conflict_description_t *desc)
@@ -40,405 +41,852 @@ CreateJ::ConflictDescriptor(const svn_wc
if (desc == NULL)
return NULL;
+ // Create a local frame for our references
+ env->PushLocalFrame(LOCAL_FRAME_SIZE);
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
+
// Create an instance of the conflict descriptor.
- static jmethodID ctor = 0;
jclass clazz = env->FindClass(JAVA_PACKAGE "/ConflictDescriptor");
if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ POP_AND_RETURN_NULL;
+ static jmethodID ctor = 0;
if (ctor == 0)
{
- ctor = env->GetMethodID(clazz, "<init>", "(Ljava/lang/String;II"
- "Ljava/lang/String;ZLjava/lang/String;III"
+ ctor = env->GetMethodID(clazz, "<init>", "(Ljava/lang/String;"
+ "L"JAVA_PACKAGE"/ConflictDescriptor$Kind;"
+ "L"JAVA_PACKAGE"/NodeKind;"
+ "Ljava/lang/String;ZLjava/lang/String;"
+ "L"JAVA_PACKAGE"/ConflictDescriptor$Action;"
+ "L"JAVA_PACKAGE"/ConflictDescriptor$Reason;"
+ "L"JAVA_PACKAGE"/ConflictDescriptor$Operation;"
"Ljava/lang/String;Ljava/lang/String;"
"Ljava/lang/String;Ljava/lang/String;"
"L"JAVA_PACKAGE"/ConflictVersion;"
"L"JAVA_PACKAGE"/ConflictVersion;)V");
if (JNIUtil::isJavaExceptionThrown() || ctor == 0)
- return NULL;
+ POP_AND_RETURN_NULL;
}
jstring jpath = JNIUtil::makeJString(desc->path);
if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ POP_AND_RETURN_NULL;
jstring jpropertyName = JNIUtil::makeJString(desc->property_name);
if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ POP_AND_RETURN_NULL;
jstring jmimeType = JNIUtil::makeJString(desc->mime_type);
if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ POP_AND_RETURN_NULL;
jstring jbasePath = JNIUtil::makeJString(desc->base_file);
if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ POP_AND_RETURN_NULL;
jstring jreposPath = JNIUtil::makeJString(desc->their_file);
if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ POP_AND_RETURN_NULL;
jstring juserPath = JNIUtil::makeJString(desc->my_file);
if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ POP_AND_RETURN_NULL;
jstring jmergedPath = JNIUtil::makeJString(desc->merged_file);
if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ POP_AND_RETURN_NULL;
jobject jsrcLeft = CreateJ::ConflictVersion(desc->src_left_version);
if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ POP_AND_RETURN_NULL;
jobject jsrcRight = ConflictVersion(desc->src_right_version);
if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ POP_AND_RETURN_NULL;
+ jobject jnodeKind = EnumMapper::mapNodeKind(desc->node_kind);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+ jobject jconflictKind = EnumMapper::mapConflictKind(desc->kind);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+ jobject jconflictAction = EnumMapper::mapConflictAction(desc->action);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+ jobject jconflictReason = EnumMapper::mapConflictReason(desc->reason);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+ jobject joperation = EnumMapper::mapOperation(desc->operation);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
// Instantiate the conflict descriptor.
- jobject jdesc = env->NewObject(clazz, ctor, jpath,
- EnumMapper::mapConflictKind(desc->kind),
- EnumMapper::mapNodeKind(desc->node_kind),
- jpropertyName,
+ jobject jdesc = env->NewObject(clazz, ctor, jpath, jconflictKind,
+ jnodeKind, jpropertyName,
(jboolean) desc->is_binary, jmimeType,
- EnumMapper::mapConflictAction(desc->action),
- EnumMapper::mapConflictReason(desc->reason),
- EnumMapper::mapOperation(desc->operation),
+ jconflictAction, jconflictReason, joperation,
jbasePath, jreposPath, juserPath,
jmergedPath, jsrcLeft, jsrcRight);
if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ return env->PopLocalFrame(jdesc);
+}
+
+jobject
+CreateJ::ConflictVersion(const svn_wc_conflict_version_t *version)
+{
+ JNIEnv *env = JNIUtil::getEnv();
+
+ if (version == NULL)
return NULL;
- env->DeleteLocalRef(clazz);
+ // Create a local frame for our references
+ env->PushLocalFrame(LOCAL_FRAME_SIZE);
if (JNIUtil::isJavaExceptionThrown())
return NULL;
- env->DeleteLocalRef(jpath);
+ // Create an instance of the conflict version.
+ jclass clazz = env->FindClass(JAVA_PACKAGE "/ConflictVersion");
if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- env->DeleteLocalRef(jpropertyName);
+ POP_AND_RETURN_NULL;
+
+ static jmethodID ctor = 0;
+ if (ctor == 0)
+ {
+ ctor = env->GetMethodID(clazz, "<init>", "(Ljava/lang/String;J"
+ "Ljava/lang/String;"
+ "L"JAVA_PACKAGE"/NodeKind;)V");
+ if (JNIUtil::isJavaExceptionThrown() || ctor == 0)
+ POP_AND_RETURN_NULL;
+ }
+
+ jstring jreposURL = JNIUtil::makeJString(version->repos_url);
if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- env->DeleteLocalRef(jmimeType);
+ POP_AND_RETURN_NULL;
+ jstring jpathInRepos = JNIUtil::makeJString(version->path_in_repos);
if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- env->DeleteLocalRef(jbasePath);
+ POP_AND_RETURN_NULL;
+ jobject jnodeKind = EnumMapper::mapNodeKind(version->node_kind);
if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- env->DeleteLocalRef(jreposPath);
+ POP_AND_RETURN_NULL;
+
+ jobject jversion = env->NewObject(clazz, ctor, jreposURL,
+ (jlong)version->peg_rev, jpathInRepos,
+ jnodeKind);
if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ return env->PopLocalFrame(jversion);
+}
+
+jobject
+CreateJ::Info(const svn_wc_entry_t *entry)
+{
+ if (entry == NULL)
return NULL;
- env->DeleteLocalRef(juserPath);
+
+ JNIEnv *env = JNIUtil::getEnv();
+
+ // Create a local frame for our references
+ env->PushLocalFrame(LOCAL_FRAME_SIZE);
if (JNIUtil::isJavaExceptionThrown())
return NULL;
- env->DeleteLocalRef(jmergedPath);
+
+ jclass clazz = env->FindClass(JAVA_PACKAGE"/Info");
if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- env->DeleteLocalRef(jsrcRight);
+ POP_AND_RETURN_NULL;
+
+ static jmethodID mid = 0;
+ if (mid == 0)
+ {
+ mid = env->GetMethodID(clazz, "<init>",
+ "(Ljava/lang/String;Ljava/lang/String;"
+ "Ljava/lang/String;Ljava/lang/String;"
+ "L"JAVA_PACKAGE"/Info2$ScheduleKind;"
+ "L"JAVA_PACKAGE"/NodeKind;"
+ "Ljava/lang/String;JJLjava/util/Date;"
+ "Ljava/util/Date;Ljava/util/Date;"
+ "ZZZZJLjava/lang/String;)V");
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+ }
+
+ jstring jName = JNIUtil::makeJString(entry->name);
if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- env->DeleteLocalRef(jsrcLeft);
+ POP_AND_RETURN_NULL;
+ jstring jUrl = JNIUtil::makeJString(entry->url);
if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ POP_AND_RETURN_NULL;
+ jstring jUuid = JNIUtil::makeJString(entry->uuid);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+ jstring jRepository = JNIUtil::makeJString(entry->repos);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+ jobject jSchedule = EnumMapper::mapScheduleKind(entry->schedule);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+ jobject jNodeKind = EnumMapper::mapNodeKind(entry->kind);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+ jstring jAuthor = JNIUtil::makeJString(entry->cmt_author);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+ jlong jRevision = entry->revision;
+ jlong jLastChangedRevision = entry->cmt_rev;
+ jobject jLastChangedDate = JNIUtil::createDate(entry->cmt_date);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+ jobject jLastDateTextUpdate = JNIUtil::createDate(entry->text_time);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+ jobject jLastDatePropsUpdate = JNIUtil::createDate(entry->prop_time);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+ jboolean jCopied = entry->copied ? JNI_TRUE : JNI_FALSE;
+ jboolean jDeleted = entry->deleted ? JNI_TRUE : JNI_FALSE;
+ jboolean jAbsent = entry->absent ? JNI_TRUE : JNI_FALSE;
+ jboolean jIncomplete = entry->incomplete ? JNI_TRUE : JNI_FALSE;
+ jlong jCopyRev = entry->copyfrom_rev;
+ jstring jCopyUrl = JNIUtil::makeJString(entry->copyfrom_url);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
- return jdesc;
+ jobject jinfo = env->NewObject(clazz, mid, jName, jUrl, jUuid, jRepository,
+ jSchedule, jNodeKind, jAuthor, jRevision,
+ jLastChangedRevision, jLastChangedDate,
+ jLastDateTextUpdate, jLastDatePropsUpdate,
+ jCopied, jDeleted, jAbsent, jIncomplete,
+ jCopyRev, jCopyUrl);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ return env->PopLocalFrame(jinfo);
}
jobject
-CreateJ::ConflictVersion(const svn_wc_conflict_version_t *version)
+CreateJ::Info2(const char *path, const svn_info_t *info)
{
JNIEnv *env = JNIUtil::getEnv();
- if (version == NULL)
+ // Create a local frame for our references
+ env->PushLocalFrame(LOCAL_FRAME_SIZE);
+ if (JNIUtil::isJavaExceptionThrown())
return NULL;
- // Create an instance of the conflict version.
- static jmethodID ctor = 0;
- jclass clazz = env->FindClass(JAVA_PACKAGE "/ConflictVersion");
+ jclass clazz = env->FindClass(JAVA_PACKAGE "/Info2");
if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ POP_AND_RETURN_NULL;
- if (ctor == 0)
+ static jmethodID mid = 0;
+ if (mid == 0)
{
- ctor = env->GetMethodID(clazz, "<init>", "(Ljava/lang/String;J"
- "Ljava/lang/String;I)V");
- if (JNIUtil::isJavaExceptionThrown() || ctor == 0)
- return NULL;
+ mid = env->GetMethodID(clazz, "<init>",
+ "(Ljava/lang/String;Ljava/lang/String;J"
+ "L"JAVA_PACKAGE"/NodeKind;"
+ "Ljava/lang/String;Ljava/lang/String;"
+ "JJLjava/lang/String;"
+ "L"JAVA_PACKAGE"/Lock;Z"
+ "L"JAVA_PACKAGE"/Info2$ScheduleKind;"
+ "Ljava/lang/String;JJJ"
+ "Ljava/lang/String;Ljava/lang/String;"
+ "Ljava/lang/String;Ljava/lang/String;"
+ "Ljava/lang/String;Ljava/lang/String;JJ"
+ "L"JAVA_PACKAGE"/Depth;"
+ "L"JAVA_PACKAGE"/ConflictDescriptor;)V");
+ if (mid == 0 || JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
}
- jstring jreposURL = JNIUtil::makeJString(version->repos_url);
+ jstring jpath = JNIUtil::makeJString(path);
if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- jstring jpathInRepos = JNIUtil::makeJString(version->path_in_repos);
+ POP_AND_RETURN_NULL;
+
+ jstring jurl = JNIUtil::makeJString(info->URL);
if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ POP_AND_RETURN_NULL;
- jobject jversion = env->NewObject(clazz, ctor, jreposURL,
- (jlong)version->peg_rev, jpathInRepos,
- EnumMapper::mapNodeKind(version->node_kind));
+ jstring jreposRootUrl = JNIUtil::makeJString(info->repos_root_URL);
if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ POP_AND_RETURN_NULL;
- env->DeleteLocalRef(clazz);
+ jstring jreportUUID = JNIUtil::makeJString(info->repos_UUID);
if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ POP_AND_RETURN_NULL;
- env->DeleteLocalRef(jreposURL);
+ jstring jlastChangedAuthor =
+ JNIUtil::makeJString(info->last_changed_author);
if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- env->DeleteLocalRef(jpathInRepos);
+ POP_AND_RETURN_NULL;
+
+ jobject jlock = CreateJ::Lock(info->lock);
if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ POP_AND_RETURN_NULL;
+
+ jstring jcopyFromUrl = JNIUtil::makeJString(info->copyfrom_url);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jstring jchecksum = JNIUtil::makeJString(info->checksum);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jstring jconflictOld = JNIUtil::makeJString(info->conflict_old);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jstring jconflictNew = JNIUtil::makeJString(info->conflict_new);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
- return jversion;
+ jstring jconflictWrk = JNIUtil::makeJString(info->conflict_wrk);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jstring jprejfile = JNIUtil::makeJString(info->prejfile);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jstring jchangelist = JNIUtil::makeJString(info->changelist);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jobject jdesc = CreateJ::ConflictDescriptor(info->tree_conflict);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jobject jnodeKind = EnumMapper::mapNodeKind(info->kind);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jobject jscheduleKind = EnumMapper::mapScheduleKind(info->schedule);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jlong jworkingSize = info->working_size == SVN_INFO_SIZE_UNKNOWN
+ ? -1 : (jlong) info->working_size;
+ jlong jreposSize = info->size == SVN_INFO_SIZE_UNKNOWN
+ ? -1 : (jlong) info->size;
+
+ jobject jinfo2 = env->NewObject(clazz, mid, jpath, jurl, (jlong) info->rev,
+ jnodeKind, jreposRootUrl, jreportUUID,
+ (jlong) info->last_changed_rev,
+ (jlong) info->last_changed_date,
+ jlastChangedAuthor, jlock,
+ info->has_wc_info ? JNI_TRUE : JNI_FALSE,
+ jscheduleKind, jcopyFromUrl,
+ (jlong) info->copyfrom_rev,
+ (jlong) info->text_time,
+ (jlong) info->prop_time, jchecksum,
+ jconflictOld, jconflictNew, jconflictWrk,
+ jprejfile, jchangelist,
+ jworkingSize, jreposSize,
+ EnumMapper::mapDepth(info->depth), jdesc);
+
+ return env->PopLocalFrame(jinfo2);
}
jobject
-CreateJ::Info(const svn_wc_entry_t *entry)
+CreateJ::Lock(const svn_lock_t *lock)
{
- if (entry == NULL)
- return NULL;
+ if (lock == NULL)
+ return NULL;
- JNIEnv *env = JNIUtil::getEnv();
+ JNIEnv *env = JNIUtil::getEnv();
- jclass clazz = env->FindClass(JAVA_PACKAGE"/Info");
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ // Create a local frame for our references
+ env->PushLocalFrame(LOCAL_FRAME_SIZE);
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
+
+ jclass clazz = env->FindClass(JAVA_PACKAGE"/Lock");
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
- static jmethodID mid = 0;
- if (mid == 0)
+ static jmethodID mid = 0;
+ if (mid == 0)
{
- mid = env->GetMethodID(clazz, "<init>",
- "(Ljava/lang/String;Ljava/lang/String;"
- "Ljava/lang/String;Ljava/lang/String;"
- "IILjava/lang/String;JJLjava/util/Date;"
- "Ljava/util/Date;Ljava/util/Date;"
- "ZZZZJLjava/lang/String;)V");
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ mid = env->GetMethodID(clazz, "<init>",
+ "(Ljava/lang/String;Ljava/lang/String;"
+ "Ljava/lang/String;"
+ "Ljava/lang/String;JJ)V");
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
}
- jstring jName = JNIUtil::makeJString(entry->name);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- jstring jUrl = JNIUtil::makeJString(entry->url);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- jstring jUuid = JNIUtil::makeJString(entry->uuid);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- jstring jRepository = JNIUtil::makeJString(entry->repos);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- jint jSchedule = EnumMapper::mapScheduleKind(entry->schedule);
- jint jNodeKind = EnumMapper::mapNodeKind(entry->kind);
- jstring jAuthor = JNIUtil::makeJString(entry->cmt_author);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- jlong jRevision = entry->revision;
- jlong jLastChangedRevision = entry->cmt_rev;
- jobject jLastChangedDate = JNIUtil::createDate(entry->cmt_date);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- jobject jLastDateTextUpdate = JNIUtil::createDate(entry->text_time);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- jobject jLastDatePropsUpdate = JNIUtil::createDate(entry->prop_time);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- jboolean jCopied = entry->copied ? JNI_TRUE : JNI_FALSE;
- jboolean jDeleted = entry->deleted ? JNI_TRUE : JNI_FALSE;
- jboolean jAbsent = entry->absent ? JNI_TRUE : JNI_FALSE;
- jboolean jIncomplete = entry->incomplete ? JNI_TRUE : JNI_FALSE;
- jlong jCopyRev = entry->copyfrom_rev;
- jstring jCopyUrl = JNIUtil::makeJString(entry->copyfrom_url);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ jstring jOwner = JNIUtil::makeJString(lock->owner);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+ jstring jPath = JNIUtil::makeJString(lock->path);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+ jstring jToken = JNIUtil::makeJString(lock->token);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+ jstring jComment = JNIUtil::makeJString(lock->comment);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
- jobject jinfo = env->NewObject(clazz, mid, jName, jUrl, jUuid, jRepository,
- jSchedule, jNodeKind, jAuthor, jRevision,
- jLastChangedRevision, jLastChangedDate,
- jLastDateTextUpdate, jLastDatePropsUpdate,
- jCopied, jDeleted, jAbsent, jIncomplete,
- jCopyRev, jCopyUrl);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ jlong jCreationDate = lock->creation_date;
+ jlong jExpirationDate = lock->expiration_date;
+ jobject jlock = env->NewObject(clazz, mid, jOwner, jPath, jToken, jComment,
+ jCreationDate, jExpirationDate);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
- env->DeleteLocalRef(clazz);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ return env->PopLocalFrame(jlock);
+}
- env->DeleteLocalRef(jName);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- env->DeleteLocalRef(jUrl);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- env->DeleteLocalRef(jUuid);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- env->DeleteLocalRef(jRepository);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- env->DeleteLocalRef(jAuthor);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- env->DeleteLocalRef(jLastChangedDate);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- env->DeleteLocalRef(jLastDateTextUpdate);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- env->DeleteLocalRef(jLastDatePropsUpdate);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- env->DeleteLocalRef(jCopyUrl);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+jobject
+CreateJ::Status(const char *local_abspath, const svn_wc_status2_t *status)
+{
+ JNIEnv *env = JNIUtil::getEnv();
- return jinfo;
-}
+ // Create a local frame for our references
+ env->PushLocalFrame(LOCAL_FRAME_SIZE);
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
+
+ jclass clazz = env->FindClass(JAVA_PACKAGE"/Status");
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ static jmethodID mid = 0;
+ if (mid == 0)
+ {
+ mid = env->GetMethodID(clazz, "<init>",
+ "(Ljava/lang/String;Ljava/lang/String;"
+ "L"JAVA_PACKAGE"/NodeKind;"
+ "JJJLjava/lang/String;"
+ "L"JAVA_PACKAGE"/Status$Kind;"
+ "L"JAVA_PACKAGE"/Status$Kind;"
+ "L"JAVA_PACKAGE"/Status$Kind;"
+ "L"JAVA_PACKAGE"/Status$Kind;"
+ "ZZZL"JAVA_PACKAGE"/ConflictDescriptor;"
+ "Ljava/lang/String;Ljava/lang/String;"
+ "Ljava/lang/String;Ljava/lang/String;"
+ "JZZLjava/lang/String;Ljava/lang/String;"
+ "Ljava/lang/String;"
+ "JL"JAVA_PACKAGE"/Lock;"
+ "JJL"JAVA_PACKAGE"/NodeKind;"
+ "Ljava/lang/String;Ljava/lang/String;)V");
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+ }
+ jstring jPath = JNIUtil::makeJString(local_abspath);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+ jstring jUrl = NULL;
+ jobject jNodeKind = NULL;
+ jlong jRevision = org_apache_subversion_javahl_Revision_SVN_INVALID_REVNUM;
+ jlong jLastChangedRevision =
+ org_apache_subversion_javahl_Revision_SVN_INVALID_REVNUM;
+ jlong jLastChangedDate = 0;
+ jstring jLastCommitAuthor = NULL;
+ jobject jTextType = NULL;
+ jobject jPropType = NULL;
+ jobject jRepositoryTextType = NULL;
+ jobject jRepositoryPropType = NULL;
+ jboolean jIsLocked = JNI_FALSE;
+ jboolean jIsCopied = JNI_FALSE;
+ jboolean jIsSwitched = JNI_FALSE;
+ jboolean jIsFileExternal = JNI_FALSE;
+ jboolean jIsTreeConflicted = JNI_FALSE;
+ jobject jConflictDescription = NULL;
+ jstring jConflictOld = NULL;
+ jstring jConflictNew = NULL;
+ jstring jConflictWorking = NULL;
+ jstring jURLCopiedFrom = NULL;
+ jlong jRevisionCopiedFrom =
+ org_apache_subversion_javahl_Revision_SVN_INVALID_REVNUM;
+ jstring jLockToken = NULL;
+ jstring jLockComment = NULL;
+ jstring jLockOwner = NULL;
+ jlong jLockCreationDate = 0;
+ jobject jLock = NULL;
+ jlong jOODLastCmtRevision =
+ org_apache_subversion_javahl_Revision_SVN_INVALID_REVNUM;
+ jlong jOODLastCmtDate = 0;
+ jobject jOODKind = NULL;
+ jstring jOODLastCmtAuthor = NULL;
+ jstring jChangelist = NULL;
+ if (status != NULL)
+ {
+ jTextType = EnumMapper::mapStatusKind(status->text_status);
+ jPropType = EnumMapper::mapStatusKind(status->prop_status);
+ jRepositoryTextType = EnumMapper::mapStatusKind(
+ status->repos_text_status);
+ jRepositoryPropType = EnumMapper::mapStatusKind(
+ status->repos_prop_status);
+ jIsCopied = (status->copied == 1) ? JNI_TRUE: JNI_FALSE;
+ jIsLocked = (status->locked == 1) ? JNI_TRUE: JNI_FALSE;
+ jIsSwitched = (status->switched == 1) ? JNI_TRUE: JNI_FALSE;
+ jIsFileExternal = (status->file_external == 1) ? JNI_TRUE: JNI_FALSE;
+ jConflictDescription = CreateJ::ConflictDescriptor(status->tree_conflict);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jIsTreeConflicted = (status->tree_conflict != NULL)
+ ? JNI_TRUE: JNI_FALSE;
+ jLock = CreateJ::Lock(status->repos_lock);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jUrl = JNIUtil::makeJString(status->url);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jOODLastCmtRevision = status->ood_last_cmt_rev;
+ jOODLastCmtDate = status->ood_last_cmt_date;
+ jOODKind = EnumMapper::mapNodeKind(status->ood_kind);
+ jOODLastCmtAuthor = JNIUtil::makeJString(status->ood_last_cmt_author);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ const svn_wc_entry_t *entry = status->entry;
+ if (entry != NULL)
+ {
+ jNodeKind = EnumMapper::mapNodeKind(entry->kind);
+ jRevision = entry->revision;
+ jLastChangedRevision = entry->cmt_rev;
+ jLastChangedDate = entry->cmt_date;
+ jLastCommitAuthor = JNIUtil::makeJString(entry->cmt_author);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jConflictNew = JNIUtil::makeJString(entry->conflict_new);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jConflictOld = JNIUtil::makeJString(entry->conflict_old);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jConflictWorking= JNIUtil::makeJString(entry->conflict_wrk);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jURLCopiedFrom = JNIUtil::makeJString(entry->copyfrom_url);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jRevisionCopiedFrom = entry->copyfrom_rev;
+ jLockToken = JNIUtil::makeJString(entry->lock_token);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jLockComment = JNIUtil::makeJString(entry->lock_comment);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jLockOwner = JNIUtil::makeJString(entry->lock_owner);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jLockCreationDate = entry->lock_creation_date;
+
+ jChangelist = JNIUtil::makeJString(entry->changelist);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+ }
+ }
+
+ jobject ret = env->NewObject(clazz, mid, jPath, jUrl, jNodeKind, jRevision,
+ jLastChangedRevision, jLastChangedDate,
+ jLastCommitAuthor, jTextType, jPropType,
+ jRepositoryTextType, jRepositoryPropType,
+ jIsLocked, jIsCopied, jIsTreeConflicted,
+ jConflictDescription, jConflictOld, jConflictNew,
+ jConflictWorking, jURLCopiedFrom,
+ jRevisionCopiedFrom, jIsSwitched, jIsFileExternal,
+ jLockToken, jLockOwner,
+ jLockComment, jLockCreationDate, jLock,
+ jOODLastCmtRevision, jOODLastCmtDate,
+ jOODKind, jOODLastCmtAuthor, jChangelist);
+
+ return env->PopLocalFrame(ret);
+}
jobject
-CreateJ::Lock(const svn_lock_t *lock)
+CreateJ::NotifyInformation(const svn_wc_notify_t *wcNotify)
{
- if (lock == NULL)
- return NULL;
- JNIEnv *env = JNIUtil::getEnv();
+ JNIEnv *env = JNIUtil::getEnv();
- jclass clazz = env->FindClass(JAVA_PACKAGE"/Lock");
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ // Create a local frame for our references
+ env->PushLocalFrame(LOCAL_FRAME_SIZE);
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
- static jmethodID mid = 0;
- if (mid == 0)
+ static jmethodID midCT = 0;
+ jclass clazz = env->FindClass(JAVA_PACKAGE"/NotifyInformation");
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ if (midCT == 0)
{
- mid = env->GetMethodID(clazz, "<init>",
- "(Ljava/lang/String;Ljava/lang/String;"
+ midCT = env->GetMethodID(clazz, "<init>",
+ "(Ljava/lang/String;"
+ "L"JAVA_PACKAGE"/NotifyInformation$Action;"
+ "L"JAVA_PACKAGE"/NodeKind;Ljava/lang/String;"
+ "L"JAVA_PACKAGE"/Lock;"
"Ljava/lang/String;"
- "Ljava/lang/String;JJ)V");
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ "L"JAVA_PACKAGE"/NotifyInformation$Status;"
+ "L"JAVA_PACKAGE"/NotifyInformation$Status;"
+ "L"JAVA_PACKAGE"/NotifyInformation$LockStatus;"
+ "JLjava/lang/String;"
+ "L"JAVA_PACKAGE"/RevisionRange;"
+ "Ljava/lang/String;)V");
+ if (JNIUtil::isJavaExceptionThrown() || midCT == 0)
+ POP_AND_RETURN_NULL;
}
- jstring jOwner = JNIUtil::makeJString(lock->owner);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- jstring jPath = JNIUtil::makeJString(lock->path);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- jstring jToken = JNIUtil::makeJString(lock->token);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- jstring jComment = JNIUtil::makeJString(lock->comment);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ // convert the parameter to their Java relatives
+ jstring jPath = JNIUtil::makeJString(wcNotify->path);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
- jlong jCreationDate = lock->creation_date;
- jlong jExpirationDate = lock->expiration_date;
- jobject jlock = env->NewObject(clazz, mid, jOwner, jPath, jToken, jComment,
- jCreationDate, jExpirationDate);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ jobject jAction = EnumMapper::mapNotifyAction(wcNotify->action);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
- env->DeleteLocalRef(clazz);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ jobject jKind = EnumMapper::mapNodeKind(wcNotify->kind);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
- env->DeleteLocalRef(jOwner);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- env->DeleteLocalRef(jPath);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- env->DeleteLocalRef(jToken);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- env->DeleteLocalRef(jComment);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ jstring jMimeType = JNIUtil::makeJString(wcNotify->mime_type);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jobject jLock = CreateJ::Lock(wcNotify->lock);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jstring jErr = JNIUtil::makeSVNErrorMessage(wcNotify->err);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jobject jContentState = EnumMapper::mapNotifyState(wcNotify->content_state);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jobject jPropState = EnumMapper::mapNotifyState(wcNotify->prop_state);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jobject jLockState = EnumMapper::mapNotifyLockState(wcNotify->lock_state);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jstring jChangelistName = JNIUtil::makeJString(wcNotify->changelist_name);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jobject jMergeRange = NULL;
+ if (wcNotify->merge_range)
+ {
+ jMergeRange = RevisionRange::makeJRevisionRange(wcNotify->merge_range);
+ if (jMergeRange == NULL)
+ POP_AND_RETURN_NULL;
+ }
+
+ jstring jpathPrefix = JNIUtil::makeJString(wcNotify->path_prefix);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ // call the Java method
+ jobject jInfo = env->NewObject(clazz, midCT, jPath, jAction,
+ jKind, jMimeType, jLock, jErr,
+ jContentState, jPropState, jLockState,
+ (jlong) wcNotify->revision, jChangelistName,
+ jMergeRange, jpathPrefix);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
- return jlock;
+ return env->PopLocalFrame(jInfo);
}
jobject
-CreateJ::Property(jobject jthis, const char *path, const char *name,
- svn_string_t *value)
+CreateJ::RevisionRangeList(apr_array_header_t *ranges)
{
- JNIEnv *env = JNIUtil::getEnv();
- jclass clazz = env->FindClass(JAVA_PACKAGE"/PropertyData");
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ JNIEnv *env = JNIUtil::getEnv();
- static jmethodID mid = 0;
- if (mid == 0)
+ // Create a local frame for our references
+ env->PushLocalFrame(LOCAL_FRAME_SIZE);
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
+
+ jclass clazz = env->FindClass("java/util/ArrayList");
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ static jmethodID init_mid = 0;
+ if (init_mid == 0)
{
- mid = env->GetMethodID(clazz, "<init>",
- "(L"JAVA_PACKAGE"/SVNClient;Ljava/lang/String;"
- "Ljava/lang/String;Ljava/lang/String;[B)V");
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ init_mid = env->GetMethodID(clazz, "<init>", "()V");
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
}
- jstring jPath = JNIUtil::makeJString(path);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- jstring jName = JNIUtil::makeJString(name);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- jstring jValue = JNIUtil::makeJString(value->data);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- jbyteArray jData = JNIUtil::makeJByteArray((const signed char *)value->data,
- value->len);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ static jmethodID add_mid = 0;
+ if (add_mid == 0)
+ {
+ add_mid = env->GetMethodID(clazz, "add", "(Ljava/lang/Object;)Z");
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+ }
- jobject jprop = env->NewObject(clazz, mid, jthis, jPath, jName, jValue,
- jData);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ jobject jranges = env->NewObject(clazz, init_mid);
- env->DeleteLocalRef(clazz);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- env->DeleteLocalRef(jPath);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- env->DeleteLocalRef(jName);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- env->DeleteLocalRef(jValue);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
- env->DeleteLocalRef(jData);
- if (JNIUtil::isJavaExceptionThrown())
+ for (int i = 0; i < ranges->nelts; ++i)
+ {
+ // Convert svn_merge_range_t *'s to Java RevisionRange objects.
+ svn_merge_range_t *range =
+ APR_ARRAY_IDX(ranges, i, svn_merge_range_t *);
+
+ jobject jrange = RevisionRange::makeJRevisionRange(range);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ env->CallObjectMethod(jranges, add_mid, jrange);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ env->DeleteLocalRef(jrange);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+ }
+
+ return env->PopLocalFrame(jranges);
+}
+
+jobject
+CreateJ::StringSet(apr_array_header_t *strings)
+{
+ JNIEnv *env = JNIUtil::getEnv();
+ std::vector<jobject> jstrs;
+
+ for (int i = 0; i < strings->nelts; ++i)
+ {
+ const char *str = APR_ARRAY_IDX(strings, i, const char *);
+ jstring jstr = JNIUtil::makeJString(str);
+ if (JNIUtil::isJavaExceptionThrown())
return NULL;
- return jprop;
+ jstrs.push_back(jstr);
+ }
+
+ return CreateJ::Set(jstrs);
}
+jobject CreateJ::PropertyMap(apr_hash_t *prop_hash, apr_pool_t *pool)
+{
+ JNIEnv *env = JNIUtil::getEnv();
+
+ // Create a local frame for our references
+ env->PushLocalFrame(LOCAL_FRAME_SIZE);
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
+
+ jclass clazz = env->FindClass("java/util/HashMap");
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ static jmethodID init_mid = 0;
+ if (init_mid == 0)
+ {
+ init_mid = env->GetMethodID(clazz, "<init>", "()V");
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+ }
+
+ static jmethodID put_mid = 0;
+ if (put_mid == 0)
+ {
+ put_mid = env->GetMethodID(clazz, "put",
+ "(Ljava/lang/Object;Ljava/lang/Object;)"
+ "Ljava/lang/Object;");
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+ }
+
+ jobject map = env->NewObject(clazz, init_mid);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ apr_hash_index_t *hi;
+ int i = 0;
+ for (hi = apr_hash_first(pool, prop_hash); hi; hi = apr_hash_next(hi), ++i)
+ {
+ const char *key;
+ svn_string_t *val;
+
+ apr_hash_this(hi, (const void **)&key, NULL, (void **)&val);
-jobjectArray
-CreateJ::RevisionRangeArray(apr_array_header_t *ranges)
+ jstring jpropName = JNIUtil::makeJString(key);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jbyteArray jpropVal = JNIUtil::makeJByteArray(
+ (const signed char *)val->data, val->len);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ env->CallObjectMethod(map, put_mid, jpropName, jpropVal);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ env->DeleteLocalRef(jpropName);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ env->DeleteLocalRef(jpropVal);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+ }
+
+ return env->PopLocalFrame(map);
+}
+
+jobject CreateJ::Set(std::vector<jobject> &objects)
{
- JNIEnv *env = JNIUtil::getEnv();
+ JNIEnv *env = JNIUtil::getEnv();
- jclass clazz = env->FindClass(JAVA_PACKAGE "/RevisionRange");
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ // Create a local frame for our references
+ env->PushLocalFrame(LOCAL_FRAME_SIZE);
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
+
+ jclass clazz = env->FindClass("java/util/HashSet");
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
- jobjectArray jranges = env->NewObjectArray(ranges->nelts, clazz, NULL);
+ static jmethodID init_mid = 0;
+ if (init_mid == 0)
+ {
+ init_mid = env->GetMethodID(clazz, "<init>", "()V");
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+ }
- for (int i = 0; i < ranges->nelts; ++i)
+ static jmethodID add_mid = 0;
+ if (add_mid == 0)
{
- // Convert svn_merge_range_t *'s to Java RevisionRange objects.
- svn_merge_range_t *range =
- APR_ARRAY_IDX(ranges, i, svn_merge_range_t *);
- jobject jrange = RevisionRange::makeJRevisionRange(range);
- if (jrange == NULL)
- return NULL;
+ add_mid = env->GetMethodID(clazz, "add", "(Ljava/lang/Object;)Z");
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+ }
- env->SetObjectArrayElement(jranges, i, jrange);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ jobject set = env->NewObject(clazz, init_mid);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
- env->DeleteLocalRef(jrange);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ std::vector<jobject>::const_iterator it;
+ for (it = objects.begin(); it < objects.end(); ++it)
+ {
+ jobject jthing = *it;
+
+ env->CallObjectMethod(set, add_mid, jthing);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ env->DeleteLocalRef(jthing);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
}
- return jranges;
+ return env->PopLocalFrame(set);
}
Modified: subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/CreateJ.h
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/CreateJ.h?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/CreateJ.h (original)
+++ subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/native/CreateJ.h Tue Aug 10 18:06:17 2010
@@ -29,6 +29,9 @@
#include <jni.h>
#include "svn_wc.h"
+#include "svn_client.h"
+
+#include <vector>
/**
* This class passes centralizes the creating of Java objects from
@@ -45,18 +48,37 @@ class CreateJ
Info(const svn_wc_entry_t *entry);
static jobject
+ Info2(const char *path, const svn_info_t *info);
+
+ static jobject
Lock(const svn_lock_t *lock);
static jobject
- Property(jobject jthis, const char *path, const char *name,
- svn_string_t *value);
+ Status(const char *local_abspath, const svn_wc_status2_t *status);
+
+ static jobject
+ NotifyInformation(const svn_wc_notify_t *notify);
+
+ static jobject
+ RevisionRangeList(apr_array_header_t *ranges);
- static jobjectArray
- RevisionRangeArray(apr_array_header_t *ranges);
+ static jobject
+ StringSet(apr_array_header_t *strings);
+
+ static jobject
+ PropertyMap(apr_hash_t *prop_hash, apr_pool_t *pool);
+
+ /* This creates a set of Objects. It derefs the members of the vector
+ * after putting them in the set, so they caller doesn't need to. */
+ static jobject
+ Set(std::vector<jobject> &objects);
protected:
static jobject
ConflictVersion(const svn_wc_conflict_version_t *version);
+
+ static jobject
+ Collection(std::vector<jobject> &object, const char *className);
};
#endif // CREATEJ_H