svn_wc_notify_t * svn_wc_dup_notify(const svn_wc_notify_t *notify, apr_pool_t *pool) { svn_wc_notify_t *ret = apr_palloc(pool, sizeof(*ret)); *ret = *notify; if (ret->path) ret->path = apr_pstrdup(pool, ret->path); if (ret->mime_type) ret->mime_type = apr_pstrdup(pool, ret->mime_type); if (ret->lock) ret->lock = svn_lock_dup(ret->lock, pool); if (ret->err) { ret->err = svn_error_dup(ret->err); apr_pool_cleanup_register(pool, ret->err, err_cleanup, apr_pool_cleanup_null); } if (ret->changelist_name) ret->changelist_name = apr_pstrdup(pool, ret->changelist_name); if (ret->merge_range) ret->merge_range = svn_merge_range_dup(ret->merge_range, pool); if (ret->url) ret->url = apr_pstrdup(pool, ret->url); if (ret->path_prefix) ret->path_prefix = apr_pstrdup(pool, ret->path_prefix); if (ret->prop_name) ret->prop_name = apr_pstrdup(pool, ret->prop_name); if (ret->rev_props) ret->rev_props = svn_prop_hash_dup(ret->rev_props, pool); return ret; }
void ReposVerifyCallback::onVerifyError(svn_revnum_t revision, svn_error_t *verify_err, apr_pool_t *scratch_pool) { JNIEnv *env = JNIUtil::getEnv(); // Java method id will not change during the time this library is // loaded, so it can be cached. static jmethodID mid = 0; if (mid == 0) { jclass clazz = env->FindClass(JAVAHL_CLASS("/callback/ReposVerifyCallback")); if (JNIUtil::isJavaExceptionThrown()) return; mid = env->GetMethodID(clazz, "onVerifyError", "(J" JAVAHL_ARG("/ClientException;") ")V"); if (JNIUtil::isJavaExceptionThrown() || mid == 0) return; env->DeleteLocalRef(clazz); } jthrowable jverify_err = NULL; if (verify_err) jverify_err = JNIUtil::createClientException(svn_error_dup(verify_err), NULL); if (JNIUtil::isJavaExceptionThrown()) return; env->CallVoidMethod(m_jverify_cb, mid, jlong(revision), jverify_err); if (verify_err) env->DeleteLocalRef(jverify_err); }
static dav_error * save_value(dav_db *db, const dav_prop_name *name, const svn_string_t *const *old_value_p, const svn_string_t *value) { const char *propname; svn_error_t *serr; const dav_resource *resource = db->resource; apr_pool_t *subpool; /* get the repos-local name */ get_repos_propname(db, name, &propname); if (propname == NULL) { if (db->resource->info->repos->autoversioning) /* ignore the unknown namespace of the incoming prop. */ propname = name->name; else return dav_svn__new_error(db->p, HTTP_CONFLICT, 0, "Properties may only be defined in the " SVN_DAV_PROP_NS_SVN " and " SVN_DAV_PROP_NS_CUSTOM " namespaces."); } /* We've got three different types of properties (node, txn, and revision), and we've got two different protocol versions to deal with. Let's try to make some sense of this, shall we? HTTP v1: working baseline ('wbl') resource -> txn prop change non-working, baselined resource ('bln') -> rev prop change [*] working, non-baselined resource ('wrk') -> node prop change HTTP v2: transaction resource ('txn') -> txn prop change revision resource ('rev') -> rev prop change transaction root resource ('txr') -> node prop change [*] This is a violation of the DeltaV spec (### see issue #916). */ /* A subpool to cope with mod_dav making multiple calls, e.g. during PROPPATCH with multiple values. */ subpool = svn_pool_create(db->resource->pool); if (db->resource->baselined) { if (db->resource->working) { serr = svn_repos_fs_change_txn_prop(resource->info->root.txn, propname, value, subpool); } else { serr = svn_repos_fs_change_rev_prop4(resource->info->repos->repos, resource->info->root.rev, resource->info->repos->username, propname, old_value_p, value, TRUE, TRUE, db->authz_read_func, db->authz_read_baton, subpool); /* Prepare any hook failure message to get sent over the wire */ if (serr) { svn_error_t *purged_serr = svn_error_purge_tracing(serr); if (purged_serr->apr_err == SVN_ERR_REPOS_HOOK_FAILURE) purged_serr->message = apr_xml_quote_string (purged_serr->pool, purged_serr->message, 1); /* mod_dav doesn't handle the returned error very well, it generates its own generic error that will be returned to the client. Cache the detailed error here so that it can be returned a second time when the rollback mechanism triggers. */ resource->info->revprop_error = svn_error_dup(purged_serr); } /* Tell the logging subsystem about the revprop change. */ dav_svn__operational_log(resource->info, svn_log__change_rev_prop( resource->info->root.rev, propname, subpool)); } } else if (resource->info->restype == DAV_SVN_RESTYPE_TXN_COLLECTION) { serr = svn_repos_fs_change_txn_prop(resource->info->root.txn, propname, value, subpool); } else { serr = svn_repos_fs_change_node_prop(resource->info->root.root, get_repos_path(resource->info), propname, value, subpool); } svn_pool_destroy(subpool); if (serr != NULL) return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR, NULL, resource->pool); /* a change to the props was made; make sure our cached copy is gone */ db->props = NULL; return NULL; }