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;
}