Author: hwright
Date: Mon Jun 13 16:52:43 2011
New Revision: 1135172

URL: http://svn.apache.org/viewvc?rev=1135172&view=rev
Log:
JavaHL: Add cancellation to the repository API.  (This is as yet untested.)

[ in subversion/bindings/javahl/ ]
* native/SVNRepos.cpp
  (SVNRepos): Initialize the m_cancelOperation member.
  (cancelOperation, checkCancel): New.
  (dump, load, recover, verify, pack): Use cancellation.

* native/org_apache_subversion_javahl_SVNRepos.cpp
  (Java_org_apache_subversion_javahl_SVNRepos_cancelOperation): New.

* native/SVNRepos.h
  (checkCancel, cancelOperation, m_cancelOperation): New.

* src/org/apache/subversion/javahl/SVNRepos.java
  (cancelOperation): New.

* src/org/apache/subversion/javahl/ISVNRepos.java
  (cancelOperation): New.

Modified:
    subversion/trunk/subversion/bindings/javahl/native/ClientContext.cpp
    subversion/trunk/subversion/bindings/javahl/native/SVNRepos.cpp
    subversion/trunk/subversion/bindings/javahl/native/SVNRepos.h
    
subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNRepos.cpp
    
subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRepos.java
    
subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNRepos.java

Modified: subversion/trunk/subversion/bindings/javahl/native/ClientContext.cpp
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/ClientContext.cpp?rev=1135172&r1=1135171&r2=1135172&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/ClientContext.cpp 
(original)
+++ subversion/trunk/subversion/bindings/javahl/native/ClientContext.cpp Mon 
Jun 13 16:52:43 2011
@@ -259,7 +259,7 @@ ClientContext::checkCancel(void *cancelB
     ClientContext *that = (ClientContext *)cancelBaton;
     if (that->m_cancelOperation)
         return svn_error_create(SVN_ERR_CANCELLED, NULL,
-                                _("Operation canceled"));
+                                _("Operation cancelled"));
     else
         return SVN_NO_ERROR;
 }

Modified: subversion/trunk/subversion/bindings/javahl/native/SVNRepos.cpp
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/SVNRepos.cpp?rev=1135172&r1=1135171&r2=1135172&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/SVNRepos.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/SVNRepos.cpp Mon Jun 13 
16:52:43 2011
@@ -38,6 +38,7 @@
 #include "svn_private_config.h"
 
 SVNRepos::SVNRepos()
+    : m_cancelOperation(false)
 {
 }
 
@@ -59,6 +60,22 @@ void SVNRepos::dispose()
   SVNBase::dispose(&fid, JAVA_PACKAGE"/SVNRepos");
 }
 
+void SVNRepos::cancelOperation()
+{
+  m_cancelOperation = true;
+}
+
+svn_error_t *
+SVNRepos::checkCancel(void *cancelBaton)
+{
+  SVNRepos *that = (SVNRepos *)cancelBaton;
+  if (that->m_cancelOperation)
+    return svn_error_create(SVN_ERR_CANCELLED, NULL,
+                            _("Operation cancelled"));
+  else
+    return SVN_NO_ERROR;
+}
+
 void SVNRepos::create(File &path, bool disableFsyncCommits,
                       bool keepLogs, File &configPath,
                       const char *fstype)
@@ -227,7 +244,7 @@ void SVNRepos::dump(File &path, OutputSt
                                     ? ReposNotifyCallback::notify
                                     : NULL,
                                  notifyCallback,
-                                 NULL, NULL, requestPool.pool()), );
+                                 checkCancel, this, requestPool.pool()), );
 }
 
 void SVNRepos::hotcopy(File &path, File &targetPath,
@@ -327,7 +344,7 @@ void SVNRepos::load(File &path,
                                     ? ReposNotifyCallback::notify
                                     : NULL,
                                  notifyCallback,
-                                 NULL, NULL, requestPool.pool()), );
+                                 checkCancel, this, requestPool.pool()), );
 }
 
 void SVNRepos::lstxns(File &path, MessageReceiver &messageReceiver)
