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/03/09 21:42:29 UTC

svn commit: r921112 - in /subversion/trunk/subversion/bindings/javahl/native: SVNAdmin.cpp SVNAdmin.h StringArray.cpp StringArray.h Targets.cpp Targets.h org_apache_subversion_javahl_SVNAdmin.cpp org_apache_subversion_javahl_SVNClient.cpp

Author: hwright
Date: Tue Mar  9 20:42:28 2010
New Revision: 921112

URL: http://svn.apache.org/viewvc?rev=921112&view=rev
Log:
JavaHL: Remove some duplicate functionality from the Targets JNI class, and
allow it to take a StringArray in the constructor.

[ subversion/bindings/javahl/ ]
* native/SVNAdmin.h,
  native/SVNAdmin.cpp
  (rmtxns, rmlocks): Take StringArray parameters, since that's really what
    is being used.

* native/StringArray.h,
  native/StringArray.cpp
  (vector): Add a function to return a reference to the underlying vector.

* native/Targets.h,
  native/Targets.cpp
  (Targets): Take a StringArray as the constructor argument.
  (array): Update to use the underlying StringArray.
  (setDoesNotContainsPath): Remove.

* native/org_apache_subversion_javahl_SVNAdmin.cpp
  (Java_org_apache_subversion_javahl_SVNAdmin_rmtxns,
   Java_org_apache_subversion_javahl_SVNAdmin_rmlocks):
    Use a StringArray instead of Targets to process the incoming (not-path)
    arguments.

* native/org_apache_subversion_javahl_SVNClient.cpp
  (Java_org_apache_subversion_javahl_SVNClient_remove,
   Java_org_apache_subversion_javahl_SVNClient_add,
   Java_org_apache_subversion_javahl_SVNClient_update,
   Java_org_apache_subversion_javahl_SVNClient_commit,
   Java_org_apache_subversion_javahl_SVNClient_move,
   Java_org_apache_subversion_javahl_SVNClient_mkdir,
   Java_org_apache_subversion_javahl_SVNClient_addToChangelist,
   Java_org_apache_subversion_javahl_SVNClient_remove,
   Java_org_apache_subversion_javahl_SVNClient_lock,
   Java_org_apache_subversion_javahl_SVNClient_unlock):
    Create a StringArray to then create the Targets.

Modified:
    subversion/trunk/subversion/bindings/javahl/native/SVNAdmin.cpp
    subversion/trunk/subversion/bindings/javahl/native/SVNAdmin.h
    subversion/trunk/subversion/bindings/javahl/native/StringArray.cpp
    subversion/trunk/subversion/bindings/javahl/native/StringArray.h
    subversion/trunk/subversion/bindings/javahl/native/Targets.cpp
    subversion/trunk/subversion/bindings/javahl/native/Targets.h
    subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNAdmin.cpp
    subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp

Modified: subversion/trunk/subversion/bindings/javahl/native/SVNAdmin.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/SVNAdmin.cpp?rev=921112&r1=921111&r2=921112&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/SVNAdmin.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/SVNAdmin.cpp Tue Mar  9 20:42:28 2010
@@ -333,7 +333,7 @@ jlong SVNAdmin::recover(const char *path
   return youngest_rev;
 }
 
