Author: hwright
Date: Fri May 6 16:30:19 2011
New Revision: 1100273
URL: http://svn.apache.org/viewvc?rev=1100273&view=rev
Log:
JavaHL: Modify the status callback to return a null status object if no status
exists (just like the C api). Always return the path, though.
[ subversion/bindings/javahl/ ]
* tests/org/apache/subversion/javahl/BasicTests.java
(MyStatusCallback): Update callback interface.
* tests/org/apache/subversion/javahl/SVNTests.java
(MyStatusCallback): Same.
* native/CreateJ.cpp,
native/CreateJ.h
(Status): Remove the local_abspath arg, which was just a duplicate of the
status->local_abspath member. Also, early out by returning NULL if
status is NULL.
* native/StatusCallback.cpp
(doStatus): Pass a path to the Java callback.
* src/org/apache/subversion/javahl/callback/StatusCallback.java
(doStatus): Add path param.
* src/org/tigris/subversion/javahl/SVNClient.java
(Status): Update backward compat callback.
* src/org/tigris/subversion/javahl/Status.java
(Status): Create a new constructor to create an empty status object.
Modified:
subversion/trunk/subversion/bindings/javahl/native/CreateJ.cpp
subversion/trunk/subversion/bindings/javahl/native/CreateJ.h
subversion/trunk/subversion/bindings/javahl/native/StatusCallback.cpp
subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/StatusCallback.java
subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java
subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Status.java
subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java
Modified: subversion/trunk/subversion/bindings/javahl/native/CreateJ.cpp
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/CreateJ.cpp?rev=1100273&r1=1100272&r2=1100273&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/CreateJ.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/CreateJ.cpp Fri May 6
16:30:19 2011
@@ -472,9 +472,13 @@ CreateJ::ChangedPath(const char *path, s
}
jobject
-CreateJ::Status(svn_wc_context_t *wc_ctx, const char *local_abspath,
- const svn_client_status_t *status, apr_pool_t *pool)
+CreateJ::Status(svn_wc_context_t *wc_ctx,
+ const svn_client_status_t *status,
+ apr_pool_t *pool)
{
+ if (status == NULL)
+ return NULL;
+
JNIEnv *env = JNIUtil::getEnv();
// Create a local frame for our references
@@ -506,10 +510,7 @@ CreateJ::Status(svn_wc_context_t *wc_ctx
if (JNIUtil::isJavaExceptionThrown())
POP_AND_RETURN_NULL;
}
- jstring jPath = JNIUtil::makeJString(local_abspath);
- if (JNIUtil::isJavaExceptionThrown())
- POP_AND_RETURN_NULL;
-
+ jstring jPath = NULL;
jstring jUrl = NULL;
jobject jNodeKind = NULL;
jlong jRevision =
@@ -566,6 +567,10 @@ CreateJ::Status(svn_wc_context_t *wc_ctx
jIsSwitched = (status->switched == 1) ? JNI_TRUE: JNI_FALSE;
jIsFileExternal = (status->file_external == 1) ? JNI_TRUE: JNI_FALSE;
+ jPath = JNIUtil::makeJString(status->local_abspath);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
jLock = CreateJ::Lock(status->repos_lock);
if (JNIUtil::isJavaExceptionThrown())
POP_AND_RETURN_NULL;
@@ -630,7 +635,8 @@ CreateJ::Status(svn_wc_context_t *wc_ctx
©from_url,
©from_rev,
&is_copy_target,
- wc_ctx, local_abspath,
+ wc_ctx,
+ status->local_abspath,
pool, pool), NULL);
jURLCopiedFrom = JNIUtil::makeJString(is_copy_target ? copyfrom_url
Modified: subversion/trunk/subversion/bindings/javahl/native/CreateJ.h
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/CreateJ.h?rev=1100273&r1=1100272&r2=1100273&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/CreateJ.h (original)
+++ subversion/trunk/subversion/bindings/javahl/native/CreateJ.h Fri May 6
16:30:19 2011
@@ -58,8 +58,8 @@ class CreateJ
ChangedPath(const char *path, svn_log_changed_path2_t *log_item);
static jobject
- Status(svn_wc_context_t *wc_ctx, const char *local_abspath,
- const svn_client_status_t *status, apr_pool_t *pool);
+ Status(svn_wc_context_t *wc_ctx, const svn_client_status_t *status,
+ apr_pool_t *pool);
static jobject
ClientNotifyInformation(const svn_wc_notify_t *notify);
Modified: subversion/trunk/subversion/bindings/javahl/native/StatusCallback.cpp
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/StatusCallback.cpp?rev=1100273&r1=1100272&r2=1100273&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/StatusCallback.cpp
(original)
+++ subversion/trunk/subversion/bindings/javahl/native/StatusCallback.cpp Fri
May 6 16:30:19 2011
@@ -85,16 +85,21 @@ StatusCallback::doStatus(const char *loc
POP_AND_RETURN(SVN_NO_ERROR);
mid = env->GetMethodID(clazz, "doStatus",
- "(L"JAVA_PACKAGE"/types/Status;)V");
+ "(Ljava/lang/String;"
+ "L"JAVA_PACKAGE"/types/Status;)V");
if (JNIUtil::isJavaExceptionThrown() || mid == 0)
POP_AND_RETURN(SVN_NO_ERROR);
}
- jobject jStatus = CreateJ::Status(wc_ctx, local_abspath, status, pool);
+ jstring jPath = JNIUtil::makeJString(local_abspath);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jobject jStatus = CreateJ::Status(wc_ctx, status, pool);
if (JNIUtil::isJavaExceptionThrown())
POP_AND_RETURN(SVN_NO_ERROR);
- env->CallVoidMethod(m_callback, mid, jStatus);
+ env->CallVoidMethod(m_callback, mid, jPath, jStatus);
// We return here regardless of whether an exception is thrown or not,
// so we do not need to explicitly check for one.
Modified:
subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/StatusCallback.java
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/StatusCallback.java?rev=1100273&r1=1100272&r2=1100273&view=diff
==============================================================================
---
subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/StatusCallback.java
(original)
+++
subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/StatusCallback.java
Fri May 6 16:30:19 2011
@@ -34,7 +34,8 @@ public interface StatusCallback
{
/**
* the method will be called for each status item
- * @param status the status object
+ * @param path the path of the object
+ * @param status the status object, may be null
*/
- public void doStatus(Status status);
+ public void doStatus(String path, Status status);
}
Modified:
subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java?rev=1100273&r1=1100272&r2=1100273&view=diff
==============================================================================
---
subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java
(original)
+++
subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java
Fri May 6 16:30:19 2011
@@ -194,8 +194,14 @@ public class SVNClient implements SVNCli
changelists == null ? null
: Arrays.asList(changelists),
new org.apache.subversion.javahl.callback.StatusCallback () {
- public void doStatus(org.apache.subversion.javahl.types.Status
aStatus)
- { callback.doStatus(new Status(aSVNClient, aStatus)); }
+ public void doStatus(String path,
+ org.apache.subversion.javahl.types.Status
aStatus)
+ {
+ if (aStatus != null)
+ callback.doStatus(new Status(aSVNClient, aStatus));
+ else
+ callback.doStatus(new Status(path));
+ }
});
}
catch (org.apache.subversion.javahl.ClientException ex)
Modified:
subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Status.java
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Status.java?rev=1100273&r1=1100272&r2=1100273&view=diff
==============================================================================
---
subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Status.java
(original)
+++
subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Status.java
Fri May 6 16:30:19 2011
@@ -317,6 +317,19 @@ public class Status implements java.io.S
this.changelist = changelist;
}
+ /** Create an empty status struct */
+ public Status(String path)
+ {
+ this(path, null, NodeKind.fromApache(null),
Revision.SVN_INVALID_REVNUM,
+ Revision.SVN_INVALID_REVNUM, 0, null, fromAStatusKind(null),
+ fromAStatusKind(null), fromAStatusKind(null),
+ fromAStatusKind(null), false, false, false, null,
+ null, null, null, null, Revision.SVN_INVALID_REVNUM,
+ false, false, null, null, null, 0, null,
+ Revision.SVN_INVALID_REVNUM, 0, NodeKind.fromApache(null),
+ null, null);
+ }
+
private void
populateConflicts(org.apache.subversion.javahl.SVNClient aClient,
String path)
Modified:
subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java?rev=1100273&r1=1100272&r2=1100273&view=diff
==============================================================================
---
subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
(original)
+++
subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
Fri May 6 16:30:19 2011
@@ -3465,9 +3465,10 @@ public class BasicTests extends SVNTests
{
private List<Status> statuses = new ArrayList<Status>();
- public void doStatus(Status status)
+ public void doStatus(String path, Status status)
{
- statuses.add(status);
+ if (status != null)
+ statuses.add(status);
}
public Status[] getStatusArray()
Modified:
subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java?rev=1100273&r1=1100272&r2=1100273&view=diff
==============================================================================
---
subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java
(original)
+++
subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java
Fri May 6 16:30:19 2011
@@ -898,9 +898,10 @@ class SVNTests extends TestCase
{
private List<Status> statuses = new ArrayList<Status>();
- public void doStatus(Status status)
+ public void doStatus(String path, Status status)
{
- statuses.add(status);
+ if (status != null)
+ statuses.add(status);
}
public Status[] getStatusArray()