@@ -374,7 +391,7 @@ jlong SVNRepos::recover(File &path, Repo
                                     ? ReposNotifyCallback::notify
                                     : NULL,
                                  notifyCallback,
-                                 NULL, NULL, requestPool.pool()),
+                                 checkCancel, this, requestPool.pool()),
               -1);
 
   /* Since db transactions may have been replayed, it's nice to tell
@@ -567,7 +584,7 @@ SVNRepos::verify(File &path, Revision &r
                                     ? ReposNotifyCallback::notify
                                     : NULL,
                                    notifyCallback,
-                                   NULL, NULL /* cancel callback/baton */,
+                                   checkCancel, this /* cancel callback/baton 
*/,
                                    requestPool.pool()), );
 }
 
@@ -590,7 +607,7 @@ void SVNRepos::pack(File &path, ReposNot
                                     ? ReposNotifyCallback::notify
                                     : NULL,
                                  notifyCallback,
-                                 NULL, NULL,
+                                 checkCancel, this,
                                  requestPool.pool()),
               );
 }

Modified: subversion/trunk/subversion/bindings/javahl/native/SVNRepos.h
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/SVNRepos.h?rev=1135172&r1=1135171&r2=1135172&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/SVNRepos.h (original)
+++ subversion/trunk/subversion/bindings/javahl/native/SVNRepos.h Mon Jun 13 
16:52:43 2011
@@ -72,11 +72,15 @@ class SVNRepos : public SVNBase
   void dispose();
   static SVNRepos *getCppObject(jobject jthis);
 
+  static svn_error_t *checkCancel(void *cancelBaton);
+  void cancelOperation();
+
  private:
   static svn_error_t *getRevnum(svn_revnum_t *revnum,
                                 const svn_opt_revision_t *revision,
                                 svn_revnum_t youngest, svn_repos_t *repos,
                                 apr_pool_t *pool);
+  bool m_cancelOperation;
 };
 
 #endif // SVNADMIN_H

Modified: 
subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNRepos.cpp
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNRepos.cpp?rev=1135172&r1=1135171&r2=1135172&view=diff
==============================================================================
--- 
subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNRepos.cpp
 (original)
+++ 
subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNRepos.cpp
 Mon Jun 13 16:52:43 2011
@@ -489,3 +489,17 @@ Java_org_apache_subversion_javahl_SVNRep
 
   cl->pack(path, jnotifyCallback != NULL ? &callback : NULL);
 }
+
+JNIEXPORT void JNICALL
+Java_org_apache_subversion_javahl_SVNRepos_cancelOperation
+(JNIEnv *env, jobject jthis)
+{
+  JNIEntry(SVNRepos, cancelOperation);
+  SVNRepos *cl = SVNRepos::getCppObject(jthis);
+  if (cl == NULL)
+    {
+      JNIUtil::throwError("bad C++ this");
+      return;
+    }
+  cl->cancelOperation();
+}

Modified: 
subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRepos.java
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRepos.java?rev=1135172&r1=1135171&r2=1135172&view=diff
==============================================================================
--- 
subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRepos.java
 (original)
+++ 
subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRepos.java
 Mon Jun 13 16:52:43 2011
@@ -247,4 +247,10 @@ public interface ISVNRepos {
      */
     public abstract void pack(File path, ReposNotifyCallback callback)
                        throws ClientException;
+
+    /**
+     * cancel the active operation
+     * @throws ClientException
+     */
+    void cancelOperation() throws ClientException;
 }

Modified: 
subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNRepos.java
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNRepos.java?rev=1135172&r1=1135171&r2=1135172&view=diff
==============================================================================
--- 
subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNRepos.java
 (original)
+++ 
subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNRepos.java
 Mon Jun 13 16:52:43 2011
@@ -223,4 +223,7 @@ public class SVNRepos implements ISVNRep
     public native void upgrade(File path, ReposNotifyCallback callback);
 
     public native void pack(File path, ReposNotifyCallback callback);
+
+    public native void cancelOperation()
+            throws ClientException;
 }


Reply via email to