-void SVNAdmin::rmtxns(const char *path, Targets &transactions)
+void SVNAdmin::rmtxns(const char *path, StringArray &transactions)
 {
   SVN::Pool requestPool;
   SVN_JNI_NULL_PTR_EX(path, "path", );
@@ -541,7 +541,7 @@ jobject SVNAdmin::lslocks(const char *pa
   return CreateJ::Set(jlocks);
 }
 
-void SVNAdmin::rmlocks(const char *path, Targets &locks)
+void SVNAdmin::rmlocks(const char *path, StringArray &locks)
 {
   SVN::Pool requestPool;
   apr_pool_t *pool = requestPool.pool();

Modified: subversion/trunk/subversion/bindings/javahl/native/SVNAdmin.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/SVNAdmin.h?rev=921112&r1=921111&r2=921112&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/SVNAdmin.h (original)
+++ subversion/trunk/subversion/bindings/javahl/native/SVNAdmin.h Tue Mar  9 20:42:28 2010
@@ -34,12 +34,12 @@
 #include "Outputer.h"
 #include "Inputer.h"
 #include "MessageReceiver.h"
-#include "Targets.h"
+#include "StringArray.h"
 
 class SVNAdmin : public SVNBase
 {
  public:
-  void rmlocks(const char *path, Targets &locks);
+  void rmlocks(const char *path, StringArray &locks);
   jobject lslocks(const char *path);
   void verify(const char *path, Outputer &messageOut,
               Revision &revisionStart, Revision &revisionEnd);
@@ -47,7 +47,7 @@ class SVNAdmin : public SVNBase
                   const char *propName, const char *propValue,
                   bool usePreRevPropChangeHook,
                   bool usePostRevPropChangeHook);
-  void rmtxns(const char *path, Targets &transactions);
+  void rmtxns(const char *path, StringArray &transactions);
   jlong recover(const char *path);
   void lstxns(const char *path, MessageReceiver &messageReceiver);
   void load(const char *path, Inputer &dataIn, Outputer &messageOut,

Modified: subversion/trunk/subversion/bindings/javahl/native/StringArray.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/StringArray.cpp?rev=921112&r1=921111&r2=921112&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/StringArray.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/StringArray.cpp Tue Mar  9 20:42:28 2010
@@ -56,6 +56,11 @@ const apr_array_header_t *StringArray::a
   return strings;
 }
 
+const std::vector<std::string> &StringArray::vector(void)
+{
+  return m_strings;
+}
+
 StringArray::StringArray(jobjectArray jstrings)
 {
   m_stringArray = jstrings;

Modified: subversion/trunk/subversion/bindings/javahl/native/StringArray.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/StringArray.h?rev=921112&r1=921111&r2=921112&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/StringArray.h (original)
+++ subversion/trunk/subversion/bindings/javahl/native/StringArray.h Tue Mar  9 20:42:28 2010
@@ -32,7 +32,6 @@
 
 struct apr_array_header_t;
 struct svn_error_t;
-class SVN::Pool;
 
 #include "Path.h"
 #include <vector>
@@ -49,6 +48,7 @@ class StringArray
   StringArray(jobject jstringCollection);
   ~StringArray();
   const apr_array_header_t *array(const SVN::Pool &pool);
+  const std::vector<std::string> &vector(void);
 };
 
 #endif // STRINGARRAY_H

Modified: subversion/trunk/subversion/bindings/javahl/native/Targets.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/Targets.cpp?rev=921112&r1=921111&r2=921112&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/Targets.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/Targets.cpp Tue Mar  9 20:42:28 2010
@@ -34,16 +34,13 @@
 
 Targets::~Targets()
 {
-  if (m_targetArray != NULL)
-    JNIUtil::getEnv()->DeleteLocalRef(m_targetArray);
 }
 
 Targets::Targets(const char *path)
 {
-  m_targetArray = NULL;
+  m_strArray = NULL;
   m_targets.push_back (path);
   m_error_occured = NULL;
-  m_doesNotContainsPath = false;
 }
 
 void Targets::add(const char *path)
@@ -53,50 +50,24 @@ void Targets::add(const char *path)
 
 const apr_array_header_t *Targets::array(const SVN::Pool &pool)
 {
-  if (m_targetArray != NULL)
+  if (m_strArray != NULL)
     {
       JNIEnv *env = JNIUtil::getEnv();
-      jint arraySize = env->GetArrayLength(m_targetArray);
-      if (JNIUtil::isJavaExceptionThrown())
-        return NULL;
-
-      jclass clazz = env->FindClass("java/lang/String");
-      if (JNIUtil::isJavaExceptionThrown())
-        return NULL;
 
-      for (int i = 0; i < arraySize; ++i)
-        {
-          jobject elem = env->GetObjectArrayElement(m_targetArray, i);
-          if (JNIUtil::isJavaExceptionThrown())
-            return NULL;
+      const std::vector<std::string> &vec = m_strArray->vector();
 
-          if (env->IsInstanceOf(elem, clazz))
+      std::vector<std::string>::const_iterator it;
+      for (it = vec.begin(); it < vec.end(); ++it)
+        {
+          const char *tt = it->c_str();
+          svn_error_t *err = JNIUtil::preprocessPath(tt, pool.pool());
+          if (err != NULL)
             {
-              JNIStringHolder text((jstring)elem);
-              if (JNIUtil::isJavaExceptionThrown())
-                return NULL;
-
-              const char *tt = (const char *)text;
-              if (!m_doesNotContainsPath)
-                {
-                  svn_error_t *err = JNIUtil::preprocessPath(tt,
-                                                             pool.pool());
-                  if (err != NULL)
-                    {
-                      m_error_occured = err;
-                      break;
-                    }
-                }
-              m_targets.push_back(tt);
+              m_error_occured = err;
+              break;
             }
-          if (JNIUtil::isJavaExceptionThrown())
-            return NULL;
-
-          env->DeleteLocalRef(elem);
+          m_targets.push_back(tt);
         }
-      env->DeleteLocalRef(clazz);
-      //JNIUtil::getEnv()->DeleteLocalRef(m_targetArray);
-      m_targetArray = NULL;
     }
 
   std::vector<Path>::const_iterator it;
@@ -117,9 +88,9 @@ const apr_array_header_t *Targets::array
   return apr_targets;
 }
 
-Targets::Targets(jobjectArray jtargets)
+Targets::Targets(StringArray &strArray)
 {
-  m_targetArray = jtargets;
+  m_strArray = &strArray;
   m_error_occured = NULL;
 }
 
@@ -127,8 +98,3 @@ svn_error_t *Targets::error_occured()
 {
   return m_error_occured;
 }
-
-void Targets::setDoesNotContainsPath()
-{
-  m_doesNotContainsPath = true;
-}

Modified: subversion/trunk/subversion/bindings/javahl/native/Targets.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/Targets.h?rev=921112&r1=921111&r2=921112&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/Targets.h (original)
+++ subversion/trunk/subversion/bindings/javahl/native/Targets.h Tue Mar  9 20:42:28 2010
@@ -29,10 +29,10 @@
 
 #include <jni.h>
 #include "Pool.h"
+#include "StringArray.h"
 
 struct apr_array_header_t;
 struct svn_error_t;
-class SVN::Pool;
 
 #include "Path.h"
 #include <vector>
@@ -41,17 +41,15 @@ class Targets
 {
  private:
   std::vector<Path> m_targets;
-  jobjectArray m_targetArray;
+  StringArray *m_strArray;
   svn_error_t *m_error_occured;
-  bool m_doesNotContainsPath;
  public:
-  Targets(jobjectArray jtargets);
+  Targets(StringArray &strArray);
   Targets(const char *path);
   void add(const char *path);
   ~Targets();
   const apr_array_header_t *array(const SVN::Pool &pool);
   svn_error_t *error_occured();
-  void setDoesNotContainsPath();
 };
 
 #endif // TARGETS_H

Modified: subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNAdmin.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNAdmin.cpp?rev=921112&r1=921111&r2=921112&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNAdmin.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNAdmin.cpp Tue Mar  9 20:42:28 2010
@@ -329,11 +329,10 @@ Java_org_apache_subversion_javahl_SVNAdm
   if (JNIUtil::isExceptionThrown())
     return;
 
-  Targets transactions(jtransactions);
+  StringArray transactions(jtransactions);
   if (JNIUtil::isExceptionThrown())
     return;
 
-  transactions.setDoesNotContainsPath();
   cl->rmtxns(path, transactions);
 }
 
@@ -463,10 +462,9 @@ Java_org_apache_subversion_javahl_SVNAdm
   if (JNIUtil::isExceptionThrown())
     return;
 
-  Targets locks(jlocks);
+  StringArray locks(jlocks);
   if (JNIUtil::isExceptionThrown())
     return;
 
-  locks.setDoesNotContainsPath();
   cl->rmlocks(path, locks);
 }

Modified: subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp?rev=921112&r1=921111&r2=921112&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp Tue Mar  9 20:42:28 2010
@@ -455,7 +455,8 @@ Java_org_apache_subversion_javahl_SVNCli
       JNIUtil::throwError(_("bad C++ this"));
       return;
     }
