Alien-SVN
view release on metacpan or search on metacpan
src/subversion/subversion/bindings/javahl/native/StatusCallback.cpp view on Meta::CPAN
*/
StatusCallback::~StatusCallback()
{
// the m_callback does not need to be destroyed, because it is the passed
// in parameter to the Java SVNClient.status method.
}
svn_error_t *
StatusCallback::callback(void *baton,
const char *local_abspath,
const svn_client_status_t *status,
apr_pool_t *pool)
{
if (baton)
return static_cast<StatusCallback *>(baton)->doStatus(
local_abspath, status, pool);
return SVN_NO_ERROR;
}
/**
* Callback called for a single status item.
*/
svn_error_t *
StatusCallback::doStatus(const char *local_abspath,
const svn_client_status_t *status,
apr_pool_t *pool)
{
JNIEnv *env = JNIUtil::getEnv();
// Create a local frame for our references
env->PushLocalFrame(LOCAL_FRAME_SIZE);
if (JNIUtil::isJavaExceptionThrown())
return SVN_NO_ERROR;
static jmethodID mid = 0; // the method id will not change during
// the time this library is loaded, so
// it can be cached.
if (mid == 0)
{
jclass clazz = env->FindClass(JAVA_PACKAGE"/callback/StatusCallback");
if (JNIUtil::isJavaExceptionThrown())
POP_AND_RETURN(SVN_NO_ERROR);
mid = env->GetMethodID(clazz, "doStatus",
"(Ljava/lang/String;"
"L"JAVA_PACKAGE"/types/Status;)V");
if (JNIUtil::isJavaExceptionThrown() || mid == 0)
POP_AND_RETURN(SVN_NO_ERROR);
}
jstring jPath = JNIUtil::makeJString(local_abspath);
if (JNIUtil::isJavaExceptionThrown())
POP_AND_RETURN(SVN_NO_ERROR);
jobject jStatus = CreateJ::Status(wc_ctx, status, pool);
if (JNIUtil::isJavaExceptionThrown())
POP_AND_RETURN(SVN_NO_ERROR);
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.
env->PopLocalFrame(NULL);
return SVN_NO_ERROR;
}
void
StatusCallback::setWcCtx(svn_wc_context_t *wc_ctx_in)
{
this->wc_ctx = wc_ctx_in;
}
( run in 0.469 second using v1.01-cache-2.11-cpan-4991d5b9bd9 )