static svn_error_t * make_editor(svn_editor_t **editor, svn_fs_txn_t *txn, svn_cancel_func_t cancel_func, void *cancel_baton, apr_pool_t *result_pool, apr_pool_t *scratch_pool) { static const svn_editor_cb_many_t editor_cbs = { add_directory_cb, add_file_cb, add_symlink_cb, add_absent_cb, alter_directory_cb, alter_file_cb, alter_symlink_cb, delete_cb, copy_cb, move_cb, complete_cb, abort_cb }; struct edit_baton *eb = apr_pcalloc(result_pool, sizeof(*eb)); eb->txn = txn; eb->cancel_func = cancel_func; eb->cancel_baton = cancel_baton; eb->txn_pool = result_pool; SVN_ERR(svn_editor_create(editor, eb, cancel_func, cancel_baton, result_pool, scratch_pool)); SVN_ERR(svn_editor_setcb_many(*editor, &editor_cbs, scratch_pool)); return SVN_NO_ERROR; }
static svn_error_t * make_editor(svn_editor_t **editor, svn_cancel_func_t cancel_func, void *cancel_baton, apr_pool_t *result_pool, apr_pool_t *scratch_pool) { static const svn_editor_cb_many_t editor_cbs = { add_directory_cb, add_file_cb, add_symlink_cb, add_absent_cb, alter_directory_cb, alter_file_cb, alter_symlink_cb, delete_cb, copy_cb, move_cb, rotate_cb, complete_cb, abort_cb }; struct edit_baton *eb = apr_palloc(result_pool, sizeof(*eb)); /* ### assign EB members */ SVN_ERR(svn_editor_create(editor, eb, cancel_func, cancel_baton, result_pool, scratch_pool)); SVN_ERR(svn_editor_setcb_many(*editor, &editor_cbs, scratch_pool)); return SVN_NO_ERROR; }
svn_error_t * svn_editor_from_delta(svn_editor_t **editor_p, const svn_delta_editor_t *deditor, void *dedit_baton, svn_cancel_func_t cancel_func, void *cancel_baton, svn_delta_fetch_kind_func_t fetch_kind_func, void *fetch_kind_baton, apr_pool_t *result_pool, apr_pool_t *scratch_pool) { svn_editor_t *editor; static const svn_editor_cb_many_t editor_cbs = { add_directory_cb, add_file_cb, add_symlink_cb, add_absent_cb, set_props_cb, set_text_cb, set_target_cb, delete_cb, copy_cb, move_cb, complete_cb, abort_cb }; struct editor_baton *eb = apr_palloc(result_pool, sizeof(*eb)); eb->deditor = deditor; eb->dedit_baton = dedit_baton; eb->edit_pool = result_pool; eb->paths = apr_hash_make(result_pool); eb->fetch_kind_func = fetch_kind_func; eb->fetch_kind_baton = fetch_kind_baton; eb->root.children = apr_hash_make(result_pool); eb->root.kind = svn_node_dir; eb->root.operation = OP_OPEN; eb->root.props = NULL; eb->root.rev = SVN_INVALID_REVNUM; SVN_ERR(svn_editor_create(&editor, eb, cancel_func, cancel_baton, result_pool, scratch_pool)); SVN_ERR(svn_editor_setcb_many(editor, &editor_cbs, scratch_pool)); *editor_p = editor; return SVN_NO_ERROR; }
svn_error_t * svn_repos__get_commit_ev2(svn_editor_t **editor, svn_repos_t *repos, svn_authz_t *authz, const char *authz_repos_name, const char *authz_user, apr_hash_t *revprops, svn_commit_callback2_t commit_cb, void *commit_baton, svn_cancel_func_t cancel_func, void *cancel_baton, apr_pool_t *result_pool, apr_pool_t *scratch_pool) { static const svn_editor_cb_many_t editor_cbs = { add_directory_cb, add_file_cb, add_symlink_cb, add_absent_cb, alter_directory_cb, alter_file_cb, alter_symlink_cb, delete_cb, copy_cb, move_cb, complete_cb, abort_cb }; struct ev2_baton *eb; const svn_string_t *author; apr_hash_t *hooks_env; /* Parse the hooks-env file (if any). */ SVN_ERR(svn_repos__parse_hooks_env(&hooks_env, repos->hooks_env_path, scratch_pool, scratch_pool)); /* Can the user modify the repository at all? */ /* ### check against AUTHZ. */ author = svn_hash_gets(revprops, SVN_PROP_REVISION_AUTHOR); eb = apr_palloc(result_pool, sizeof(*eb)); eb->repos = repos; eb->authz = authz; eb->authz_repos_name = authz_repos_name; eb->authz_user = authz_user; eb->commit_cb = commit_cb; eb->commit_baton = commit_baton; SVN_ERR(svn_fs__editor_create(&eb->inner, &eb->txn_name, repos->fs, SVN_FS_TXN_CHECK_LOCKS, cancel_func, cancel_baton, result_pool, scratch_pool)); /* The TXN has been created. Go ahead and apply all revision properties. */ SVN_ERR(apply_revprops(repos->fs, eb->txn_name, revprops, scratch_pool)); /* Okay... some access is allowed. Let's run the start-commit hook. */ SVN_ERR(svn_repos__hooks_start_commit(repos, hooks_env, author ? author->data : NULL, repos->client_capabilities, eb->txn_name, scratch_pool)); /* Wrap the FS editor within our editor. */ SVN_ERR(svn_editor_create(editor, eb, cancel_func, cancel_baton, result_pool, scratch_pool)); SVN_ERR(svn_editor_setcb_many(*editor, &editor_cbs, scratch_pool)); return SVN_NO_ERROR; }