You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by br...@apache.org on 2013/07/03 02:48:23 UTC
svn commit: r1499168 - in
/subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl: ./
native/ src/org/apache/subversion/javahl/
src/org/apache/subversion/javahl/callback/
src/org/apache/subversion/javahl/remote/
Author: brane
Date: Wed Jul 3 00:48:22 2013
New Revision: 1499168
URL: http://svn.apache.org/r1499168
Log:
On the javahl-1.7-extensions branch: Sync JavaHL with trunk up to r1499159.
Added:
subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/RemoteStatus.java
- copied unchanged from r1499159, subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/RemoteStatus.java
subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/StateReporter.java
- copied, changed from r1499159, subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/StateReporter.java
Removed:
subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/UpdateReporter.java
Modified:
subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/ (props changed)
subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/CreateJ.cpp
subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/CreateJ.h
subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/JNIUtil.cpp
subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/JNIUtil.h
subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/RemoteSession.cpp
subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/RemoteSession.h
subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteSession.cpp
subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNEditor.java
subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRemote.java
subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNReporter.java
subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/CommitEditor.java
subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/RemoteSession.java
Propchange: subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/
------------------------------------------------------------------------------
Merged /subversion/trunk/subversion/bindings/javahl:r1497786-1499159
Modified: subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/CreateJ.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/CreateJ.cpp?rev=1499168&r1=1499167&r2=1499168&view=diff
==============================================================================
--- subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/CreateJ.cpp (original)
+++ subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/CreateJ.cpp Wed Jul 3 00:48:22 2013
@@ -1085,7 +1085,7 @@ CreateJ::RevisionRangeList(apr_array_hea
}
jobject
-CreateJ::StringSet(apr_array_header_t *strings)
+CreateJ::StringSet(const apr_array_header_t *strings)
{
std::vector<jobject> jstrs;
Modified: subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/CreateJ.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/CreateJ.h?rev=1499168&r1=1499167&r2=1499168&view=diff
==============================================================================
--- subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/CreateJ.h (original)
+++ subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/CreateJ.h Wed Jul 3 00:48:22 2013
@@ -84,7 +84,7 @@ class CreateJ
RevisionRangeList(apr_array_header_t *ranges);
static jobject
- StringSet(apr_array_header_t *strings);
+ StringSet(const apr_array_header_t *strings);
static jobject
PropertyMap(apr_hash_t *prop_hash);
Modified: subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/JNIUtil.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/JNIUtil.cpp?rev=1499168&r1=1499167&r2=1499168&view=diff
==============================================================================
--- subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/JNIUtil.cpp (original)
+++ subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/JNIUtil.cpp Wed Jul 3 00:48:22 2013
@@ -705,11 +705,11 @@ bool JNIUtil::isJavaExceptionThrown()
return false;
}
-const char *
-JNIUtil::thrownExceptionToCString(SVN::Pool &in_pool)
+namespace {
+const char* exception_to_cstring(apr_pool_t* pool)
{
const char *msg;
- JNIEnv *env = getEnv();
+ JNIEnv *env = JNIUtil::getEnv();
if (env->ExceptionCheck())
{
jthrowable t = env->ExceptionOccurred();
@@ -718,12 +718,12 @@ JNIUtil::thrownExceptionToCString(SVN::P
{
jclass clazz = env->FindClass("java/lang/Throwable");
getMessage = env->GetMethodID(clazz, "getMessage",
- "(V)Ljava/lang/String;");
+ "()Ljava/lang/String;");
env->DeleteLocalRef(clazz);
}
jstring jmsg = (jstring) env->CallObjectMethod(t, getMessage);
JNIStringHolder tmp(jmsg);
- msg = tmp.pstrdup(in_pool.getPool());
+ msg = tmp.pstrdup(pool);
// ### Conditionally add t.printStackTrace() to msg?
}
else
@@ -732,6 +732,24 @@ JNIUtil::thrownExceptionToCString(SVN::P
}
return msg;
}
+} // anonymous namespace
+
+const char *
+JNIUtil::thrownExceptionToCString(SVN::Pool &in_pool)
+{
+ return exception_to_cstring(in_pool.getPool());
+}
+
+svn_error_t*
+JNIUtil::checkJavaException(apr_status_t errorcode)
+{
+ if (!getEnv()->ExceptionCheck())
+ return SVN_NO_ERROR;
+ svn_error_t* err = svn_error_create(errorcode, NULL, NULL);
+ err->message = apr_psprintf(err->pool, _("Java exception: %s"),
+ exception_to_cstring(err->pool));
+ return err;
+}
/**
* Create a Java string from a native UTF-8 string.
Modified: subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/JNIUtil.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/JNIUtil.h?rev=1499168&r1=1499167&r2=1499168&view=diff
==============================================================================
--- subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/JNIUtil.h (original)
+++ subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/JNIUtil.h Wed Jul 3 00:48:22 2013
@@ -41,6 +41,8 @@ class SVNBase;
struct svn_string_t;
struct svn_error_t;
+#include "svn_error.h"
+
#define JAVA_PACKAGE "org/apache/subversion/javahl"
/**
@@ -108,6 +110,12 @@ class JNIUtil
static const char *thrownExceptionToCString(SVN::Pool &in_pool);
/**
+ * Check if a Java exception was thrown and convert it to a
+ * Subversion error, using @a errorcode as the generic error code.
+ */
+ static svn_error_t* checkJavaException(apr_status_t errorcode);
+
+ /**
* Throw a Java exception corresponding to err, and run
* svn_error_clear() on err.
*/
@@ -300,4 +308,10 @@ class JNIUtil
} \
} while (0)
+#define SVN_JNI_CATCH(statement, errorcode) \
+ do { \
+ do { statement; } while(0); \
+ SVN_ERR(JNIUtil::checkJavaException((errorcode))); \
+ } while(0)
+
#endif // JNIUTIL_H
Modified: subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/RemoteSession.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/RemoteSession.cpp?rev=1499168&r1=1499167&r2=1499168&view=diff
==============================================================================
--- subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/RemoteSession.cpp (original)
+++ subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/RemoteSession.cpp Wed Jul 3 00:48:22 2013
@@ -640,13 +640,11 @@ RemoteSession::getDirectory(jlong jrevis
// TODO: update
// TODO: switch
-jobject
-RemoteSession::status(jstring jstatus_target,
+void
+RemoteSession::status(jobject jthis, jstring jstatus_target,
jlong jrevision, jobject jdepth,
- jobject jstatus_editor)
-{
- return NULL;
-}
+ jobject jstatus_editor, jobject jreporter)
+{}
// TODO: diff
Modified: subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/RemoteSession.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/RemoteSession.h?rev=1499168&r1=1499167&r2=1499168&view=diff
==============================================================================
--- subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/RemoteSession.h (original)
+++ subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/RemoteSession.h Wed Jul 3 00:48:22 2013
@@ -82,9 +82,9 @@ class RemoteSession : public SVNBase
// TODO: getMergeinfo
// TODO: update
// TODO: switch
- jobject status(jstring jstatus_target,
- jlong jrevision, jobject jdepth,
- jobject jstatus_editor);
+ void status(jobject jthis, jstring jstatus_target,
+ jlong jrevision, jobject jdepth,
+ jobject jstatus_editor, jobject jreporter);
// TODO: diff
void getLog(jobject jpaths, jlong jstartrev, jlong jendrev, jint jlimit,
jboolean jstrict_node_history, jboolean jdiscover_changed_paths,
Modified: subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteSession.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteSession.cpp?rev=1499168&r1=1499167&r2=1499168&view=diff
==============================================================================
--- subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteSession.cpp (original)
+++ subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteSession.cpp Wed Jul 3 00:48:22 2013
@@ -217,16 +217,17 @@ Java_org_apache_subversion_javahl_remote
// TODO: update
// TODO: switch
-JNIEXPORT jobject JNICALL
-Java_org_apache_subversion_javahl_remote_RemoteSession_status(
- JNIEnv *env, jobject jthis, jstring jstatus_target,
- jlong jrevision, jobject jdepth, jobject jstatus_editor)
+JNIEXPORT void JNICALL
+Java_org_apache_subversion_javahl_remote_RemoteSession_nativeStatus(
+ JNIEnv *env, jobject jthis, jstring jstatus_target, jlong jrevision,
+ jobject jdepth, jobject jstatus_editor, jobject jreporter)
{
- JNIEntry(SVNReposAccess, doStatus);
+ JNIEntry(SVNReposAccess, nativeStatus);
RemoteSession *ras = RemoteSession::getCppObject(jthis);
- CPPADDR_NULL_PTR(ras, NULL);
+ CPPADDR_NULL_PTR(ras,);
- return ras->status(jstatus_target, jrevision, jdepth, jstatus_editor);
+ ras->status(jthis, jstatus_target, jrevision, jdepth,
+ jstatus_editor, jreporter);
}
// TODO: diff
Modified: subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNEditor.java
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNEditor.java?rev=1499168&r1=1499167&r2=1499168&view=diff
==============================================================================
--- subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNEditor.java (original)
+++ subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNEditor.java Wed Jul 3 00:48:22 2013
@@ -273,40 +273,42 @@ public interface ISVNEditor
String destinationRelativePath,
long replacesRevision)
throws ClientException;
- /**
- * Perform a rotation among multiple nodes in the target tree.
- * <p>
- * The <code>elements</code> list specifies the nodes in the tree
- * which are located at a path and expected to be at a specific
- * revision. These nodes are simultaneously moved in a rotation
- * pattern. For example, the node at index 0
- * <code>elements</code> will be moved to the relative path
- * specified at index 1 of <code>elements</code>. The node at
- * index 1 will be moved to the location at index 2. The node at
- * index N-1 will be moved to the relative path specified at index 0.
- * <p>
- * The simplest form of this operation is to swap nodes A and
- * B. One may think to move A to a temporary location T, then move
- * B to A, then move T to B. However, this last move violations
- * the Once Rule by moving T (which had already by edited by the
- * move from A). In order to keep the restrictions against
- * multiple moves of a single node, the rotation operation is
- * needed for certain types of tree edits.
- *
- * @throws ClientException
- */
- void rotate(Iterable<RotatePair> elements) throws ClientException;
- public static final class RotatePair
- {
- public RotatePair(String relativePath, long revision)
- {
- this.relativePath = relativePath;
- this.revision = revision;
- }
- public final String relativePath;
- public final long revision;
- }
+// Not implemented in the native API
+// /**
+// * Perform a rotation among multiple nodes in the target tree.
+// * <p>
+// * The <code>elements</code> list specifies the nodes in the tree
+// * which are located at a path and expected to be at a specific
+// * revision. These nodes are simultaneously moved in a rotation
+// * pattern. For example, the node at index 0
+// * <code>elements</code> will be moved to the relative path
+// * specified at index 1 of <code>elements</code>. The node at
+// * index 1 will be moved to the location at index 2. The node at
+// * index N-1 will be moved to the relative path specified at index 0.
+// * <p>
+// * The simplest form of this operation is to swap nodes A and
+// * B. One may think to move A to a temporary location T, then move
+// * B to A, then move T to B. However, this last move violations
+// * the Once Rule by moving T (which had already by edited by the
+// * move from A). In order to keep the restrictions against
+// * multiple moves of a single node, the rotation operation is
+// * needed for certain types of tree edits.
+// *
+// * @throws ClientException
+// */
+// void rotate(Iterable<RotatePair> elements) throws ClientException;
+//
+// public static final class RotatePair
+// {
+// public RotatePair(String relativePath, long revision)
+// {
+// this.relativePath = relativePath;
+// this.revision = revision;
+// }
+// public final String relativePath;
+// public final long revision;
+// }
/**
* Signal that the edit has been completed successfully.
Modified: subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRemote.java
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRemote.java?rev=1499168&r1=1499167&r2=1499168&view=diff
==============================================================================
--- subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRemote.java (original)
+++ subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRemote.java Wed Jul 3 00:48:22 2013
@@ -289,8 +289,8 @@ public interface ISVNRemote
* or the HEAD revision if <code>revision</code> is
* {@link org.apache.subversion.javahl.types.Revision#SVN_INVALID_REVNUM}.
* <p>
- * The client begins by providing a <code>statusEditor</code> to
- * the remote session; this editor must contain knowledge of where
+ * The client begins by providing a <code>receiver</code> to
+ * the remote session; this object must contain knowledge of where
* the change will begin in the working copy.
* <p>
* In return, the client receives an {@link ISVNReporter}
@@ -298,14 +298,12 @@ public interface ISVNRemote
* calls to its methods.
* <p>
* When finished, the client calls {@link ISVNReporter#finishReport}.
- * This results in a complete drive of <code>statusEditor</code>,
- * ending with {@link ISVNEditor#complete()}, to report,
- * essentially, what would be modified in the working copy were
- * the client to perform an update. <code>statusTarget</code> is
- * an optional single path component that restricts the scope of
- * the status report to an entry in the directory represented by
- * the session's URL, or empty if the entire directory is meant to
- * be examined.
+ * This results in <code>receiver</code> being called once for
+ * every path in the working copy that is different from the
+ * repository. <code>statusTarget</code> is an optional single
+ * path component that restricts the scope of the status report to
+ * an entry in the directory represented by the session's URL, or
+ * empty if the entire directory is meant to be examined.
* <p>
* Get status as deeply as <code>depth</code> indicates. If
* <code>depth</code> is
@@ -317,8 +315,8 @@ public interface ISVNRemote
* <p>
* The caller may not perform any operations using this session
* before finishing the report, and may not perform any operations
- * using this session from within the editing operations of
- * <code>statusEditor</code>.
+ * using this session from within the implementation of
+ * <code>receiver</code>.
* <p>
* <b>Note:</b> The reporter provided by this function does
* <em>not</em> supply copy-from information to the editor
@@ -332,7 +330,7 @@ public interface ISVNRemote
*/
ISVNReporter status(String statusTarget,
long revision, Depth depth,
- ISVNEditor statusEditor)
+ RemoteStatus receiver)
throws ClientException;
// TODO: diff
Modified: subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNReporter.java
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNReporter.java?rev=1499168&r1=1499167&r2=1499168&view=diff
==============================================================================
--- subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNReporter.java (original)
+++ subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNReporter.java Wed Jul 3 00:48:22 2013
@@ -134,16 +134,22 @@ public interface ISVNReporter
String lockToken)
throws ClientException;
-
/**
* The report driver calls this when the state report is finished.
* Any directories or files not explicitly "set" are assumed to be
* at the baseline revision originally passed into do_update(). No
* other reporting functions, including {@link abortReport()},
* should be called after calling this function.
+ *
+ * @return The target revision of the resulting editor drive. In
+ * the case of {@link ISVNRemote#status}, this is the
+ * revision against which the status call was performed;
+ * in the case of {@link ISVNRemote#update}, it is the
+ * revision updated to.
+ *
* @throws ClientException
*/
- void finishReport() throws ClientException;
+ long finishReport() throws ClientException;
/**
* If an error occurs during a report, this routine should cause
Modified: subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/CommitEditor.java
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/CommitEditor.java?rev=1499168&r1=1499167&r2=1499168&view=diff
==============================================================================
--- subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/CommitEditor.java (original)
+++ subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/CommitEditor.java Wed Jul 3 00:48:22 2013
@@ -131,10 +131,8 @@ public class CommitEditor extends JNIObj
notimplemented("move");
}
- public void rotate(Iterable<RotatePair> elements) throws ClientException
- {
- notimplemented("rotate");
- }
+// public void rotate(Iterable<RotatePair> elements)
+// throws ClientException;
public void complete() throws ClientException
{
Modified: subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/RemoteSession.java
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/RemoteSession.java?rev=1499168&r1=1499167&r2=1499168&view=diff
==============================================================================
--- subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/RemoteSession.java (original)
+++ subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/RemoteSession.java Wed Jul 3 00:48:22 2013
@@ -57,6 +57,17 @@ public class RemoteSession extends JNIOb
}
editorReference = null;
}
+ if (reporterReference != null)
+ {
+ // Deactivate the open reporter
+ ISVNReporter rp = reporterReference.get();
+ if (rp != null)
+ {
+ rp.dispose();
+ reporterReference.clear();
+ }
+ reporterReference = null;
+ }
nativeDispose();
}
@@ -114,13 +125,10 @@ public class RemoteSession extends JNIOb
boolean keepLocks)
throws ClientException
{
- if (editorReference != null && editorReference.get() != null)
- throw new IllegalStateException("An editor is already active");
-
+ check_inactive(editorReference, reporterReference);
ISVNEditor ed =
CommitEditor.createInstance(this, revisionProperties,
commitCallback, lockTokens, keepLocks);
-
if (editorReference != null)
editorReference.clear();
editorReference = new WeakReference<ISVNEditor>(ed);
@@ -155,10 +163,24 @@ public class RemoteSession extends JNIOb
// TODO: update
// TODO: switch
- public native ISVNReporter status(String statusTarget,
- long revision, Depth depth,
- ISVNEditor statusEditor)
- throws ClientException;
+ public ISVNReporter status(String statusTarget,
+ long revision, Depth depth,
+ RemoteStatus receiver)
+ throws ClientException
+ {
+ check_inactive(editorReference, reporterReference);
+ StateReporter rp = StateReporter.createInstance(this);
+
+ // At this point, the reporter is not active/valid.
+ //StatusEditor editor = new StatusEditor(receiver);
+ //nativeStatus(statusTarget, revision, depth, editor, rp);
+ // Now it should be valid.
+
+ if (reporterReference != null)
+ reporterReference.clear();
+ reporterReference = new WeakReference<ISVNReporter>(rp);
+ return rp;
+ }
// TODO: diff
@@ -219,12 +241,16 @@ public class RemoteSession extends JNIOb
OutputStream contents,
Map<String, byte[]> properties)
throws ClientException;
-
private native long nativeGetDirectory(long revision, String path,
int direntFields,
Map<String, DirEntry> dirents,
Map<String, byte[]> properties)
throws ClientException;
+ private native void nativeStatus(String statusTarget,
+ long revision, Depth depth,
+ ISVNEditor statusEditor,
+ ISVNReporter reporter)
+ throws ClientException;
private native boolean nativeHasCapability(String capability)
throws ClientException;
@@ -235,18 +261,19 @@ public class RemoteSession extends JNIOb
private class RemoteSessionContext extends OperationContext {}
/*
- * A reference to the current open editor. We need this in order
+ * A reference to the current active editor. We need this in order
* to dispose/abort the editor when the session is disposed. And
- * furthermore, there can be only one editor active at any time.
+ * furthermore, there can be only one editor or reporter active at
+ * any time.
*/
private WeakReference<ISVNEditor> editorReference;
/*
- * The commit editor callse this when disposed to clear the
+ * The commit editor calls this when disposed to clear the
* reference. Note that this function will be called during our
* dispose, so make sure they don't step on each others' toes.
*/
- void disposeEditor(CommitEditor editor)
+ void disposeEditor(ISVNEditor editor)
{
if (editorReference == null)
return;
@@ -259,6 +286,31 @@ public class RemoteSession extends JNIOb
}
/*
+ * A reference to the current active reporter. We need this in
+ * order to dispose/abort the report when the session is
+ * disposed. And furthermore, there can be only one reporter or
+ * editor active at any time.
+ */
+ private WeakReference<ISVNReporter> reporterReference;
+
+ /*
+ * The update reporter calls this when disposed to clear the
+ * reference. Note that this function will be called during our
+ * dispose, so make sure they don't step on each others' toes.
+ */
+ void disposeReporter(ISVNReporter reporter)
+ {
+ if (reporterReference == null)
+ return;
+ ISVNReporter rp = reporterReference.get();
+ if (rp == null)
+ return;
+ if (rp != reporter)
+ throw new IllegalStateException("Disposing unknown reporter");
+ reporterReference.clear();
+ }
+
+ /*
* Private helper methods.
*/
private final static void maybe_clear(Map clearable)
@@ -270,4 +322,14 @@ public class RemoteSession extends JNIOb
// ignored
}
}
+
+ private final static
+ void check_inactive(WeakReference<ISVNEditor> editorReference,
+ WeakReference<ISVNReporter> reporterReference)
+ {
+ if (editorReference != null && editorReference.get() != null)
+ throw new IllegalStateException("An editor is already active");
+ if (reporterReference != null && reporterReference.get() != null)
+ throw new IllegalStateException("A reporter is already active");
+ }
}
Copied: subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/StateReporter.java (from r1499159, subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/StateReporter.java)
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/StateReporter.java?p2=subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/StateReporter.java&p1=subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/StateReporter.java&r1=1499159&r2=1499168&rev=1499168&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/StateReporter.java (original)
+++ subversion/branches/javahl-1.7-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/StateReporter.java Wed Jul 3 00:48:22 2013
@@ -36,32 +36,43 @@ import org.apache.subversion.javahl.Clie
*/
public class StateReporter extends JNIObject implements ISVNReporter
{
- public void dispose()
+ public void dispose() {/* TODO: */}
+
+ public void setPath(String path,
+ long revision,
+ Depth depth,
+ boolean startEmpty,
+ String lockToken)
+ throws ClientException
{
- session.disposeReporter(this);
- nativeDispose();
+ throw new RuntimeException("Not implemented: setPath");
}
- public native void setPath(String path,
- long revision,
- Depth depth,
- boolean startEmpty,
- String lockToken)
- throws ClientException;
-
- public native void deletePath(String path) throws ClientException;
+ public void deletePath(String path) throws ClientException
+ {
+ throw new RuntimeException("Not implemented: deletePath");
+ }
- public native void linkPath(String url,
- String path,
- long revision,
- Depth depth,
- boolean startEmpty,
- String lockToken)
- throws ClientException;
+ public void linkPath(String url,
+ String path,
+ long revision,
+ Depth depth,
+ boolean startEmpty,
+ String lockToken)
+ throws ClientException
+ {
+ throw new RuntimeException("Not implemented: linkPath");
+ }
- public native long finishReport() throws ClientException;
+ public long finishReport() throws ClientException
+ {
+ throw new RuntimeException("Not implemented: finishReport");
+ }
- public native void abortReport() throws ClientException;
+ public void abortReport() throws ClientException
+ {
+ throw new RuntimeException("Not implemented: abortReport");
+ }
/**
* This factory method called from RemoteSession.status and friends.
@@ -70,20 +81,9 @@ public class StateReporter extends JNIOb
StateReporter createInstance(RemoteSession session)
throws ClientException
{
- long cppAddr = nativeCreateInstance();
- return new StateReporter(cppAddr, session);
+ return null;
}
- @Override
- public native void finalize() throws Throwable;
-
- /*
- * Wrapped private native implementation declarations.
- */
- private native void nativeDispose();
- private static final native long nativeCreateInstance()
- throws ClientException;
-
/**
* This constructor is called from the factory method.
*/