-  Targets targets(jtargets);
+  StringArray targetsArr(jtargets);
+  Targets targets(targetsArr);
   JNIStringHolder message(jmessage);
   if (JNIUtil::isExceptionThrown())
     return;
@@ -513,7 +514,7 @@ Java_org_apache_subversion_javahl_SVNCli
 
 JNIEXPORT jlongArray JNICALL
 Java_org_apache_subversion_javahl_SVNClient_update
-(JNIEnv *env, jobject jthis, jobjectArray jpath, jobject jrevision,
+(JNIEnv *env, jobject jthis, jobjectArray jtargets, jobject jrevision,
  jint jdepth, jboolean jdepthIsSticky, jboolean jignoreExternals,
  jboolean jallowUnverObstructions)
 {
@@ -528,7 +529,8 @@ Java_org_apache_subversion_javahl_SVNCli
   if (JNIUtil::isExceptionThrown())
     return NULL;
 
-  Targets targets(jpath);
+  StringArray targetsArr(jtargets);
+  Targets targets(targetsArr);
   if (JNIUtil::isExceptionThrown())
     return NULL;
 
@@ -551,7 +553,8 @@ Java_org_apache_subversion_javahl_SVNCli
       JNIUtil::throwError(_("bad C++ this"));
       return -1;
     }
-  Targets targets(jtargets);
+  StringArray targetsArr(jtargets);
+  Targets targets(targetsArr);
   JNIStringHolder message(jmessage);
   if (JNIUtil::isExceptionThrown())
     return -1;
@@ -617,7 +620,8 @@ Java_org_apache_subversion_javahl_SVNCli
       JNIUtil::throwError(_("bad C++ this"));
       return;
     }
