svn_error_t * svn_editor_copy(svn_editor_t *editor, const char *src_relpath, svn_revnum_t src_revision, const char *dst_relpath, svn_revnum_t replaces_rev) { svn_error_t *err = SVN_NO_ERROR; SVN_ERR_ASSERT(svn_relpath_is_canonical(src_relpath)); SVN_ERR_ASSERT(svn_relpath_is_canonical(dst_relpath)); SHOULD_NOT_BE_FINISHED(editor); SHOULD_ALLOW_ADD(editor, dst_relpath); VERIFY_PARENT_MAY_EXIST(editor, src_relpath); VERIFY_PARENT_MAY_EXIST(editor, dst_relpath); SVN_ERR(check_cancel(editor)); if (editor->funcs.cb_copy) { START_CALLBACK(editor); err = editor->funcs.cb_copy(editor->baton, src_relpath, src_revision, dst_relpath, replaces_rev, editor->scratch_pool); END_CALLBACK(editor); } MARK_ALLOW_ALTER(editor, dst_relpath); MARK_PARENT_STABLE(editor, dst_relpath); CLEAR_INCOMPLETE(editor, dst_relpath); svn_pool_clear(editor->scratch_pool); return svn_error_trace(err); }
// start background thread void datacloud::startthread() { int i; // check pending tile count if (PENDINGTILES==0) return; // non-threaded paging if (START_CALLBACK==NULL) pager(); // threaded paging else for (i=1; i<=MAXTHREADS; i++) if (!ISRUNNING[i]) { // wait for background thread to finish stopthread(i); // start new background thread ISRUNNING[i]=TRUE; ISREADY[i]=FALSE; ISNOTREADY=TRUE; START_CALLBACK(triggerpager,&BACKARRAY[i],START_DATA); NUMTHREADS++; } }
svn_error_t * svn_editor_alter_symlink(svn_editor_t *editor, const char *relpath, svn_revnum_t revision, const char *target, apr_hash_t *props) { svn_error_t *err = SVN_NO_ERROR; SVN_ERR_ASSERT(svn_relpath_is_canonical(relpath)); SVN_ERR_ASSERT(props != NULL || target != NULL); SHOULD_NOT_BE_FINISHED(editor); SHOULD_ALLOW_ALTER(editor, relpath); VERIFY_PARENT_MAY_EXIST(editor, relpath); SVN_ERR(check_cancel(editor)); if (editor->funcs.cb_alter_symlink) { START_CALLBACK(editor); err = editor->funcs.cb_alter_symlink(editor->baton, relpath, revision, target, props, editor->scratch_pool); END_CALLBACK(editor); } MARK_COMPLETED(editor, relpath); MARK_PARENT_STABLE(editor, relpath); svn_pool_clear(editor->scratch_pool); return svn_error_trace(err); }
svn_error_t * svn_editor_delete(svn_editor_t *editor, const char *relpath, svn_revnum_t revision) { svn_error_t *err = SVN_NO_ERROR; SVN_ERR_ASSERT(svn_relpath_is_canonical(relpath)); SHOULD_NOT_BE_FINISHED(editor); SHOULD_NOT_BE_COMPLETED(editor, relpath); VERIFY_PARENT_MAY_EXIST(editor, relpath); CHILD_DELETIONS_ALLOWED(editor, relpath); SVN_ERR(check_cancel(editor)); if (editor->funcs.cb_delete) { START_CALLBACK(editor); err = editor->funcs.cb_delete(editor->baton, relpath, revision, editor->scratch_pool); END_CALLBACK(editor); } MARK_COMPLETED(editor, relpath); MARK_PARENT_STABLE(editor, relpath); svn_pool_clear(editor->scratch_pool); return svn_error_trace(err); }
svn_error_t * svn_editor_add_absent(svn_editor_t *editor, const char *relpath, svn_node_kind_t kind, svn_revnum_t replaces_rev) { svn_error_t *err = SVN_NO_ERROR; SVN_ERR_ASSERT(svn_relpath_is_canonical(relpath)); SHOULD_NOT_BE_FINISHED(editor); SHOULD_ALLOW_ADD(editor, relpath); VERIFY_PARENT_MAY_EXIST(editor, relpath); CHECK_UNKNOWN_CHILD(editor, relpath); SVN_ERR(check_cancel(editor)); if (editor->funcs.cb_add_absent) { START_CALLBACK(editor); err = editor->funcs.cb_add_absent(editor->baton, relpath, kind, replaces_rev, editor->scratch_pool); END_CALLBACK(editor); } MARK_COMPLETED(editor, relpath); MARK_PARENT_STABLE(editor, relpath); CLEAR_INCOMPLETE(editor, relpath); svn_pool_clear(editor->scratch_pool); return svn_error_trace(err); }
svn_error_t * svn_editor_alter_directory(svn_editor_t *editor, const char *relpath, svn_revnum_t revision, const apr_array_header_t *children, apr_hash_t *props) { svn_error_t *err = SVN_NO_ERROR; SVN_ERR_ASSERT(svn_relpath_is_canonical(relpath)); SVN_ERR_ASSERT(children != NULL || props != NULL); /* ### validate children are just basenames? */ SHOULD_NOT_BE_FINISHED(editor); SHOULD_ALLOW_ALTER(editor, relpath); VERIFY_PARENT_MAY_EXIST(editor, relpath); SVN_ERR(check_cancel(editor)); if (editor->funcs.cb_alter_directory) { START_CALLBACK(editor); err = editor->funcs.cb_alter_directory(editor->baton, relpath, revision, children, props, editor->scratch_pool); END_CALLBACK(editor); } MARK_COMPLETED(editor, relpath); MARK_PARENT_STABLE(editor, relpath); #ifdef ENABLE_ORDERING_CHECK /* ### this is not entirely correct. we probably need to adjust the ### check_unknown_child() function for this scenario. */ #if 0 { int i; for (i = 0; i < children->nelts; i++) { const char *child_basename = APR_ARRAY_IDX(children, i, const char *); const char *child = svn_relpath_join(relpath, child_basename, editor->state_pool); apr_hash_set(editor->pending_incomplete_children, child, APR_HASH_KEY_STRING, ""); /* Perhaps MARK_ALLOW_ADD(editor, child); ? */ } } #endif #endif svn_pool_clear(editor->scratch_pool); return svn_error_trace(err); }
svn_error_t * svn_editor_add_directory(svn_editor_t *editor, const char *relpath, const apr_array_header_t *children, apr_hash_t *props, svn_revnum_t replaces_rev) { svn_error_t *err = SVN_NO_ERROR; SVN_ERR_ASSERT(svn_relpath_is_canonical(relpath)); SVN_ERR_ASSERT(children != NULL); SVN_ERR_ASSERT(props != NULL); /* ### validate children are just basenames? */ SHOULD_NOT_BE_FINISHED(editor); SHOULD_ALLOW_ADD(editor, relpath); VERIFY_PARENT_MAY_EXIST(editor, relpath); CHECK_UNKNOWN_CHILD(editor, relpath); SVN_ERR(check_cancel(editor)); if (editor->funcs.cb_add_directory) { START_CALLBACK(editor); err = editor->funcs.cb_add_directory(editor->baton, relpath, children, props, replaces_rev, editor->scratch_pool); END_CALLBACK(editor); } MARK_ADDED_DIR(editor, relpath); MARK_PARENT_STABLE(editor, relpath); CLEAR_INCOMPLETE(editor, relpath); #ifdef ENABLE_ORDERING_CHECK { int i; for (i = 0; i < children->nelts; i++) { const char *child_basename = APR_ARRAY_IDX(children, i, const char *); const char *child = svn_relpath_join(relpath, child_basename, editor->state_pool); svn_hash_sets(editor->pending_incomplete_children, child, ""); } } #endif svn_pool_clear(editor->scratch_pool); return svn_error_trace(err); }
static svn_error_t * check_cancel(svn_editor_t *editor) { svn_error_t *err = NULL; if (editor->cancel_func) { START_CALLBACK(editor); err = editor->cancel_func(editor->cancel_baton); END_CALLBACK(editor); } return svn_error_trace(err); }
svn_error_t * svn_editor_abort(svn_editor_t *editor) { svn_error_t *err = SVN_NO_ERROR; SHOULD_NOT_BE_FINISHED(editor); if (editor->funcs.cb_abort) { START_CALLBACK(editor); err = editor->funcs.cb_abort(editor->baton, editor->scratch_pool); END_CALLBACK(editor); } MARK_FINISHED(editor); svn_pool_clear(editor->scratch_pool); return svn_error_trace(err); }
svn_error_t * svn_editor_complete(svn_editor_t *editor) { svn_error_t *err = SVN_NO_ERROR; SHOULD_NOT_BE_FINISHED(editor); #ifdef ENABLE_ORDERING_CHECK SVN_ERR_ASSERT(apr_hash_count(editor->pending_incomplete_children) == 0); #endif if (editor->funcs.cb_complete) { START_CALLBACK(editor); err = editor->funcs.cb_complete(editor->baton, editor->scratch_pool); END_CALLBACK(editor); } MARK_FINISHED(editor); svn_pool_clear(editor->scratch_pool); return svn_error_trace(err); }
svn_error_t * svn_editor_alter_file(svn_editor_t *editor, const char *relpath, svn_revnum_t revision, const svn_checksum_t *checksum, svn_stream_t *contents, apr_hash_t *props) { svn_error_t *err = SVN_NO_ERROR; SVN_ERR_ASSERT(svn_relpath_is_canonical(relpath)); SVN_ERR_ASSERT((checksum != NULL && contents != NULL) || (checksum == NULL && contents == NULL)); SVN_ERR_ASSERT(props != NULL || checksum != NULL); if (checksum) SVN_ERR_ASSERT(checksum->kind == SVN_EDITOR_CHECKSUM_KIND); SHOULD_NOT_BE_FINISHED(editor); SHOULD_ALLOW_ALTER(editor, relpath); VERIFY_PARENT_MAY_EXIST(editor, relpath); SVN_ERR(check_cancel(editor)); if (editor->funcs.cb_alter_file) { START_CALLBACK(editor); err = editor->funcs.cb_alter_file(editor->baton, relpath, revision, checksum, contents, props, editor->scratch_pool); END_CALLBACK(editor); } MARK_COMPLETED(editor, relpath); MARK_PARENT_STABLE(editor, relpath); svn_pool_clear(editor->scratch_pool); return svn_error_trace(err); }