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
                                                      &copyfrom_url,
                                                      &copyfrom_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()


Reply via email to