-  Targets srcPaths(jsrcPaths);
+  StringArray srcPathArr(jsrcPaths);
+  Targets srcPaths(srcPathArr);
   if (JNIUtil::isExceptionThrown())
     return;
   JNIStringHolder destPath(jdestPath);
@@ -648,7 +652,8 @@ Java_org_apache_subversion_javahl_SVNCli
       JNIUtil::throwError(_("bad C++ this"));
       return;
     }
-  Targets targets(jtargets);
+  StringArray targetsArr(jtargets);
+  Targets targets(targetsArr);
   JNIStringHolder message(jmessage);
   if (JNIUtil::isExceptionThrown())
     return;
@@ -1670,7 +1675,8 @@ Java_org_apache_subversion_javahl_SVNCli
       JNIUtil::throwError("bad C++ this");
       return;
     }
-  Targets targets(jtargets);
+  StringArray targetsArr(jtargets);
+  Targets targets(targetsArr);
   if (JNIUtil::isExceptionThrown())
     return;
 
@@ -1698,7 +1704,8 @@ Java_org_apache_subversion_javahl_SVNCli
       JNIUtil::throwError("bad C++ this");
       return;
     }
-  Targets targets(jtargets);
+  StringArray targetsArr(jtargets);
+  Targets targets(targetsArr);
   if (JNIUtil::isExceptionThrown())
     return;
 
@@ -1746,7 +1753,8 @@ Java_org_apache_subversion_javahl_SVNCli
       JNIUtil::throwError("bad C++ this");
       return;
     }
-  Targets targets(jtargets);
+  StringArray targetsArr(jtargets);
+  Targets targets(targetsArr);
   if (JNIUtil::isExceptionThrown())
     return;
 
@@ -1769,7 +1777,8 @@ Java_org_apache_subversion_javahl_SVNCli
       return;
     }
 
-  Targets targets(jtargets);
+  StringArray targetsArr(jtargets);
+  Targets targets(targetsArr);
   if (JNIUtil::isExceptionThrown())
     return;